TECHARTNOMAD | TECHARTFLOWIO.COM

UNITY3D

유니티 6.2 렌더링 패스

jplee 2025. 2. 10. 23:42

유니티 포럼에서 유니티 엔지니어의 말.

 

Forward

투명 및 불투명 오브젝트를 한 번에 하나씩 렌더링합니다. 각 오브젝트에 대해 영향을 미치는 광원 목록을 바인딩. GPU에서는 이 목록을 반복하며 조명을 누적.

이 방식의 장점은 매우 단순하고 CPU 비용이 낮다는 것입니다. 매우 단순한 장면에서는 이 방식이 유리.

단점은

  • 오버드로우, 즉 나중에 다른 지오메트리에 의해 가려질 픽셀의 조명 처리에 비용이 발생.
  • 광원 수가 제한적.
  • GPU 기반 렌더링 및 GPU 오클루전 컬링과 호환되지 않음.

Forward+

CPU에서 Burst를 사용하여 모든 가시 광원과 반사 프로브를 스크린 스페이스 클러스터로 정렬. 각 스크린 스페이스 클러스터에 대한 광원 목록이 생성되면 이를 GPU로 업로드한다. 투명 및 불투명 오브젝트를 이제 인스턴스화할 수 있어 성능이 향상. 셰이딩 중에는 셰이딩된 픽셀이 속한 클러스터를 계산한 다음 해당 광원 목록을 순회.

이 방식의 장점은

  • GPU 기반 렌더링 및 GPU 오클루전 컬링과의 호환성.
  • 더 높은 광원 제한입니다.

단점은

  • 클러스터링 과정에서 CPU 비용이 발생하여 저사양 기기에서 성능 저하가 있을 수 있음.
  • Forward 방식과 마찬가지로 여전히 오버드로우 비용이 발생함.

Deferred

불투명 오브젝트가 먼저 자신의 재질 속성을 GBuffer라고 하는 중간 텍스처에 렌더링. 모든 불투명 오브젝트가 렌더링된 후, 각 로컬 광원에 대한 패스가 있음. 이 광원은 스텐실 버퍼에 볼륨을 렌더링. 이 볼륨은 스포트라이트의 경우 원뿔, 포인트 라이트의 경우 구 형태로 나타납니다. 이 스텐실을 통과하는 픽셀은 광원에 의해 조명되며, 조명 결과는 최종 색상에 가산적으로 기록됩니다. 각 광원에 대한 패스를 그린 후, 완전히 조명된 불투명한 최종 프레임이 완성. 그런 다음 투명 오브젝트를 그리기 위해 Forward 모드를 사용.

이 방식의 장점은

  • 불투명 오브젝트에 대한 오버드로우 비용이 발생하지 않음.
  • 광원 클러스터링에 대한 CPU 비용이 발생하지 않는다는 것입니다.

단점은

  • 광원당 한 번씩 최종 프레임 메모리에 쓰기 때문에 텍스처 대역폭 사용량이 높아 모바일 기기에서 문제가 될 수 있음.
  • GPU 기반 렌더링과 GPU 오클루전 컬링을 사용할 수 없음. ( 유니티에서...)

Deferred+

Forward+와 유사하게 CPU에서 광원 및 반사 프로브 클러스터링을 수행합니다. 그런 다음 디퍼드 방식과 유사하게 모든 불투명 오브젝트를 GBuffer에 렌더링합니다. 이제 디퍼드 방식과 달리 단일 전체 화면 조명 패스를 수행합니다. 이 패스에서 광원과 반사 프로브를 순회하며 누적 작성하고 마지막에 최종 텍스처에 기록합니다. 그런 다음 투명 오브젝트를 그리기 위해 Forward+를 사용합니다.

이 방식의 장점은

  • 불투명 오브젝트에 대한 오버드로우 비용이 발생하지 않고, (b) 최종 프레임에 한 번만 쓰기 때문에 텍스처 대역폭을 적게 사용하며
  • GPU 기반 렌더링과 GPU 오클루전 컬링을 사용할 수 있고
  • 더 높은 광원 제한이 가능하다는 것입니다.

이 방식의 단점은 Forward+와 마찬가지로 CPU 비용이 발생하여 저사양 기기에서 성능 저하가 있을 수 있음.

Deferred+를 사용하고 성능 문제가 발생하면 다른 방식으로 전환하는 것을 추천.


추가 요약

Forward 렌더링 방식

  • 프로세스: 각 오브젝트를 순차적으로 처리하여 렌더링을 수행하는 기본적인 방식이다. 시스템은 개별 오브젝트마다 해당하는 광원 정보를 정밀하게 할당하고, GPU가 이를 단계별로 처리하여 최종적인 조명 효과를 구현한다. 이 과정에서 모든 오브젝트는 독립적으로 처리되며, 각각의 셰이더 패스를 거치게 된다.
  • 이점: 시스템 구조가 체계적으로 최적화되어 있어 CPU 자원 효율성이 매우 우수하며, 단순하면서도 직관적인 구조로 인해 기본적인 렌더링 작업에 매우 적합하다. 또한 개발자가 렌더링 파이프라인을 쉽게 이해하고 디버깅할 수 있다.
  • 제한사항: 복잡한 장면에서는 렌더링 중복 처리가 빈번하게 발생할 수 있으며, 동시에 처리 가능한 광원 수에 상당한 제약이 있다. 또한 최신 GPU 기술이 제공하는 고급 기능들과의 호환성이 제한되어 있어, 현대적인 렌더링 기법 적용에 어려움이 있을 수 있다.

Forward Plus 렌더링 방식

  • 프로세스: 시스템은 고성능 Burst 컴파일러를 활용하여 장면 내의 모든 광원과 반사 데이터를 효율적으로 분류하고 최적화한다. 이후 첨단 인스턴싱 기법을 통해 유사한 특성을 가진 오브젝트들을 그룹화하여 일괄 처리하며, 각 요소는 미리 계산된 클러스터의 광원 정보를 참조하여 정교한 렌더링을 수행한다. 이 과정에서 데이터 지역성과 캐시 효율성이 크게 향상된다.
  • 이점: 최신 GPU 아키텍처 및 렌더링 기술과의 원활한 통합이 가능하며, 향상된 알고리즘을 통해 다수의 동적 광원을 효율적으로 처리할 수 있다. 또한 배치 처리 최적화를 통해 전반적인 렌더링 성능이 크게 개선되었다.
  • 제한사항: 정교한 데이터 클러스터링 과정에서 상당한 CPU 리소스가 필요하며, 특정 상황에서는 여전히 렌더링 중복 현상이 발생할 수 있다. 또한 복잡한 장면에서는 메모리 관리에 특별한 주의가 필요할 수 있다.

Deferred 렌더링 방식

  • 프로세스: 시스템은 먼저 모든 오브젝트의 기하학적 특성과 재질 속성을 다층 구조의 GBuffer에 정밀하게 기록한다. 이후 각각의 광원이 영향을 미치는 범위를 세밀하게 분석하여 최종 이미지에 조명 효과를 통합적으로 적용하며, 알파 블렌딩이 필요한 투명 요소들은 별도의 최적화된 파이프라인을 통해 처리된다.
  • 이점: 렌더링 중복을 매우 효과적으로 제어할 수 있으며, 복잡한 클러스터링 연산으로 인한 CPU 부하가 전혀 발생하지 않는다. 또한 광원 처리가 지오메트리와 완전히 분리되어 있어 대규모 장면에서도 안정적인 성능을 보장한다.
  • 제한사항: GBuffer 저장과 접근 과정에서 메모리 대역폭 사용량이 크게 증가하며, 최신 GPU가 제공하는 일부 고급 렌더링 기능들과의 호환성이 제한적이다. 또한 투명 오브젝트 처리를 위한 추가적인 렌더 패스가 필요하다.

Deferred Plus 렌더링 방식

  • 프로세스: 시스템은 Forward⁺ 방식의 첨단 클러스터링 알고리즘을 적용하여 장면을 최적화한 후, 개선된 GBuffer 구조에 모든 필수 데이터를 기록한다. 혁신적인 단일 화면 처리 파이프라인을 통해 모든 광원 효과를 통합적이고 효율적으로 적용하며, 투명 요소들은 Forward⁺ 방식의 고급 처리 기법을 통해 완벽하게 통합된다.
  • 이점:
    • 고도로 최적화된 알고리즘을 통한 렌더링 중복 현상의 획기적 감소
    • 혁신적인 메모리 관리 기법을 통한 대역폭 사용 효율성의 극대화
    • 최신 GPU 아키텍처의 모든 고급 기능을 완벽하게 활용 가능
    • 향상된 클러스터링 기술을 통한 대규모 동적 광원의 효율적 처리
  • 제한사항: 저사양 하드웨어 환경에서는 정교한 클러스터링 알고리즘으로 인한 시스템 부하가 발생할 수 있으며, 특히 CPU 성능이 제한적인 환경에서는 성능 최적화에 특별한 주의가 필요하다.

Dererred Plus 와 Clustered Deferred 의 유사점과 차이점.

Deferred Plus는 Clustered Deferred와 매우 유사한 접근 방식을 사용한다. Deferred Plus는 Forward+ 방식의 클러스터링을 활용하여 장면을 최적화하고 GBuffer에 데이터를 저장한다는 특징이 있다.

Clustered Deferred와 Deferred Plus의 주요 차이점과 특징.

Clustered Deferred:

  • 3D 공간을 균일한 크기의 클러스터로 분할하여 광원을 관리한다
  • 각 클러스터는 해당 영역에 영향을 미치는 모든 광원 정보를 포함한다
  • 메모리 사용량이 더 예측 가능하고 일관적이다

Deferred Plus의 차별점:

  • Forward+ 방식의 클러스터링 알고리즘을 사용하여 더 유연한 최적화가 가능하다
  • 단일 화면 처리 파이프라인으로 광원 효과를 더 효율적으로 처리한다
  • 메모리 대역폭 사용을 특별히 최적화한다
  • 최신 GPU 기능들과의 더 나은 호환성을 제공한다

다만 두 방식 모두 저사양 하드웨어에서는 클러스터링으로 인한 CPU 부하가 발생할 수 있다는 공통적인 제한사항이 있다.

클러스터링으로 인한 CPU 부하  : 클러스터드 셀에서 라이트를 인덱싱 하는 과정에서 CPU 사이드 부하가 발생하게 됨. 매우 많은 라이트를 사용하는 경우 상대적으로 이득을 볼 수는 있지만 10개 내외의 경우 클러스터드 과정 즉 인덱스 하고 업데이트 하는 과정이 CPU 에서 일어남으로 속도 면에서 큰 이득을 볼 수 없을 수 있음.

클러스터드가 뭔지 알고 싶다면.

 

클러스터드 라이팅 원리와 Forward+ 구현을 위한 실습.

5년 전 쯤에 중국 게임개발사에서는 디퍼드 렌더링을 모바일에 접목하기 보다는 포워드 렌더링 기반에서 아티스트의 수요 즉 Many lights 라는 문제를 해결 하는것에 집중이 되어있었습니다.당시

techartnomad.tistory.com

 

'UNITY3D' 카테고리의 다른 글

Scene Templates 좀 알아보자.  (0) 2025.02.05
[Experimental] Day-lighting Look-Dev Lab Scene  (0) 2025.01.23
Unity 의 Cull Method.  (0) 2024.12.03
SSAO and Kawase Blur  (0) 2024.10.28
Adaptive Probe Volume 데이터 스트리밍  (3) 2024.10.09