Post Lists

2018년 11월 20일 화요일

View Frustum Culling Tutorial 번역

http://cgvr.informatik.uni-bremen.de/teaching/cg_literatur/lighthouse3d_view_frustum_culling/index.html

View Frustum Culling Tutorial

Introduction
다른 각도로 한 scene을 시각화하기 위해서, 가상의 카메라가 종종 사용된다. 흔히 gluPerspective와 gluLookAt 함수로 처리되는 가상 카메라 설정은 스크린에 보일 수 있는 것을 결정한다.

view frustum은 잠재적으로 스크린에 보일 수 있는 (occlusions이 있을 수도 있다), 모든 것을 포함하는 volume이다. 이 volume은 카메라의 설정에 따라 정의되고, perspective projection을 사용할 때, truncated(잘려진) 피라미드의 모형을 사용한다.

피라미드의 정점은 카메라의 위치이고, 피라미드의 밑변은 far plane이다. 그 피라미드는 near plane에서 잘려지고, 그러므로 frustum (절두체) 이다.

스크린에 잠재적으로 보일 수 있는 모든 것은 적어도 부분적으로 그 잘려진 피라미드 안에 있다. 그래서 frustum 밖에 있는 것을 렌더링할 필요가 없다, 그것은 어쨋든 보이지 않기 때문이다.

위의 그림에서 모든 초로색 물체와 (view frustum안에 완전히 있는) 모든 노란색 물체는 (부분적으로 안에 있는) 렌더링 될 것이다. 반면에 그 빨간색 물체는 렌더링 되지 않을 것이다. 초록색 구가 보이지 않는다는 것에 주목해라 (그것은 노란색 타원에 의해 가려졌다), 그러나 그것은 view frustum안에 있기 때문에 어쨋든 렌더링 될 것이다.

view frustum culling의 목적은 그러므로 frustum안에 있는 것을 식별할 수 있기 위한 것이다 (총체적으로 또는 부분적으로) 그리고 안에 있지 않는 모든 것을 cull (골라낸다) 한다. frustum안에 있는 물체만이 그래픽스 하드웨어에 보내진다. 끝으로, 그래픽스 하드웨어에 요청되는 모든 것은 잠재적으로 보이는 것을 렌더링 한다, 그리고 이것은 어쨋든 보이지 않는 모든 그러한 정점 처리에 대해서 절약한다. 게다가, 이것은 잠재적으로 프로그램의 성능을 향상 시킬 수 있다. 왜냐하면 3D 세계의 보이는 부분의 일부 정점들만이 그래픽스 카드 메모리에 유지되기 때문이고, 이러한 것은 전체 3D 세계보다 더 잘 맞을 가능성이 높다.

이 테스트는 만약 frustum안에 있는 그 3D 세계의 일부가 상당히 그 자제 world보다 작다면 말이 된다. 그러나 상당히 더 작다는 것을 무엇을 의미하는가? 그것은 프로그램마다 다르다. 극한의 경우에, 전체 3D 세계가 항상 보일 때, view frustum culling은 시간 낭비이다, 왜냐하면 cull할 것이 없기 때문이다. 그러나 이 culling technique은 구현하기에 매우 쉽고, 성능 이득이 명백하기 때문에, 시도할 필요는 있다.

Shape of the View Frustum
이 섹션에서 view frustum의 도형은 OpenGL 프로그램에서의 명령어와 관련되어 있다. perspective projection은 gluPerspective function을 사용해서 정의되고, 그 카메라가 gluLookAt function으로 위치되어 있다고 가정된다.

처음에 이러한 함수들의 파라미터들 (모두 부동소수점이다) 상기해보자:

  • gluPerspective(fov, ratio, nearDist, farDist);
  • gluLookAt(px, py, pz, lx, ly,lz, ux,uy, uz);
피라미드의 정점은 카메라의 위치 (px, py, pz)이다. view ray는 방향 d = l - p;로 연산될 수 있고, l = (lx, ly, lz)이고 원점 p = (px, py, pz)이다. near and far planes은 view ray에 수직이고, nearDist와 farDist에 위치한다. 그러한 near and far 평면들에서 view frustum의 rectangular 경계들은 거리, fov(vertical field of view), ratio (horizontal and vertical fields of view 사이의 비율)의 함수인 dimension을 가진다.

near plane에서 rectangular boundary의 height and width는 다음으로 정의된다:

Hnear = 2 * tan(fov / 2) * nearDist
Wnear = Hnear * ratio

그 같은 추론은 far plane에도 적용된다:

Hfar = 2 * tan(fov / 2) * farDist
Wfar = Hfar * ratio;


댓글 없음:

댓글 쓰기