레이트레이싱 그리고 RTX | Turing Ray Tracing & RTX

QM벤치
0 3693 2018.09.15 10:12

 


 

튜링의 레이트레이싱 기술

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에서 레이트레이싱 작업이 어떻게 수행되는지 알아볼 필요가 있습니다. 아래 이미지를 참고해주시기 바랍니다.

 

 


 

▲ 레이트레이싱 엔진이 없는 파스칼 SM 아키텍처의 레이트레이싱 연산 과정

 

파스칼 SM 아키텍처에서 하드웨어 가속을 사용하지 않고 레이트레이싱을 수행하는 예시입니다. 레이트레이싱 연산을 시작하면, 광선을 추적하여 성공적으로 트라이앵글(triangle)에 도달하기 까지 BVH 구조에서 더 작은 바운딩 상자를 연속적으로 테스트하는 과정을 거칩니다. 이 경우 광선(ray) 당 수천 개의 소프트웨어 명령이 필요하여 자연스럽게 연산 부담은 엄청난 수준으로 불어납니다. 결국 하드웨어 기반 레이트레이싱 가속 엔진 없이 실시간으로 GPU 레이트레이싱 연산을 수행하는 것은 매우 어렵습니다.

 

 


 

▲ RT 코어를 활용한 튜링 SM 아키텍처의 레이트레이싱 연산 과정

 

반면, 튜링의 RT 코어는 레이트레이싱 렌더링을 위한 BVH 구조 순회와 ray-triangle 교차 테스트를 처리할 수 있으므로 SM이 레이트레이싱 연산으로 인해 자원이 낭비되는 것을 방지해줍니다. 또한, 위 이미지에서 알 수 있듯이 RT 코어는 두 개의 특수 유닛으로 구성됩니다. 첫 번째 유닛은 BVH의 바운딩 상자 테스트를 전담하고, 두 번째 유닛은 ray-triangle 교차 테스트를 수행합니다. SM은 레이프로브(ray probe)를 실행하기만 하면 되고, RT 코어는 BVH 순회와 ray-triangle 테스트를 수행하며 광선의 히트(hit) 또는 노히트(no hit) 신호를 SM에 보내줍니다. 결국 SM은 다른 그래픽이나 연산 작업을 수행할 수 있어 크게 자유로워지는 것입니다.

 

 

 

▲ 튜링 아키텍처의 레이트레이싱 성능: RTX 2080 Ti vs. GTX 1080 Ti 

 

 

결국 RT 코어를 사용한 튜링 GPU의 레이트레이싱 성능은 파스칼 GPU보다 훨씬 빠를 수밖에 없습니다. 당연한 결과겠죠. 튜링 GPU는 위 그래프와 같이 서른 다른 작업 부하에서 파스칼 대비 훨씬 더 많은 Giga Rays/s 성능을 가집니다. 파스칼은 소프트웨어에서 레이트레이싱을 수행하는 데 약 1.1 Giga Rays/s 또는 10 TFLOPS/Giga Ray를 소비하지만 튜링은 RT 코어를 사용하여 10 Giga Rays/s 이상으로 레이트레이싱 작업을 10배 더 빠르게 수행할 수 있게 됩니다.

 

이렇게 튜링 GPU 아키텍처의 레이트레이싱 구현 기법과 성능을 알아보았습니다. 다음은 레이트레이싱으로 구현되는 이미지 품질 기술과 내용을 이미지를 통해 배워보도록 하겠습니다.

 

 

 

 

레이트레이싱 그림자, 앰비언트 오클루전, 반사

RAY-TRACED SHADOWS, AMBIENT OCCLUSION, AND REFLECTIONS

 

사실적인 이미지 표현에 있어 그림자는 시각적으로 매우 중요한 요소입니다. 그림자는 땅에 놓인 객체의 이미지를 표현하는 데 핵심 역할을 수행하며, 조명과 뗄 수 없는 요소로 장면의 분위기를 조성하게 됩니다. 이와 관련하여 오늘날의 게임은 그림자 표현을 위해 섀도맵(shadow maps)을 사용하지만, 섀도맵에는 일부 단점들이 존재하기 때문에 이를 해결하기 위한 기술들이 존재합니다. 하지만, 레이트레이싱과 노이즈제거 기능을 함께 사용하면 그림자의 해상도 불일치나 콘택트 하드닝(contact hardening, 광원으로부터 멀어질수록 흐려지고 퍼지는 효과) 구현 문제에 대한 것을 해결할 수 있게 됩니다.

 

 

 

▲ 섀도맵 PCF(Percentage Closer Filtering) vs. 노이즈제거 필터링이 적용된 레이트레이싱 

 

특히 객체와 그림자에 대한 콘택트 하드닝은 PCSS(Percentage Closer Soft Shadows)와 같은 기법이 이미 존재하지만, PCSS는 임의의 조명 환경에서 정확한 그림자를 생성할 수 없다는 문제가 있습니다. 하지만 튜링 GPU의 RTX 그래픽카드의 레이트레이싱 가속과 빠른 노이즈제거 알고리즘을 사용하면, 레이트레이싱 그림자는 섀도맵 방식을 대체할 수 있고, 모든 유형의 조명에서 물리적으로 정확한 그림자를 만들 수 있게 됩니다.

 

 

 

위 이미지와 같이 섀도맵 방식의 그림자 처리는 그림자의 가장자리를 흐리게 만들어주지만, 올바른 콘택트 하드닝(contact hardening, 광원으로부터 멀어질수록 흐려지고 퍼지는 효과)은 제공하지 않습니다. 반면 레이트레이싱 그림자는 다양한 각도의 객체에 대해 콘택트 하드닝을 제공해줍니다.

 

그리고 앰비언트 오클루전(Ambient Occlusion)과 같은 그림자 기술은 3D 장면에서 객체의 사실성을 향상시키는 데 도움이 됩니다. 물론, 사실적인 접근에 의한 렌더링 기법은 아니지만, 글로벌 일루미네이션(Global Illumination)의 부족한 조명에 대해 효과적으로 보정해주는 역할을 해줍니다. 

 

 

 

▲ 픽셀 당 2개의 샘플과 노이즈제거 필터링을 거친 RTAO 그리고 SSAO(Screen Space Ambient Occlusion)와의 이미지 품질 비교입니다. 특히 소파와 베개, 중앙 테이블, 캐릭터 등에서 훨씬 더 자연스러운 이미지 표현을 확인할 수 있습니다.

 

 

 

 

엔비디아 RTX | NVIDIA RTX

 

마지막으로 실제 3D 게임에서의 엔비디아 레이트레이싱 기술인 RTX를 적용한 화면 비교입니다. RTX 기술은 앞으로 다양하 3D 게임이 지원될 예정이며, 업계 표준 API를 모두 활용하기 때문에 앞으로 더 많은 게임 타이틀이 RTX를 지원할 수 있습니다.

 

 

 

▲ EA의 배틀필드 V(Battlefiled V) 알파 버전 장면 비교입니다. 개발사 DICE는 엔비디아 RTX 기술과 튜링의 실시간 레이트레이싱을 여러 효과를 위해 사용하고 있습니다. RTX ON 장면에서는폭발로 인해 발생된 화염이 차량 표면에 반사되는 것을 확인할 수 있습니다. 반면 RTX OFF 장면에서는 객체에 대한 반사만 이루어지기 때문에 화염에 대한 광선 추적 데이터가 없어 평이한 반사 효과를 보여줍니다.

 

 

 

▲ 이 장면에서는 RTX를 사용하지 않는 반사 알고리즘이 어떤 문제를 안고 있는지를 보여줍니다. RTX OFF의 경우 가늠좌와 가늠쇠를 통해 보는 장면에서 반사가 누락되는 현상을 볼 수 있습니다. 하지만 RTX ON 장면에서는 실제 레이트레이싱에 의한 반사 효과를 지원하기 때문에 올바른 화면을 보여줍니다.

 

 

 

 

▲ 섀도 오브 더 툼레이더(Shadow of the Tomb Raider)의 장면입니다. RTX OFF 장면에서는 아이들이 들고 있는 불꽃에서 그림자가 생성되지 않으므로 마치 땅에 떠있는 것처럼 느껴집니다. 하지만 RTX ON 장면에서는 레이트레이싱 그림자 생성 기법에 의해 광원으로부터 멀어질수록 그림자가 퍼지고 부드럽게 처리되는 콘택트 하드닝(Contact Hardening)이 잘 구현되면서 사실감이 살아납니다.

 

 

 

 

 

댓글: 0

신고하기

신고대상


신고사유

투표 참여자 보기