정적 배칭은 드로우 콜을 줄이기 위해 움직이지 않는 메시를 결합하는 드로우 콜 배칭 메서드입니다.정적 배칭은 결합된 메시를 월드 공간으로 변환하고 이러한 메시를 위한 하나의 공유 버텍스 및 인덱스 버퍼를 빌드합니다.그런 다음 Unity는 이 결합된 메시를 사용하여 배치의 모든 오브젝트를 한 번에 그리는 단일 드로우 콜을 수행합니다.정적 배칭은 드로우 콜 수를 상당히 줄일 수 있습니다.
정적 배칭은 CPU에서 버텍스를 변환하지 않으므로 동적 배칭보다 더 효율적입니다. 정적 배칭이 성능에 미치는 영향에 관한 정보는 성능에 미치는 영향을 참조하십시오.
이 섹션은 정적 배칭의 렌더 파이프라인 호환성에 관한 정보를 포함합니다.
기능 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) | 커스텀 스크립터블 렌더 파이프라인(SRP) |
---|---|---|---|---|
Static Batching | 지원 | 지원 | 지원 | 지원 |
Unity는 빌드 시점에 및 런타임 시 정적 배칭을 수행할 수 있습니다. 일반적으로 애플리케이션을 빌드하기 전의 씬에 게임 오브젝트가 존재하는 경우, 에디터를 사용하여 빌드 시점에 게임 오브젝트를 배치합니다. 런타임 시 게임 오브젝트와 게임 오브젝트의 메시를 만드는 경우, 런타임 API를 사용하십시오.
런타임 API를 사용하는 경우, 정적 배치 루트의 트랜스폼 프로퍼티를 변경할 수 있습니다. 즉, 정적 배치를 구성하는 메시의 조합 전체를 이동하거나, 회전하거나 확대/축소할 수 있습니다. 개별 메시의 트랜스폼 프로퍼티는 변경할 수 없습니다.
게임 오브젝트 세트에 정적 배칭을 사용하려면 해당 게임 오브젝트가 정적 배칭이 가능해야 합니다. 일반 사용 정보에 설명된 기준 외에도 다음을 확인하십시오.
DisableBatching
태그가 true로 설정된 셰이더가 있는 머티리얼을 사용하지 않습니다.참고:런타임 정적 배칭을 사용하려면 읽기/쓰기가 활성화되도록 메시를 설정해야 합니다.
정적 배칭이 성능에 미치는 영향에 관한 정보는 성능에 미치는 영향을 참조하십시오.
에디터에서 빌드 시점에 정적 배칭을 활성화할 수 있습니다.
빌드 시점에 정적 배칭을 수행하려면 다음 단계를 따르십시오.
지정된 정적 메시가 일반 사용 정보에 설명된 기준을 충족하는 경우, Unity는 해당 정적 메시를 자동으로 같은 드로우 콜에 배칭합니다.
참고: 빌드 시점에 정적 배칭을 수행하면 Unity가 런타임 시 정적 배치를 위해 메시 데이터를 생성하는 데 CPU 리소스를 사용하지 않습니다.
Unity는 런타임 시 정적 메시를 배칭하기 위해 StaticBatchingUtility 클래스를 제공합니다. 정적 StaticBatchingUtility.Combine 메서드는 전달한 게임 오브젝트를 조합하여 정적 배칭을 준비합니다. 이는 런타임 시 순서대로 생성하는 메시에 특히 유용합니다.
빌드 시점의 정적 배칭과는 달리, 런타임 시 배칭에서는 Static Batching 플레이어 설정을 활성화할 필요가 없습니다. 이 API를 사용하는 방법은 StaticBatchingUtility를 참조하십시오.
정적 배칭을 사용하려면 결합한 지오메트리를 저장할 추가적인 CPU 메모리가 필요합니다. 여러 개의 게임 오브젝트가 같은 메시를 사용하는 경우, Unity는 각 게임 오브젝트를 위한 메시 사본을 1부씩 생성하고 각 사본을 결합된 메시에 삽입합니다. 즉, 같은 지오메트리가 조합된 메시에 여러 번 나타납니다. Unity는 게임 오브젝트의 정적 배칭을 준비하는 데 에디터를 사용하든 런타임 API를 사용하든 관계없이 이 작업을 수행합니다. 메모리 풋프린트를 줄이고 싶다면 렌더링 성능을 희생하고 일부 게임 오브젝트의 정적 배칭을 포기해야 할 수 있습니다. 예를 들어, 우거진 숲 환경에서 나무를 정적으로 표시하면 메모리 소모가 심각할 수 있습니다.
참고: 정적 배치 1개당 포함할 수 있는 버텍스 수에는 제한이 있습니다. 각 정적 배치는 최대 64,000개의 버텍스를 포함할 수 있습니다. 버텍스 수가 이를 초과하면 Unity는 새로운 배치를 만듭니다.