Unity 6.1 셰이더 인스턴싱 키워드
Unity에서 대량의 오브젝트를 효율적으로 렌더링하려면 GPU 인스턴싱을 활용한다. 오늘은 Unity의 주요 인스턴싱 키워드들을 살펴보고, 각각의 특징과 사용법을 알아본다.
인스턴싱이란?
GPU 인스턴싱은 동일한 메시를 여러 번 그릴 때 드로우 콜을 줄여 성능을 향상시키는 기술이다. 수백 개의 나무나 풀, 건물 등을 렌더링할 때 각각을 개별적으로 그리는 대신, 한 번의 드로우 콜로 모든 인스턴스를 처리한다.
주요 인스턴싱 키워드
Unity 6.1 에서는 세 가지 주요 인스턴싱 방식을 제공한다:
1. INSTANCING_ON - 표준 GPU 인스턴싱
m_Instancing = TryGetLocalKeyword(shader, "INSTANCING_ON");
가장 기본적인 GPU 인스턴싱 방식이다. 이 키워드를 활성화하면 같은 메시를 여러 개의 다른 속성으로 렌더링할 수 있다.
특징:
- 위치, 회전, 크기 등의 속성을 인스턴스별로 다르게 설정한다
- CPU에서 인스턴스 데이터를 준비하여 GPU로 전송한다
- Graphics.DrawMeshInstanced 등의 API와 함께 사용한다
- 가장 호환성이 좋고 안정적이다
2. DOTS_INSTANCING_ON - DOTS 인스턴싱
m_DotsInstancing = TryGetLocalKeyword(shader, "DOTS_INSTANCING_ON");
Unity의 Data-Oriented Technology Stack(DOTS)과 함께 사용하는 고성능 인스턴싱 방식이다.
특징:
- Entity Component System(ECS)과 완벽하게 통합된다
- Job System과 Burst Compiler의 이점을 활용한다
- 수만 개의 오브젝트도 효율적으로 처리한다
- DOTS 프로젝트에서 최고의 성능을 제공한다
3. PROCEDURAL_INSTANCING_ON - 절차적 인스턴싱
m_ProceduralInstancing = TryGetLocalKeyword(shader, "PROCEDURAL_INSTANCING_ON");
GPU에서 직접 인스턴스 데이터를 생성하거나 계산하는 방식이다.
특징:
- 컴퓨트 셰이더와 함께 활용한다
- GPU에서 직접 위치나 속성을 계산한다
- CPU-GPU 간 데이터 전송을 최소화한다
- 파티클 시스템이나 절차적 생성에 적합하다
성능 비교
각 인스턴싱 방식의 성능 특성을 이해하고 상황에 맞게 선택한다:
- 표준 인스턴싱: 일반적인 용도에 적합하며 안정성이 높다
- DOTS 인스턴싱: 대량의 오브젝트 처리 시 최고 성능을 제공한다
- 절차적 인스턴싱: GPU 계산이 많은 특수한 경우에 효율적이다
결론
Unity의 인스턴싱 시스템을 제대로 활용하면 렌더링 성능을 크게 향상시킬 수 있다. 프로젝트의 요구사항에 맞는 인스턴싱 방식을 선택하고, 적절한 셰이더 키워드를 활용하여 최적의 성능을 달성한다.
현대 게임 개발에서 인스턴싱은 필수 기술이므로, 각 방식의 특징을 이해하고 상황에 맞게 적용하는 것이 중요하다.
'UNITY3D' 카테고리의 다른 글
고객사와 함께 읽는 울티밋 가이드 프로파일링 유니티 (0) | 2025.07.08 |
---|---|
DirectBRDF_DualLobeSpecular (1) | 2025.06.20 |
GetDefaultDepthBufferBits() 메서드 (1) | 2025.06.04 |
ReflectionProbeAtlas 와 LIGHTMAP_BICUBIC_SAMPLING (0) | 2025.06.04 |
Sony agx 추가 (0) | 2025.06.02 |