튜링의 레이트레이싱 기술 TURING RAY TRACING TECHNOLOGY 레이트레이싱은 장면과 대상이 되는 객체의 조명 환경을 매우 사실적으로 시뮬레이션하는 연산 집약적 렌더링 기술입니다. RTX 그래픽카드는 튜링 GPU 기반 레이트레이싱을 통해 물리적으로 정확한 반사(reflections), 굴절(refractions), 그림자 및 간접 조명을 실시간으로 렌더링 할 수 있습니다. 과거에는 GPU 아키텍처의 한계로 인해 단일 GPU 그래픽카드에서는 게임이나 그래픽 애플리케이션에 대한 실시간 레이트레이싱 작업을 수행할 수 없었습니다. 물론, 엔비디아의 GPU 가속 NVIDIA Iray® 플러그인과 OptiX 레이트레이싱 엔진을 통해 구현할 수는 있었지만, 고품질의 레이트레이싱을 실시간으로 수행할 수는 없었습니다. 마찬가지로 현재의 엔비디아 볼타(Volta) GPU는 사실적인 영화 품질에 해당하는 레이트레이싱 장면을 렌더링하는 것은 가능하지만, 단일 GPU에서 실시간 렌더링은 무리였습니다. 이러한 레이트레이싱의 연산 집약적 특성으로 인해 게임에서 레이트레이싱은 사용되지 않았습니다. 아니 못했다고 보는 것이 현실적인 표현입니다. 특히 3D 게임은 원활한 게이밍을 위해 초당 30~90개 이상의 애니메이션이 요구되는 애플리케이션입니다. 어쩔 수 없이 완전히 사실적인 렌더링은 포기하거나 타협할 수밖에 없었고, GPU 가속 래스터화 렌더링 기술(GPU-accelerated rasterization rendering)에 의존해왔습니다. 
이런 이유로 GPU에서 실시간 레이트레이싱을 구현하는 것은 커다란 벽처럼 느껴졌던 것이 사실입니다. 하지만 엔비디아는 튜링 TU102, TU104 및 TU106 GPU에 포함된 RT 코어로 하드웨어 기반 레이트레이싱 가속 엔진과 NVIDIA RTX 소프트웨어 기술을 통합하여 실시간 레이트레이싱을 구현하는 데 성공했습니다. 물론, 기술적 성취와는 별개로 실제 이미지 품질의 완성도와 게이머 그리고 사용자에게 시각적인 만족도에 대한 평가를 남겨두고 있는 상황입니다. 이 부분은 조금 더 시간이 필요하겠죠. 다시 돌아와서, 기존의 PC 게임 영역에서의 실시간 렌더링은 사실상 래스터화(Rasterized) 기술이 표준이었습니다. 그리고, 지속적인 개발자의 노력과 발전을 통해 상당한 수준의 비주얼을 구현하고 있죠. 하지만, 분명한 한계점은 존재합니다. 예를 들어, 래스터화만 사용하여 반사 효과와 그림자를 렌더링하려면 다양한 유형의 아티팩트(Artifact, 이상적이지 않은 인공적 그래픽 요소)를 유발할 수 있습니다. 연산 부하를 줄이기 위한 단순화된 구현 방식의 한계인 것이죠. 래스터화된 그림자는 종종 앨리어싱(Aliasing, 계단현상)과 현실적이지 않은 이미지 문제를 겪으며, 스크린 공간 반사(Screen-space reflections, SSR)는 스크린에 보이는 객체만 반사하여 보여줍니다. 이러한 아티팩트는 결국 게이밍 경험의 현실성을 떨어뜨리고 개발자와 아티스트가 추가적인 효과로 수정해야 하기 때문에 많은 경제적 비용이 듭니다. ▲ 엔비디아 RTX로 구동되는 실시간 레이트레이싱 렌더링 데모 이런 문제로 인해 래스터화보다는 당연히 레이트레이싱 렌더링이 이상적인 화면을 보여줍니다. 누구나 잘 알고 있습니다. 하지만, 연산 부하량이 엄청나게 높다는 현실적인 문제에 직면합니다. 그렇다면 레이트레이싱 본질적인 알고리즘은 무엇일까요? 아마도 레이트레이싱을 잘 모르는 사람의 추측과는 반대일 가능성이 큽니다. 그 이유는 광선(ray)의 출발점은 광원이 아니라 장면을 보는 시점이기 때문입니다. 실제로 레이트레이싱은 뷰 카메라를 기준으로 눈에서 시작하여 광원에 이르기까지 역추적 방식을 가집니다. 이러한 역추적 프로세스는 애초에 광원에서 여러 방향으로 방출되는 모든 광선을 추적하는 것보다는 시스템 자원 활용 측면에서 훨씬 효율적이기 때문입니다.
▲ 레이트레이싱의 기본 구현 알고리즘(이미지 출처: 위키피디아) 또한, 눈이 바라보는 장면, 즉 눈에 도달하는 광선만 추적하면 충분히 사실적인 렌더링이 가능합니다. 일부 광선은 광원에서 직접 눈까지 닿지만, 다른 광선은 장면의 다른 객체에 의해 차단되어 그림자가 생기거나 혹은 눈에 닿기 전에 다른 객체를 통해 반사되고 굴절됩니다. 그리고 하나의 장면에서 광선이 객체를 교차하게 될 때는 해당 객체의 교차점에 색상/조명 등 다양한 정보가 렌더링되는 최종 픽셀 색상과 조명 레벨에 영향을 주게 됩니다. 이러한 레이트레이싱의 기본 구현 원리를 고려해볼 때, 쏘아지는 광선의 수와 반사 및 굴절에 의해 생성되는 추가 광선까지 그 수가 굉장한 수치에 이르게 됩니다. 즉 사실적인 이미지를 구현해내기 위해서는 매우 비싼 자원이 들어갈 수밖에 없는 것이죠. 또한 레이트레이싱을 원하는 객체의 수와 유형, 그리고 GPU 연산 능력, 해상도 등 많은 요소들은 쏘아지는 광선의 수에 영향을 미치게 됩니다. 하지만 레이트레이싱은 실제 카메라에 의해 촬영된 실사 이미지와 구별이 불가능한 수준의 이미지를 만들어낼 수 있기 때문에, 수년간 영화의 특수 효과로서 광범위하게 사용되어 왔습니다. 실제로 실사 영화에서 레이트레이싱을 활용한 CG는 놀라울 정도로 사실적입니다. 다시 본론으로 돌아와, 레이트레이싱은 굉장히 사실적인 이미지 품질을 보여주기 때문에, 구현할 수만 있다면 가장 이상적인 결과물을 내어줄 수 있습니다. 하지만 광선 추적에 소요되는 연산 부담의 현실적인 문제를 해결해야하기 때문에 튜링 GPU는 레이트레이싱과 래스터화를 결합하는 하이브리드(Hybrid) 렌더링 방식을 취합니다. 이 방법을 사용하면 일반적인 영역에는 래스터화를 사용하고 반사와 굴절 셰이딩 렌더링과 같이 래스터화 대비 가장 시각적인 체감을 얻을 수 있는 영역에 한하여 레이트레싱을 사용합니다. 
▲ EA SEED 부서의 이미지 예(SEED//Pica Pica 하드웨어 레이트레이싱과 튜링) 즉 하이브리드 렌더링은 레이트레이싱과 래스터화 기술을 렌더링 파이프라인에 결합하여 각 장면을 렌더링하는 데 가장 적합한 방식을 취하는 렌더링 기술입니다. 여기 한 예로 EA의 SEED는 PICA PICA 실시간 레이트레이싱 실험을 위해 하이브리드 렌더링 모델을 사용하고 있습니다. SEED의 R&D 엔진인 Halcyon을 사용하여 제작된 PICA PICA는 마이크로소프트의 DXR(DirectX Raytracing)과 엔비디아 GPU를 사용하여 실시간 레이트레이싱을 구현합니다. 하이브리드 렌더링 파이프라인의 경우 래스터화와 z-버퍼링은 객체의 가시성을 결정하는 데 훨씬 빠르기 때문에 레이트레이싱 프로세스 중 레이캐스팅(ray casting) 단계를 대신할 수 있습니다. 그 다음 2차 광선을 촬영하는 데 레이트레이싱을 사용하여 물리적으로 정확한 반사와 굴절 그리고 그림자를 생성합니다. 본 내용에 대해서는 아래 그림을 통해 좀 더 상세하게 설명하도록 하겠습니다. 
▲ 레이트레이싱과 래스터화 파이프라인의 개요: 레이트레이싱과 레스터화 파이프라인은 튜링 GPU의 하이브리드 렌더링 모델에서 동시에 작동합니다. 하이브리드 렌더링 파이프라인은 단일 튜링 GPU를 사용하여 게임과 다양한 그래픽 애플리케이션에서 실시간 레이트레이싱을 사용할 수 있게 해주는 근본적인 구조입니다. 물론, 수백 개의 광선이 실시간으로 전송되는 것을 기대할 수는 없습니다. 사실, 튜링 GPU의 레이트레이싱 기술은 픽셀 당 적은 수의 광선과 엔비디아 실시간 레이트레이싱 노이즈 제거(NVIDIA Real-Time Ray Tracing Denoise) 모듈을 통해 매우 큰 폭으로 연산 부하를 낮춰 레이트레이싱을 구현하기 때문입니다. 어쨌든, 지금껏 연산 부하로 인한 레이트레이싱 구현 문제를 해결했다는 것은 아키텍처의 분명한 기술적 성취로 평가할 수 있습니다. 
위 이미지는 에픽 게임즈(Epic Games)가 ILMxLAB 및 엔비디아와 공동으로 만든 Reflections 데모의 예입니다. 쿼드로 RTX 6000 또는 지포스 RTX 2080 Ti의 단일 GPU에서 레이트레이싱 반사, 레이트레이싱 앰비언트 오클루전(Ambient Occlusion)을 실행하여 영화의 CG에 근접하는 이미지 품질을 보여줍니다. 튜링의 레이트레이싱 기술은 엔비디아의 RTX 기술, 엔비디아 실시간 레이트레이싱 라이브러리, 엔비디아 OptiX, 마이크로소프트 DXR API와 곧 출시될 Vulkan 레이트레이싱 API를 모두 지원합니다. 따라서 RTX 그래픽카드 사용자라면 3D 게임에서 납득 가능한 프레임 수준으로 영화 품질의 실시간 레이트레이싱 품질을 경험할 수 있으며, 이전의 GPU 아키텍처에서 불가능했던 전문 그래픽 애플리케이션에서의 실시간 렌더링을 경험하는 데 도움을 줍니다. 튜링 RT 코어 | TURING RT CORES 튜링의 하드웨어 기반 레이트레이싱 가속화의 중심에는 각 SM에 포함된 새로운 RT 코어가 있습니다. RT 코어는 BVH(Bounding Volume Hierarchy)와 ray/triangle 교차 테스트(레이캐스팅, ray casting) 기능을 가속화합니다. 또한 RT 코어는 SM에서 실행중인 스레드를 대신하여 가시성 테스트를 수행할 수도 있습니다. 또한 RT 코어는 엔비디아 리서치(NVIDIA Research)에서 개발한 고효율 BVH 가속 구조 및 RTX 호환 API 등의 고급 노이즈제거 필터링(denosing filtering) 기술을 통해 단일 튜링 GPU에서 실시간 레이트레이싱을 구현합니다. RT 코어는 BVH 구조를 자율적으로 탐색하고 ray/triangle 교차 테스트를 가속화하여 다른 버텍스, 픽셀 및 컴퓨트 셰이딩 작업을 처리할 수 있게 합니다. BVH 구축(BVH building)과 같은 작업은 드라이버에 의해 처리되며, 광선(ray) 생성 및 셰이딩은 새로운 유형의 셰이더를 통해 애플리케이션이 관리하게 됩니다. 이와 같은 내용에서 이해가 필요해한 개념이 등장하는 데 바로 레이캐스팅(ray casting)과 BVH(Bounding Volume Hierarchy)입니다. 1. 레이캐스팅(ray casting) 레이케스팅은 이미지 평면의 각 픽셀을 통해 이미지를 보는 사람의 눈(또는 카메라 뷰)에서 하나 이상의 광선을 쏘고 해당 광선이 모든 트라이앵글(triangle)과 교차하는지 확인하는 알고리즘 과정입니다. 이 때 픽셀을 통과한 광선이 트라이앵글에 닿으면 다시 원점에서 트라이앵글까지 광선의 거리를 결정합니다. 또한 트라이앵글의 색상 데이터가 최종 색상에 기여하게 되죠. 물론 중간에 다른 물체에 닿아 다른 물체의 색상과 조명 정보도 가져올 수 있습니다.(패스트레이싱, Path Tracing) 이렇게 광선과 트라이앵글(ray/triangle)의 교체 테스트를 가속하고 성능을 향상시키기 위해서는 광선의 수를 줄이거나 다양한 유형의 기술과 최적화를 사용할 수 있습니다. 이런 최적화 작업을 거치지 않으면 모든 트라이앵글에 대해 광선을 테스트해야 하는데, 너무나 많은 연산 부하력이 가해지게 되죠. 2. BVH(Bounding Volume Hierarchy) 대표적인 레이트레이싱 기법 중 하나가 바로 트리 구조의 레이트레이싱 가속 방식을 사용하는 것입니다. 여기에는 다양한 장면의 지오메트리를 둘러싸는 상자가(bounding box)가 포함됩니다. 큰 바운딩 박스는 많은 트라이앵글(triangle/primitives)을 포함하며, 점점 더 작은 바운딩 박스를 포함할 수 있습니다. 이렇게 계층적으로 배열된 박스를 Bound Volume Hierarchy, BVH라고 합니다. BVH는 최상위의 루트 구조로 시작하여 각 단계마다 하나 이상의 노드가 있는 트리 구조로 배열됩니다. 
▲ 각 단계의 바운딩 박스를 가로지르는 트리 구조의 BVH 알고리즘 일단 처음 장면을 렌더링하기 전에 소스의 지오메트리에서 BVH 구조를 만들어야 합니다.(BVH building) 만약 다음 프레임이 이전 프레임에 비해 상당한 변경점이 발생한다면 모든 변경 사항을 나타나기 위해 새로운 BVH 빌드 작업이 필요할 수 있습니다. 하지만 대부분의 경우에는 완전히 새로운 BVH 빌드 작업 없이도 특정 장면만 변경하는 것으로 기존 BVH 구조를 수정하여 작업 처리가 가능합니다.(BVH refitting) 이러한 절차는 컴퓨트 연산에 드는 부하가 훨씬 줄어들기 때문에 실제 렌더링의 일반적인 예이기도 합니다. 3. 노이즈감소 필터링(DENOSING FILTERING) 레이트레이싱 성능을 향상시키는 가속 구조 외에도 다양한 고급 필터링 기술을 사용하면, 추가 광선 없이 성능과 이미지 품질을 향상시킬 수 있습니다. 이러한 필터링 기술 중 대표적으로 노이즈제거(denosing)가 있습니다. 노이즈제거는 이상적이지 않은 아티팩트(Artifact)나 기타 여러 유형의 이미지 품질을 저해하는 요소를 개선할 수 있습니다. 또한 노이즈제거 필터링은 레이트레이싱 이미지가 렌더링하는 데 걸리는 시간을 줄여주며, 시각적으로도 충실도 높은 이미지를 생성할 수 있습니다. 현재 엔비디아는 특정 애플리케이션에 가장 적합한 것을 선택하고 노이즈제거를 이루기 위해 AI 기반 알고리즘과 비AI 기반 알고리즘을 모두 사용합니다. 이렇게 대표적인 레이트레이싱에 쓰이는 기술들을 모두 알아보았습니다. 다음은 RT 코어의 기능이 정확히 무엇을 수행하는지 잘 이해하기 전에, 우선 전용 하드웨어 레이트레이싱 엔진이 없는 GPU에서 레이트레이싱 작업이 어떻게 수행되는지 알아볼 필요가 있습니다. 아래 이미지를 참고해주시기 바랍니다. |