장기 휴가 기간에 CAPCOM의 RE:Requiem과 PRAGMATA 같은 게임들을 플레이하면서
최근 게임 그래픽스에서 실시간 기반의 Ray Tracing이 점점 더 자연스럽게 도입되고 있음을 체감하게 되었다.
여기서 기존의 전통적인 레스터라이저 기반 그래픽 표현에 더해
GI, 그림자 처리, 반사 효과 등을 Ray Tracing으로 보완하는
하이브리드 렌더링 방식이 점점 중요해지고 있다는 점에 대하여 흥미롭게 느껴졌다.
또한, 사람들과 AAA게임에 대한 얘기를 하다 보면 그래픽이 좋다라는 측면에서
빠지지 않는 이야기가 Ray Tracing인데,
이 과정에서 Ray Tracing이 단순히 더 사실적인 그래픽을 만드는 최신 기술인지,
Ray Tracing 방식의 한계가 어느 부분에서 발생하고 왜 적용하기 까다로우며 어떤 방식으로 문제를
해결하는 지에 대해 궁금증을 갖게 되었다.
이러한 측면에서 Ray Tracing에 대한 기술의 기본적인 이해와 구현에 대해 알아야 할 필요성을 느끼게 되었고
이렇게 공부에 대한 기록을 남기고자 한다.
한편, 여러 지인과 기업 멘토분들에게 공부 방식과 학업 방향에 대한 조언을 구하면서 반복적으로 들었던 이야기가 있었다.
기술을 공부할 때 단순히 기술 자체를 이해하거나 구현하는 것에만 목표를 두기보다는,
왜 그 기술을 공부해야 하는지, 그 기술이 어떤 문제를 해결하기 위해 등장했는지에
초점을 맞추는 것이 중요하다는 점이었다.
따라서 이번 Ray Tracing에 대한 공부를 시작하기 전에
먼저 내가 이 공부를 통해 최소한 무엇을 얻고 싶은지 정리해 보려 한다.
나는 실시간 그래픽스가 오랫동안 레스터라이저 기반을 중심으로 발전해 왔다는 것을 공부하며 접해 왔다.
GPU 하드웨어 또한 기본적으로 각 primitive들을 화면에 빠르게 투영하고, 각 픽셀의 색을 계산하는 레스터라이저 기반 흐름에 따라 GPU 내부의 SM( Streaming Multiprocessor)에서 vertex shader, pixel shader, compute shader 같은 일반적인 셰이더 연산을 대량 병렬 처리하는 방향으로 발전해 왔다고 이해하고 있다.
이에따라서 실시간 렌더링에서는 제한된 시간 안에 보기 좋은 이미지를 만들기 위해
다양한 트릭들이 개발되고 발전해 왔다는 것을 공부하였다.
예를 들어 그림자를 표현하기 위한 Shadow Mapping,
화면 공간 정보를 활용하는 SSAO, HBAO, SSR 같은 Screen Space 기반 기법들,
GI를 표현하기 위한 Light Probe, Reflection Probe, Environment Map, PRT 같은 기법들을 접하였다.
이러한 기법들을 공부하고 게임 엔진에서 직접 적용해 보면서
실시간 렌더링이 적은 리소스로 꽤 설득력 있는 결과를 만들어내기 위해
얼마나 많은 아이디어와 트릭을 사용해 왔는지 체감할 수 있었다.
하지만 동시에 이러한 방식들이 가지고 있는 한계도 느끼게 되었다.
예를 들어 SSR은 현재 화면에 보이는 픽셀 정보를 기반으로 반사를 계산하기 때문에
화면 밖에 있는 오브젝트는 반사할 수 없다.
Reflection Probe나 Light Probe 역시 유용한 방식이지만,
미리 저장된 제한된 위치와 방향의 정보를 Bake 해야하고
제한된 정보들을 바탕으로 동작하기 때문에 모든 상황에서 정확한 반사광이나 간접광을 표현하기는 어렵다.
즉, 기존 rasterization 기반 렌더링 기법들은 매우 빠르고 실용적이지만,
반사, 그림자, 간접광처럼 장면의 다른 위치에 대한 정보가 필요한 효과에서는
여러 우회 기법에 의존하게 된다.
이러한 우회 기법은 실제 게임 제작에서 실시간 처리에 있어서 실용적이고 효율적이지만,
특정 상황에서는 화면 밖 정보의 누락, 해상도 문제, probe 배치 문제 등의 과정에서
artifact가 발생할 수 있다는 구조적 한계가 존재한다.
앞으로의 Ray Tracing 공부는 다음과 같은 관점을 중심으로 진행해보려 한다.
첫째, rasterization 기반 렌더링이 어떤 문제를 효율적으로 해결해 왔고
어떤 부분에서 우회 기법에 의존하는지의 흐름을 이해해본다.
둘째, Ray Tracing이 shadow, reflection, global illumination 같은 문제를
어떤 방식으로 더 직접적으로 모델링하는지 이해해본다.
셋째, 실시간 렌더링에서 Ray Tracing이 레스터라이저를 완전히 대체하는 기술이 아니라,
어떤 방식으로 기존 파이프라인과 결합되어 하이브리드로 운용이 되는지를 이해해본다.
넷째, Ray Tracing의 품질적 장점에 등가 교환한 성능 비용, 노이즈,
denoising, acceleration structure 같은 trade off를 이해해본다.
이러한 관점을 바탕으로
ray cast, ray tracing, stochastic sampling, monte carlo integration, quasi monte carlo, path tracing
,ray marching, BVH, denoising
같은 개념들을
하나씩 유기적으로 연결해 보려고 한다.
공부 베이스는
에릭 헤인스,아케나인 몰러가 집필한 Ray Tracing Gem을 통해 진행하고
이론과 관련해서 실제로 실습으로 구현해 볼수 있는 부분들은 작성하여 구현해 보도록 한다.