Forward+ Rendering Prototype

2025. 2. 3. 22:16WIP/Igniter

구 개체 수: 6.4만개, 광원 수: 2.7만개
Forward Rendering (Clustered Shading 미적용)
Forward+ (Clustered Shading 적용)

 

앞서 구현하였던 Light Clustering을 최적화 하기 위해 간단한 Forward+ 렌더링 패스를 구현하였습니다.

Z Pre Pass, GPU Driven Frustum Culling/LOD 선택/Instancing/Draw Command 생성, GPU Driven Light Clustering(Culling) 을 구현 해둔 상태이고 별도의 Post-Process나 Tone Mapping은 구현 예정입니다.

동영상 속의 장면은 6.4만개의 구체 메쉬와 2.7만개의 점광원(Point Light)가 동적으로 업데이트 되고있습니다.

프로파일링 결과, 정점 프로세싱 과정과 픽셀 셰이더가 가장 큰 병목 지점으로 예상하고 있으며 아래의 추가적인 알고리즘/개선을 고려 중 또는 진행중에 있습니다.

1. Forward+ 패스를 Wave Intrinsics을 사용해서 메모리 접근 패턴 최적화를 통한 LGSB Stall 최소화 시도(진행중)

2. Mesh Shader 기반의 Meshlet 처리 파이프라인의 구현을 통해 Transform Matrix 및 정점을 읽고 처리의 최소화 (고려 중)

3. Mesh Shader 기반의 Meshlet 처리 파이프라인에서의 Object/Meshlet 단위의 Frustum Culling 및 Meshlet의 Cone을 통한 backface culling의 구현 (고려 중)

4. Hi-Z Occlusion Culling의 구현을 통해 처리 될 정점의 절대 수 최소화(진행 예정)

현재 테스트를 통해 추가적인 프로파일링을 진행 중이며 Wave Intrinsics에 대한 추가적인 자료 조사 및 테스트를 진행 중 입니다.

2, 3번의 경우엔 만약 제대로 구현 하게 된다면 지오메트리 처리 단계에 가해지는 압력을 최소화 하여 더 많은 메시를 렌더링 할 수 있을 것이라고 예상 되지만, 실제 이 엔진으로 개발할 게임이 그 정도의 처리 능력을 필요로 하지 않을 것이기 때문에 도전의 영역으로 생각하고 있습니다. 개인적으로는 Mesh Shader와 Meshlet 단위 렌더링에 아주 큰 관심이 있습니다 . (Vertex Shader를 사용하는 클래식한 그래픽스 파이프라인의 경우 groupshared, Wave Intrinsics을 전혀 사용하지 못하기 때문에..)

구현 난이도가 다소 높긴 하지만(제대로 구현하기에), 앞으로 드라이버/GPU 단에서의 Mesh Shader에 대한 최적화가 더욱 진행될 것이고, Mesh Shader를 지원하는 최소 하드웨어가 출시한지 꽤 오랜 시간이 지났고 보편화 되어가고 있기에(NVIDIA의 Turing Architecture; RTX 20x0 시리즈; GTX 16x0 시리즈), 연구 목적으로 구현하기에 매력적으로 보입니다.

위 작업이 끝난 이후 렌더링 파트에서 추가적으로 구현하고자 하는 내용들은 아래와 같습니다

1. Disney BSDF를 표준 머테리얼 타입으로 구현

2. Animation Style 머테리얼 타입의 구현

3. Transparent 메시의 렌더링 (OIT; Order Independent Transparency)

4. Post-Processing (Eye Adaption, Bloom, Screen Space Reflection, Screen Space AO, Screen Space GI)

5.  ACES Tone Mapping

6. Antialiasing (TXAA 또는 FXAA)

7. Skeletal Animation

8. Atomospheric Scattering

9. Shadow Mapping

10. Mesh/Texture Streaming