전통적인 방법(퀘이크)의 BSP/PVS를 구현하는 것은 쉽지 않다. 일단 만들기가 어렵다. 코드는 복잡하다. 맵툴 없이는 오차 문제 때문에 제대로된 결과를 얻기 힘들다.
그래서 PVS를 좀 쉽게 만들 수 있는 방법을 생각해봤다.
맵을 구성하는 매쉬들이 박스들로만 이루어진다면 BSP트리를 빌드했을때 모든 leaf들은 정확하게 육면체가 된다.
육면체이기 때문에 카메라를 6개 만들수 있고 큐브맵을 렌더타겟으로 하여 360도 렌더링이 가능하다.
임의의 leaf A의 박스 월드를 먼저 렌더링 한후 다른 n개의 leaf들을 렌더링 하면 n개의 leaf들 각각에 대해 visibility를 구할 수 있다. 이것으로 임의의 leaf A에서 모든 leaf들에 대한 pvs를 만들어둘 수 있다.
퀘이크의 bsp/pvs만큼 칼같이 정확하진 않다. 하지만 코드가 단순하다. boolean연산을 해서 portal을 만들 필요가 없다.
구현은 다음과 같이 한다.
1. 월드의 메쉬데이타를 박스모델들로 바꾸기.
2. 박스모델들의 면으로 BSP트리 만들기.
3. BSP트리의 각 Leaf별로 360도 렌더링 테스트.
4. Leaf별로 PVS생성 완료!
계속 작업중인데 내가 뭔가 빠뜨렸을수도 있고 실제로 해보면 잘 안될수도 있다.
일단 아이디어는 이러함.