튜링의 진보된 셰이딩 기술 TURING ADVANCED SHADING TECHNOLOGIES 메시 셰이딩 | MESH SHADING
3D 환경이 아닌 현실 세계(real world)는 시각적으로 풍부하면서도 기하학적으로는 매우 복잡한 구조를 가지고 있습니다. 그리고 오늘날의 그래픽 파이프라인은 버텍스(vertex), 테셀레이션(tessellation) 및 지오메트리(geometry) 셰이더가 있어 단일 객체의 세부 묘사에 있어서는 매우 효과적이지만 여전히 한계가 있습니다. 각 객체는 CPU 고유의 드로우콜(draw call)을 필요로 하며, 셰이더 모델은 스레드 당 사용할 수 있는 알고리즘 유형을 제한합니다. 이러한 상황을 개선하고자 메시 셰이딩은 개발자가 CPU 드로우콜 병목 현상을 제거하고 트라이앵글(triangle)을 생성하는 데 보다 효율적인 알고리즘을 사용할 수 있도록 새롭고 유연한 모델을 도입합니다.
▲ 위 이미지와 같이 시각적으로 객체가 풍성한 이미지는 오늘날의 그래픽 파이프라인으로 실시간 렌더링하기에 너무나 많은 고유 객체를 포함하고 있습니다.
▲ 기존 그래픽 파이프라인과 메시 셰이더가 포함된 파이프라인 비교 위 이미지는 기존의 지오메트리 처리 파이프라인과 메시 셰이딩 기반 파이프라인을 비교해서 보여줍니다. 그동안 개발자는 버텍스 셰이더를 사용하여 래스터화(rasterize)를 위한 트라이앵글을 직접 생성하거나, 테셀레이션 셰이더를 사용하여 래스터화를 위한 최종 트라이앵글을 생성할 수 있었습니다. 메시 셰이딩 역시 동일한 기능을 지원하지만, 더 많은 유연성을 제공하는 새로운 두 개의 셰이더 단계인 태스크 셰이더(Task Shader)와 메시 셰이더(Mesh Shader)를 도입했습니다. 메시 셰이더 단계는 래스터화를 위한 트라이앵글을 생성하지만, 내부적으로는 단일 스레드 모델을 사용하는 대신 컴퓨팅 셰이더와 유사한 공동 스레드 모델을 사용합니다. 그리고 파이프라인의 메시 셰이더 앞에는 태스트 셰이더가 위치합니다. 태스크 셰이더는 동적으로 작업을 생성 할 수 있다는 점에서 테셀레이션의 헐 셰이더(Hull Shader) 단계와 유사한 작동 방식을 가집니다. 그러나 메시 셰이더와 마찬가지로 공동 스레드 모델을 사용하여 패치 입력과 테셀레이션 결정 그리고 입출력을 사용자 정의로 지정할 수 있습니다.
▲ 수십만 개의 객체를 실시간으로 렌더링하는 메시 셰이딩의 데모 이미지 위 이미지는 메시 셰이딩 처리가 가지는 힘을 보여줍니다. 해당 장면은 수십만 개의 객체가 노출되는 넓은 시야를 보여주며 렌더링에 아주 어려운 환경을 만들어냅니다. 개발자는 CPU의 드로우콜을 사용하여 각 개체를 GPU로 보내는 대신 이제 CPU가 아닌 GPU에 많은 객체 목록을 직접 보낼 수 있습니다. 그 후 태스크 셰이더는 객체 목록을 병렬로 처리하고 메시 셰이더를 실행하여 해당 트라이앵글을 셰이딩 처리한 후 래스터라이저(Rasterizer)에 보냅니다. 이러한 접근 방식은 객체 처리에 대한 CPU 병목 현상을 없애고, 실시간 프레임 속도로 표시할 수 있는 객체 수를 증가시킬 수 있습니다.
▲ 디테일 레벨(LOD)에 다른 소행성 표현 예 위 이미지는 메시 셰이딩으로 지원되는 또다른 최적화의 예입니다. 이전에 살펴본 이미지에서 우리는 각 소행성이 현실적인 디테일을 갖추기를 원하지만, 멀리 떨어진 수많은 소행성들의 디테일한 모습은 현실적으로 보기 힘듭니다. 이러한 사례를 최적화하기 위한 방법은 객체의 디테일 레벨을 세분화하고(LOD=Level of Detail) 현재 사용자가 보고 있는 시야를 고려하여 적절한 디테일 레벨을 선택하는 것입니다. 태스크 셰이더가 이러한 최적화 과정을 담당합니다. 태스크 셰이더는 객체 목록 스캔 시 각 객체의 크기를 고려하여 적절한 LOD 수준을 선택하고, 메시 셰이더로 보내거나, 또는 테셀레이션의 경우 메시 셰이더에 트라이앵글에 대한 추가적인 테셀레이트 작업을 가하는 내용을 전달하게 됩니다.
▲ NVIDIA Holodeck™에서 볼 수 있는 Koenigsegg 모델의 동적 계산 또한 메시 셰이딩을 사용하면 개발자가 특수한 방법으로 객체의 형상을 좀 더 쉽게 조작할 수 있습니다. 위 이미지는 CAD 애플리케이션을 위한 동적 절단 기능을 구현하는 데 사용되는 메시 셰이딩을 보여줍니다. 구 형상의 경계 영역 내에 있는 모든 형상은 제거되며, 해당 영역에는 자동차 부품의 상세한 구조가 나타납니다. 메시와 태스크 셰이더는 구와 관련된 위치를 기준으로 기하학을 컬링(culling)하고 수정하여 작업을 수행할 수 있습니다. 가변 비율 셰이딩 | VARIABLE RATE SHADING 새로운 세대의 게임마다 컴퓨팅 성능에 대한 요구치는 지속적으로 증가합니다. 그리고 개발자는 항상 최종 렌더링 프레임 이미지의 품질과는 무관한 셰이딩 작업을 배제하는 방법을 찾고 있습니다. GPU 자원 활용에 있어 가장 이상적인 것은 더욱 풍성한 그래픽 또는 더 높은 프레임 속도로 사용자 경험을 향상시키는 데 있기 때문입니다.
이전 세대에서는 VR과 관련된 셰이딩 워크로드 부하를 최적화하기 위해 MRS(Multi-Resolution Shading) 및 LMS(Lens-Matched Shading)와 같은 기법을 도입했습니다. VR 시스템의 중요한 특성은 렌즈 시스템의 광학 장치가 다양한 해상도와 샘플링 속도를 가진다는 것입니다. MRS와 LMS를 사용하여 개발자는 렌더링 영역을 최대 16개의 하위 영역으로 분할하고 샘플링 속도를 각 영역의 렌즈와 일치시킬 수 있었습니다. 하지만 이것은 일반적인 예에 불과합니다. 튜링은 VRS(Variable Rate Shading)라는 새롭고 매우 유연한 기능을 도입했습니다. VRS를 사용하면 스크린의 모든 16x16 픽셀 영역에 대해 서로 다른 셰이딩 처리 비율로 설정할 수 있습니다. 개발자는 이러한 정밀 제어를 통해 셰이딩 비율을 최적화하고, 이전에는 불가능했던 새로운 알고리즘을 구현하여 렌더링 성능을 높일 수 있습니다. 본 섹션에서는 VRS의 기본 하드웨어 메커니즘과 VRS가 지원하는 몇 가지 강력한 알고리즘에 대해 설명하도록 하겠습니다.
▲ 튜링의 VRS 적용 예: 움직임이 적은 객체 영역에는 1x1 비율로 셰이딩 처리를 하고, 비교적 움직임이 빨라 디테일을 느끼기 힘든 영역에는 높은 비율의 픽셀 단위로 셰이딩 처리를 하여 성능을 향상시킬 수 있습니다. VRS가 없다면 위 이미지에 존재하는 모든 픽셀이 개별적으로 셰이딩 처리됩니다(1x1 파란색 그리드). 하지만 VRS를 사용하면 트라이앵글의 픽셀 셰이딩 비율을 달리 적용할 수 있습니다. 또한 개발자는 하나의 셰이딩 결과를 사용하여 4 픽셀(2x2), 16 픽셀(4x4) 또는 1x와 같은 총 7가지 옵션의 16x16 픽셀 영역을 선택할 수 있습니다. 오른쪽에 있는 컬러 오버레이는 프레임에 적용할 수 있는 예시를 보여주며, 이미지에 등장하는 차량은 최대 속도(파란색 그리드)로 처리되고, 차량 주변 영역은 4개 픽셀 당 한 번의 셰이딩 처리 작업이 가해집니다.(녹색 그리드) 이렇게 튜링의 VRS 기술을 사용하면 가시성 샘플 당 한 번(슈퍼샘플링)과 16개의 가시성 샘플마다 한 번씩 다양한 비율로 이미지를 셰이딩 처리할 수 있습니다. 개발자는 텍스처를 사용하여 공간적으로 셰이딩 처리 비율을 지정할 수 있고, 결과적으로는 하나의 트라이앵글이 여러 비율로 셰이딩 처리되어 개발자에게 세밀한 제어 기능을 제공합니다.
또한, VRS는 위 이미지와 같이 다양하고 강력한 알고리즘이 준비되어 있습니다. 1. 콘텐츠 적응형 셰이딩(Content Adaptive Shading) 콘텐츠 적응형 셰이딩은 공간적 및 시간적(프레임 간) 컬러값의 일관성을 고려하여 셰이딩 비율을 손쉽게 낮출 수 있습니다. 렌더링 할 다음 프레임의 상이한 부분에 대한 셰이딩 비율은 현재 프레임의 후처리 단계에서 계산됩니다. 만약 특정 영역의 디테일이 상대적으로 낮으면(하늘 또는 평평한 벽면 등) 다음 프레임에서 셰이딩 처리 속도를 낮출 수 있게 됩니다. 후처리 분석의 출력은 16x16 타일 당 셰이딩 처리 비율을 지정하는 텍스처이며 이 텍스처는 다음 프레임에서 셰이딩 처리 비율을 제어하는 데 사용됩니다. 개발자는 기존 파이프라인을 수정하지 않고도 셰이더를 조금만 변경하여 셰이딩 비율 감소를 구현할 수 있습니다. ▲ 콘텐츠 적응형 셰이딩의 예: 오른쪽 아래 이미지의 콘텐츠 적응형 셰이딩은 원본 장면 데이터에 다른 셰이딩 비율(왼쪽 아래 이미지)을 적용하여 생성됩니다. 콘텐츠 적응형 셰이딩으로 처리된 장면과 비교했을 때 상호 간의 이미지 유사성을 확인할 수 있습니다. 위 이미지는 콘텐츠 적응형 셰이딩의 좋은 예입니다. 물론 실시간으로 작동하는 것을 보는 것이 실질적인 효과를 평가하는 가장 좋은 방법이지만, 작동을 쉽게 설명하기 위해 스크린샷 이미지를 예로 들어보겠습니다. 왼쪽 위의 전체스크린 이미지 녹색 상자는 크롭 영역을 의미합니다. 왼쪽 아래에는 크롭된 영역이 확대되어 있으며, 앞서 설명한대로 셰이딩 비율 컬러 오버레이가 표시됩니다. 평평한 수직 벽은 최저 비율(빨간색=4x4)로 셰이딩 처리되고 게이지와 다이얼은 최대 비율로 셰이딩 처리됩니다(1x1), 그리고 다양한 영역에서 중간 비율로 셰이딩 처리됩니다. 오른쪽 위 이미지는 콘텐츠 적응형 셰이딩을 해제 한 상태, 오른쪽 아래 이미지는 콘텐츠 적응형 셰이딩이 적용된 모습을 보여줍니다.(계기판 애니메이션에 약간 차이가 있는데 이미지는 샘플링 시간의 차이로 약간 다릅니다) 결과적으로 이미지 품질의 시각적인 차이가 느껴지지 않습니다.
2. 모션 적응형 셰이딩(Motion Adaptive Shading) 가변 비율 셰이딩의 두 번째 기술은 객체(object) 모션을 활용하는 것입니다. 우리의 눈은 움직이는 물체를 추적하도록 설계되었기 때문에, 움직이는 동안에도 해당 객체를 따라가게 됩니다. 그러나 LCD 디스플레이로 표현되는 객체는 부드럽게 또는 연속적으로 움직이지 않습니다. 오히려 각 60 Hz 주사율로 인한 프레임 갱신 때마다 한 위치에서 다음 위치로 점프하듯이 이동하게 됩니다. 물체를 부드럽게 추적하려고 하는 우리 눈의 관점에서 보면, 눈이 추적하는 경로의 앞뒤로 위치가 이동함에 따라 마치 객체가 흔들리는 것처럼 느낍니다. 결과적으로 객체의 실질적인 디테일을 온전히 느낄 수 없으며, 다소 낮은 해상도의 흐려진 형상으로 보게 됩니다.
▲ 망막과 디스플레이 특성으로 인해 객체의 이동은 흐려진 형상으로 인식된다. 위 이미지에서 왼쪽의 엔비디아 로고는 디스플레이에 표시되는 실제 이미지입니다. 이 이미지가 왼쪽에서 오른쪽으로 움직이면 우리 눈은 마치 객체가 점프하는 형태로 보게 됩니다. 결국 눈은 모션을 통합하려고 하고 궁극적으로는 오른쪽 아래의 이미지처럼 원본의 이미지보다 흐려진 형상으로 인식합니다. 이 현상의 의미하는 것은 물체가 빠르게 움직이는 경우에는 최대 해상도로 셰이딩 처리하는 것이 자원 낭비라는 결론을 이끌어내게 합니다. 시각적으로 느껴지는 품질과 동일한 수준의 샘플링으로 셰이딩 처리하는 것이 더 효율적인 방법이 되겠죠. 또한, 이러한 융통성은 결국 더 높은 프레임 속도를 가능하게 합니다. VRS는 이런 상황에서 최적화된 수행이 가능하도록 도구를 제공합니다. 가장 간단한 접근 방식으로, 객체의 모션 벡터(vector)를 사용하여 모션을 이해할 수 있습니다. 모션의 방향과 크기는 타일 당 적절한 셰이딩 비율을 선택하는 데 사용됩니다. 이와 관련하여 VRS는 모션블러와 심도(DOF)를 렌더링하는 애플리케이션에서 흐릿한 효과를 활용합니다. 애플리케이션은 개별 객체의 흐려지는 정도와 방향을 직접 계산할 수 있으며, 흐림 정도를 사용하여 트라이앵글의 셰이딩 비율을 설정할 수 있습니다. 3. 포비에이티드 렌더링(Foveated Rendering) 세 번째는 포비에이티드 렌더링입니다. 이것은 우리의 눈이 인지할 수 있는 해상도가 시야각에 따라 달라진다는 관찰에 기초합니다. 우리는 시야의 중심에 있는 물체에 대한 시각적 해상도는 최대치를 유지하지만, 주변부에 대한 시각적 해상도는 훨씬 낮습니다. 따라서, 시청자의 눈 위치가 파악된다면(VR 또는 시스템에서 아이 트래킹을 통해), 이것은 셰이딩 비율을 적절하게 조정하는 데 사용될 수 있습니다. 즉 시야의 주변부는 낮은 비율로, 시야 중심은 더 높은 비율로 셰이딩 처리가 가능합니다. |