반응형

http://www.misofruit.co.kr/seojewoo/programming/project23111.htm




PVS(Potentially visible set)은 visible surface determination(보이는 면 결정)알고리즘의 하나이다. 공간상에서 폴리곤들은 다른 폴리곤에 가려서 보이지 않는 경우가 많다. 그래서 보이는 폴리곤들만을 결정해서 렌더링한다는 이론이다. 퀘이크엔진의 경우, 지형을 leaf라고 하는 여러 개의 영역으로 나눈 뒤(leaf를 방이라고 생각하면 이해가 쉬울 것이다.) 각 영역에서 보일 수 있는 영역들의 리스트(potentially visible set: PVS)를 미리 계산하여서 Lookup 테이블에 저장해 둔다. 게임 동작중에는 카메라의 위치에 따라 해당 위치의 leaf에서 보이는 영역에 대한 리스트를 Lookup테이블을 참조하여서 얻을 수 있다. 그리고 이 영역들만을 렌더링하게 되고 나머지 leaf들은 렌더링에 포함되지 않는다.

감자님의 사이트에 올려져 있는 글입니다.
http://www.gamza.net/ez2000/ezboard.exe?db=Algorithm&action=list&page=0 

** Portal을 이용한 PVS작성개념 **
copyrightⓒ 김성수 [2001년 02월 21일]

퀘이크가 '보이는 공간 작성'에 사용하는 방법은? 포탈 입니다. 
포탈은 두개의 공간과 연결되어있고, 공간은 여러개의 포탈과 연결될수 있죠. 
퀘이크가 하는짓은...궤이크 유틸소스/Vis/flow.c 의 void RecursiveLeafFlow (...) 만 분석해보시면 됩니다. 
개념을 잡기위해 간단하게 그림을 몇장 그려봤습니다.

공간 A에서 보이는 공간리스트를 작성하기 위한 그림입니다.
우선 공간A의 임의의 포탈Pab와 그와 연결된 공간 B의 Pab가 아닌 임의의 포탈Pbc를 잡습니다.
Pbc와 연결된 또다른 공간을 C라하고 Pab위에서 Pbc를 통해 보이는 C의 포탈을 찾습니다.
이때 일부만 보이는 포탈은 클리핑을 합니다.








이 과정을 재귀적으로 반복하여 더이상 보이는 포탈이 없을때까지 반복을 하면 됩니다.
아래 그림은 한 공간내에 포탈이 두개 이하이지만...보통은 그 이상이될경우가 많습니다.
이때는 모든 포탈에대해 하나도 빠짐없이 똑같은 일을 수행한다고 생각하시면 됩니다.


이 그림에서는 Pab를 통해 보이는 포탈이 Pbc, Pcd, Pde뿐이니...보이는 공간리스트는.. B,C,D,E 가 되겠네요.

자세한 해답은 '궤이크 유틸소스/Vis/flow.c' 에 있습니다.
재귀호출이 마구 난무하고있는 소스라 분석이 매우 어렵지만... 
열심히 보시면 이해가 되리라 생각됩니다. 설명은...그냥 참고 정도로만 생각하시구... 

참...퀘이크 유틸소스는...BSP트리구성시 유의할점들... 에 포함되어 있습니다.

                 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

다음은 마소 2001년 9월호에 올라와 있는 글이다.


 

반응형

+ Recent posts