라스터라이저 렌더링이 기본. 도저히 안 될때만 레이 트레이싱
마이크로소프트는 윈도우 환경의 멀티미디어 컴포넌트 API인 다이렉트 X에 레이 트레이싱 파이프라인을 통합하고, 이를 DirectX Raytracing라고 명명했습니다. 3D마크의 개발사인 퓨처마크는 GDC 2018에서 레이 트레이싱 관련 세션인 New Techniques for Accurate Real-Time Reflections를 열어 자신들의 생각을 설명했습니다.
우선 퓨처마크의 DXR 기술 데모인 DirectX Raytracing tech demo - accurate real-time reflections부터 보고 시작합시다.
퓨처마크에서 3D 마크 팀을 지휘하는 Maksim Aizenshtein은 이 데모의 효율이 매우 좋다고 설명합니다. 이유는 간단합니다. 화면 내에서 픽셀 렌더링의 많은 부분이 기존의 라스터라이저를 사용했기 때문. 바꿔 말하면 레이 트레이싱은 가능한 쓰지 않았습니다. 그리고 이것이야말로 레이 트레이싱 도입 단계에서 게임 그래픽의 최적화 방법이라고 주장합니다.
DXR이 발표되면서 레이 트레이싱의 붐이 일고 있으나, 성능을 최대한 높이려면 현재의 GPU에서 어느 정도로 레이 트레이싱을 할 수 있는지를 봐야 합니다. 근데 풀 HD 화면 전체의 픽셀에서 1개의 광선씩(2백만 픽셀이니까 2백만개)가 고작입니다. 따라서 레이 트레이싱을 할 수 있는 횟수는 당연히 제한됩니다.
이건 에픽 게임의 데모입니다. 이걸 24fps로 실시간 구동하기 위해 테슬라 V100 4장을 수냉 구성한 DGX 스테이션을 사용했다고 합니다. 일반 게이머들이 이런 그래픽을 본다는 건 말도 안되지요. 그래서 '최대한 레이 트레이싱을 쓰지 않는다'라는 방침을 세우고, '도저히 안 될때만 레이 트레이싱을 사용'하는 것이 현실적인 최적화 방법이라는 겁니다.
레이 트레이싱같은 레이 트레이싱은 최대한 쓰지 않는다
일반론적으로 3D 게임 그래픽에선 궁극의 화질을 지향하지 않습니다. 설득력 있는 비주얼만 달성하면 됩니다. 그러니 현재의 라스터라이저 기법으로 되지 않는 영역만 레이 트레이싱 기법으로 그리면 된다는 결론에 따라 퓨처마크는 데모를 만들었습니다.
퓨처마크 기술 데모의 렌더링 파이프라인입니다. 상단은 라스터라이저 기법으로 구현된 Deferred Rendering 기반 렌더링 파이프라인입니다. 구체적으로는 조명과 그림자에 대한 매개변수들을 렌더링해 G 버퍼를 생성하고, 큐브 환경 맵 등을 광원으로 간주해서 장면을 조명하는 (Image Based Lighting으로 가는 방향입니다. 여기까지가 현대의 Deferred Rendering입니다. 그리고 아래는 DXR로 구현한 방법입니다.
이를 근거로 퓨처마크의 기술 데모가 내린 결론은 두가지입니다. 하나는 퓨처마크의 기술 데모에서 레이 트레이싱은 반사 요소를 얻기 위해서만 사용했습니다. 퓨처마크 외에 레이 트레이싱 데모를 공개한 다른 회사들, 에픽 게임, EA, 레미디는 반사 효과 외에도 Ambient Occlusion 그림자 생성 등에도 레이 트레이싱을 사용했습니다. 이 경우 성능을 어느 정도 확보하려면 대량의 광선 사출이 안됩니다. 하지만 레이 트레이싱으로 그림자 효과를 그리려면 많은 수의 광선을 사출해야 합니다. 그래서 퓨처마크는 라스터라이저로 구현하기 어려운 반사 이미지만 레이 트레이싱으로 그리자고 판단했습니다.
그림자는 현재의 기술로도 나름대로 품질을 낼 수 있으며, Ambient Occlusion도 마찬가지라고 퓨처마크는 설명합니다. 오히려 이들은 레이 트레이싱을 사용해도 노이즈가 생기기 쉬우며, 나중에 따로 연산해서 노이즈를 지워야 한다면 기존의 라스터라이저만으로도 충분하다고 판단했습니다.
반사 표현에서 라스터라이저와 레이 트레이싱의 비교. 위의 4가지 항목은 라스터라이저로 모두 Robust가 부족합니다. 아래의 2개는 레이 트레이싱으로 속도는 별로지만 품질은 좋습니다.
뭐든 레이트레이싱을 쓰는 건 좋은 아이디어가 아니다.
두번째는 반사 효과를 레이 트레이싱으로 그릴 때, 광선이 충돌한 대상의 조명과 그림자 렌더링에선 가급적 부하가 걸리지 않는 방법을 우선 고르자는 것입니다. 물론 반사 효과를 내기 위해 광선을 발사하고, 3D 개체에 충돌했다면 여기에서 충돌 재질을 고려해 조명과 그림자를 그려야 하니, 레이 트레이싱보다 더 부하가 적은 대안은 없을 겁니다. 대신 광선이 충돌한 부분이 뷰포트에서 보이는지를 판단해서 렌더링 여부를 결정해도 될 것입니다. 이것은 렌더링 결과에서 반사 이미지를 생성하는 기술인 SSR(Screen Space Reflection)의 처리 방식 그대로입니다. 광선의 충돌 부분을 SSR로 커버 가능하다면 SSR로 처리합니다.
그럼 광선이 3D 모델에 충돌하지 않고 장면에서 빗나가면 어떨까요. 이 경우 스카이 박스와 큐브 환경 맵을 샘플링해서 사용합니다. 그래서 환경 맵을 바로 쓰는 것과 별 차이가 없습니다. 그러면 도대체 어떤 상황에서 진짜 레이 트레이싱을 써야 할까요? 발사된 광선이 3D 모델과 충돌학도, 충돌된 3D 객체가 렌더링 프레임에 포함되지 않는 화면 밖에 있거나, 화면에 있지만 뷰포트에선 사각에 위치할 때, 다시 말해 SSR이 제대로 처리하지 못하는 부분에만 레이 트레이싱 처리를 합니다.
퓨처마크 DXR 기술 데모에서 레이 트레이싱을 활용한 픽셀은?
퓨처마크의 전시 부스
Antti Hirvonen(3DMark Tech Lead, Futuremark)
DXR 기술 데모가 동작할 때 어떤 픽셀을 어떤 방법으로 계산해서 색상을 결정하는지를 보여주는 화면입니다. 데모 동영상이 재생된 후 40초가 지났을 때. 분홍색은 라스터라이저로 그려진 영역입니다. 그림자와 조명은 물리 기반 렌더링이지만, 재질이 갖는 표면의 Roughness가 나름 있기에 미리 계산한 큐브 맵 기반 이미지로 조명합니다. 녹색은 레이 트레이싱은 있지만 SSR이나 큐브 환경 맵을 참조해서 대체하는 영역입니다. 물리적으로는 잘못됐으나 별로 티가 나지 않는 영역입니다.
주황색은 진짜 레이 트레이싱을 하는 영역으로 부하가 가장 높습니다. 헬멧 일부가 주황색인데 화면 밖에 위치한 천장을 반사해서 그려내야 하는 부분입니다. 천장은 화면 밖에 있으니 SSR을 쓰지 못하며 레이 트레이싱을 써야 합니다. 파란색은 광선이 3D 객체에 충돌하지 않고 해당 3D 장면을 벗어난 영역입니다. 환경 맵이나 스카이 박스를 참조해서 그리니 처리 부하가 가장 낮습니다.
헬멧을 보면 천장 부분의 반사가 그대로 그려졌음을 알 수 있습니다.
퓨처마크 DXR 기술 데모에서 봐야 할 부분
퓨처마크 기술 데모에서 DXR의 사용 효과입니다 .여기서 중요한 건 DXR의 사용 여부가 아니라, 라스터라이저에 레이 트레이싱을 더한 것과, 라스터라이저만으로 처리한 화면의 차이점을 판별하는 것입니다. DXR을 껐을 땐 거울에 캐릭터가 비치지 않습니다. 위 시점에서 캐릭터는 정면이 보이지만 거울에 비치는 것 뒤나 옆이기에 SSR로는 반사 이미지를 만들지 못합니다. 일부 배경은 왜곡되서 비춰지지만 이는 큐브 환경 맵을 사용한 결과입니다. 왜곡이 생기는 건 큐브 환경 맵을 생선한 시점과 카메라 시점, 거울에 반사된 시점의 차이가 크기 때문입니다.
바닥을 봅시다. DXR을 껐을 땐 SSR 기준으로 반사 이미지를 만들었기에, 반사된 이미지에서 천장 부분은 보이지 않습니다. 또 오른쪽의 가구를 보면 라스터라이저에선 반사 이미지가 중간에 사라지기에, 광원에서 나온 빛이 가구를 뚫고 바닥을 그대로 비춥니다. 이쯤 되면 부자연스러운 게 아니라 렌더링을 잘못한 거지만, 실제 SSR을 사용한 게임 그래픽에서는 당연한 일입니다.
3D 모델의 재질 표면에 비춰지는 조명을 풍부하게 보이도록 반사를 활용한 사례입니다. 왼쪽의 전시대는 DXR을 켰을 때 바닥을 반사해서 보여줍니다.
현실적인 레이 트레이싱 활용법의 제안
정리합시다. '반사 이외의 레이 트레이싱은 하지 않는다' '리플렉션 레이 트레이싱을 가벼운 기술로 커버할 수 있다면 그게 우선' 이라고 결론지을 수 있지만, 레이 트레이싱의 효과를 제대로 간파하고 있음을 알 수 있습니다. 화려한 그래픽 효과인 DXR을 이렇게 소심하게 사용하냐고 반박할 수 있으나, 모든 3D 게임 그래픽을 레이 트레이싱으로 대체하는 건 무리입니다. 오히려 퓨처마크의 소극적인 방법이야말로 현실적입니다.
지금은 그래픽카드나 GPU 칩의 성능에 따라 그래픽 품질을 타협해야 합니다. 이 경우에도 라스터라이저의 렌더링 파이프라인은 거의 그대로 두고, 레이 트레이싱은 켜고 끌 수 있도록 하는 퓨처마크의 방법이 성능 최적화와 튜닝에 더 유리합니다. 물론 이건 게임/엔진 개발사마다 생각이 다르겠지요. 다만 레이 트레이싱의 현실적인 활용법에 의미가 크다고 봅니다.
PC 게임 중옵 상옵 보는것 같습니다.