카테고리 보관물: RAYTRACING

[RTRT] 레이트레이싱 기법 소개

3D 컴퓨터 그래픽 기술의 기본적인 목적은 3D 공간을 특정 시점(카메라)에서 바라봤을 때의 2D 영상을 만들어내는 것이다. 여기에는 크게 두 가지 방식이 있다. 첫 번째 레스터라이징 기법은 단순히 3D 공간을 카메라 시점에서 바라봤을 때 앞에 있는 물체를(가까이 있는 물체의 표면을) 출력하는 기법이고, 두 번째 레이트레이싱 기법은 우리가 실세계에서 눈으로 사물을 바라보는 과정(광원에서 광자들이 튀어나와 사물에 충돌 후 반사되어 눈으로 들어오는 과정)을 컴퓨터로 재현하는 기법이다. 아래 왼쪽 그림은 레스터라이징 기법의 결과물이고, 오른쪽 그림은 레이트레이싱 기법의 결과물이다.

rasray

왼쪽 그림(레스터라이징 기법)을 보면 반사/투과 및 명암 차이가 전혀 나타나지 않는다. 이는 실사와는 거리가 멀지만 속도가 빠르기 때문에 3D 게임같은 실시간 응용에서 널리 사용되고 있다. 오른쪽 그림(레이트레이싱 기법)은 보는 것처럼 자연스러운 명암 표현으로 실사와 유사한 느낌이 든다. 하지만 엄청난 양의 연산이 필요하기 때문에 지금까지는 영화 CG 제작과 같은 오프라인 환경에서 주로 사용되어 왔다. 아래 그림은 두 가지 기법의 동작 과정을 간단히 표현한 것이다.

ras0ray0

왼쪽의 레스터라이징 기법은 위에서 설명한 것처럼 카메라 시점에서 투사면으로 발사된 광선이 처음 충돌하는 표면에서 색을 바로 결정한다. 반면에 오른쪽의 레이트레이싱 기법은 광선의 이동 경로를 추적하여 색을 결정하게 된다. 위에서 한 가지 특이한 점은 실세계에서는 광원에서 광자들이 출발하여 물체에 충돌 후 우리의 눈으로 들어오지만 레이트레이싱 기법은 반대로, 카메라에서 화면 방향으로 광선이 출발한다. 이는 광원에서 나오는 광자들의 양이 너무 많고, 그 중에서 실제로 카메라로 들어오는 양은 미미하기 때문에 효과적인 렌더링을 위해 카메라로 들어오는 광자들만을 계산하기 위해서이다. 하지만 포톤 매핑과 같은 기법들은 광원에서 나온 광자들을 표면에 저장하여 렌더링에 사용하기도 한다. 마지막으로 빛의 이동 경로를 추적하는 과정을 통해 최종 색 값을 결정하기 위해서는 아래의 Rendering Equation 이라고 부르는 모델링 기법을 사용한다[1].

rendering equation

위의 식은 화면의 특정 위치에서 특정 방향으로 반사되는 빛의 양을 계산하기 위한 것이다. 오른쪽의 적분은 해당 위치에서 법선 벡터 방향의 반구(hemisphere)로 들어오는 모든 빛의 양을 더한 것이다. 결국 다양한 레이트레이싱 기법들은 위의 적분을 얼마나 효과적으로 풀어낼 것이냐에 대한 것이다. 패스트레이싱과 포톤 매핑같이 몬테카를로 기법을 이용하는 확률 기반의 레이트레이싱 기법은 멀티 샘플링 방식으로 위의 식을 풀기 때문에 충분히 샘플링하지 않을 경우에는 노이즈가 심한 이미지가 만들어진다[2]. 그리고 향후 유명 게임 엔진들에서 실시간 전역 조명을 위해 적용될 것으로 보이는 Voxel Cone Tracing 은 Sparse Voxel Octree 기반으로 위의 적분식을 5~6 개 정도의 Cone 을 합산하는 방식으로 대체한다[3].

지금까지는 레이트레이싱이라는 기술이 여러 가지 제약사항으로 인해 굉장히 제한된 환경에서만 사용되었지만, 앞으로는 하드웨어/소프트웨어 기술의 발전으로 다양한 온/오프라인 환경에서 널리 사용될 것으로 기대된다.

[참고자료]

1. J. T. Kajiya, “The Rendering Equation”, ACM SIGGRAPH Volume 20, Number 4, 1986.
2. C. Wynn, “An Introduction to BRDF-Based Lighting”, NVIDIA Corporation.
3. C. Crassin, “Interactive Indirect Illumination Using Voxel Cone Tracing”, ACM SIGGRAPH Volume 30, Number 7, 2011.

Advertisements

[RTRT] 멋진 실시간 렌더링 데모 공개!!!

드디어 이런 프로젝트가 나오기 시작하네요^^ 진짜 멋지네요~~~

많이 봐오던 OpenGL 이나 DirectX 기반의 3D 실시간 게임이랑은 느낌이 많이 다르죠? 마치 영화 속의 한 장면을 보는것같은…왜냐하면 영화 속 CG 를 만드는 기술과 유사한 기술(레이 트레이싱)을 사용하기 때문입니다. (NEMO-UX 의 기반이 되는 기술도 동일한 기술입니다.)

최근 그래픽 하드웨어와 소프트웨어의 엄청난 발전으로 이제 이런 그래픽이 실시간으로 가능하게 되었습니다. 언리얼 엔진이나 크라이시스 엔진에서는 하이브리드 방식으로 레스터라이징 기반에 부분적으로 레이 트레이싱 기술을 적용하기 시작했고, 어도브에서도 실시간 레이 트레이싱 기술을 적용하기 시작했습니다. 아직은 대규모의 게임을 완벽하게 실시간 레이 트레이싱으로 돌리기는 힘들지만, 상대적으로 훨씬 단순한 UX 부터 시작하여 널리 쓰이기 시작할 것 같습니다.

아직 해당 프로젝트에 대한 정보가 공개된건 거의 없지만, Arauna Real-time Ray Tracing 을 개발하던 곳에서 개발한 것 같습니다. 동영상만 봤을 때는 NVIDIA OptiX 기반의 progressive path tracing 방식을 사용한 것 같긴한데 확인해봐야겠네요. 아무튼 무척이나 기대되는 프로젝트입니다.