유니티 6 는 이 전 버전에 비해 GPU Driven 친화적으로 진화하고 있다.
기본적인 설정은 GPU 상주드로어등이 꺼져 있겠지만 HIZB 등을 사용하거나 좀 더 고도화 된 유니티 6 렌더패스와 GPU 최적화를 활용하기 위해서는 켜 주는 것이 보통일 것이다.
다만 이 전에 우리가 자주 사용했던 단일 서브메시에 2개 이상의 멀티머티리얼을 적용 할 경우 렌더링 처리 되지 않음으로 유니티에서 GPU Driven 관련 콤포넌트를 만들어 놓았다.
간단히 예로 들면...

주로 알파테스트와 알파블렌드 두 개의 페스를 머티리얼로 처리 하는 경우가 많은 상황에서 이렇게 Hair 객체에 스크립트 콤포넌트를 추가 할 수 있다.

유니티에서 제공하고 있ㅎ는 Disallow GPU Driven Rendering 콤포넌트를 적용 해 주면 이 전 처럼 단일 서브메시에 멀티머티리얼을 다중 페스처럼 사용할 수 있도록 한다.
다만 GPU Driven 의 베네핏에서는 제외 될 테지만 말이다.
Disallow GPU Driven Rendering 코드 분석
- 속성 및 필드
m_AppliedRecursively: 렌더링 설정이 자식에게 재귀적으로 적용되었는지 여부를 나타내는 내부 boolean 상태.m_applyToChildrenRecursively: 자식 오브젝트에 대해서도 설정을 적용할지 여부를 나타내는 변수로,applyToChildrenRecursively프로퍼티를 통해 접근.applyToChildrenRecursively:m_applyToChildrenRecursively에 대한 Getter/Setter.
- Unity 콜백 메서드
OnEnable(): 스크립트가 활성화될 때 호출되며, GPU 기반 렌더링을 비활성화.- 설정 상태에 따라 현재 오브젝트와 모든 자식 오브젝트에 비활성화 설정 적용.
OnDisable(): 스크립트가 비활성화될 때 호출되며, GPU 기반 렌더링을 다시 활성화.OnValidate(): Unity 에디터에서 값이 변경될 때 호출되며, 설정이 즉시 반영되도록OnDisable()과OnEnable()호출.
- GPU 기반 렌더링 설정 메서드
AllowGPUDrivenRendering(Transform transform, bool allow): 주어진Transform의MeshRenderer에 대해 GPU 기반 렌더링 설정을 적용.AllowGPUDrivenRenderingRecursively(Transform transform, bool allow): 재귀적으로 부모와 모든 자식 오브젝트에 대해 GPU 기반 렌더링 설정을 적용.
코드 작동 설명
- 클래스는 GPU 기반으로 작동하는 렌더링을 비활성화하거나 다시 활성화할 수 있는 메서드를 제공하며, 해당 설정이 부모뿐만 아니라 자식 오브젝트까지 영향을 미칠 가능성을 설정으로 제공.
OnEnable과OnDisable콜백을 통해applyToChildrenRecursively값에 따라 설정이 현재 오브젝트와 자식 오브젝트에 즉각 적용됨.OnValidate로 인해 에디터에서 설정을 변경하면 즉시 해당 코드가 반영됨.
서머리
- 이 클래스는 GPU 기반 렌더링 비활성화라는 특정 목적을 가진 MonoBehaviour 스크립트입니다.
- 주요 기능은 컴포넌트가 활성화/비활성화될 때 GPU 기반 렌더링을 끄거나 켜는 것입니다.
- 자식까지 설정을 재귀적으로 적용하는 기능이 포함되어 있으며, 재귀 적용 여부를
applyToChildrenRecursively라는 프로퍼티로 제어합니다.
활용 방안
- 게임 최적화
- GPU 기반 렌더링은 고성능 GPU에서 유용하지만, 모든 렌더링 작업이 GPU 기반으로 동작하면 지나치게 많은 리소스를 사용하거나 특정 조건에서 성능 문제가 발생할 수 있습니다.
- 이 클래스는 특정 렌더링 타겟(오브젝트 또는 계층 구조)에 대해 GPU 렌더링을 비활성화하여 CPU 중심 방식으로 전환할 수 있도록 합니다.
- 에디터 편의성
OnValidate콜백을 통해 에디터에서 실시간으로 설정을 확인하거나 조정할 수 있습니다. 이는 디자이너나 아티스트가 렌더링 설정을 수정하는 데 있어 큰 편의성을 제공합니다.
- 특정 렌더링 환경의 요구 사항
- 게임 엔진에서 GPU 기반 렌더링을 비활성화해야 하는 GPU 호환성 문제나 특정 기기의 제한사항에 대응하기 위해 사용할 수 있습니다.
- 예를 들어, 모바일 장치나 저성능 GPU에서 문제를 방지하기 위해 특정 오브젝트에서 GPU 렌더링을 제한하는 방식으로 활용됩니다.
- 자동화된 설정 변경
- 재귀적으로 자식 오브젝트에 적용할 수 있는 기능이 있으므로, 복잡한 계층 구조의 오브젝트에 대해 수동으로 설정을 반복 적용할 필요가 없습니다.
리미트
- 이 클래스는 GPU 렌더링 설정만 변경하도록 설계되어 있으므로, 다른 렌더링 최적화 방법(예: LOD 적용, 비활성화 등)에는 사용할 수 없습니다.
- 현재는 MeshRenderer 컴포넌트에만 의존하며, 다른 렌더러(예: SkinnedMeshRenderer 등)은 처리하지 않습니다.
'(출간예정) 모두의 셰이더 프로그래밍' 카테고리의 다른 글
| 3D Scan Store Agreement (0) | 2025.04.09 |
|---|---|
| 9장. 핵심정리 중 멀티패스와 버텍스 (0) | 2025.03.15 |
| 9.8.5 Screen Space Depth 기반 Rim light 따라잡기 도입글 소개 (0) | 2025.02.09 |
| 10장. 스타일 캐릭터 셰이딩과 사용자화 셰이더라이브러리 제작법. 들어가는 글 소개. (0) | 2025.02.05 |
| 각주 표기법 (0) | 2025.02.04 |