유니티 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 등)은 처리하지 않습니다.
'(출간예정) 모두의 셰이더 프로그래밍' 카테고리의 다른 글
9.8.5 Screen Space Depth 기반 Rim light 따라잡기 도입글 소개 (0) | 2025.02.09 |
---|---|
10장. 스타일 캐릭터 셰이딩과 사용자화 셰이더라이브러리 제작법. 들어가는 글 소개. (0) | 2025.02.05 |
각주 표기법 (0) | 2025.02.04 |
9장. 셀 스타일 캐릭터 렌더링. 들어가는 글 소개. (0) | 2025.02.04 |
동차 클립 공간(Homogeneous Clip Space) 동차 좌표 클리핑 공간 (3) | 2025.02.02 |