Version: 2022.3
언어: 한국어
드로우 콜 배칭
동적 배칭

정적 배칭

정적 배칭은 드로우 콜을 줄이기 위해 움직이지 않는 메시를 결합하는 드로우 콜 배칭 메서드입니다.정적 배칭은 결합된 메시를 월드 공간으로 변환하고 이러한 메시를 위한 하나의 공유 버텍스 및 인덱스 버퍼를 빌드합니다.그런 다음 Unity는 이 결합된 메시를 사용하여 배치의 모든 오브젝트를 한 번에 그리는 단일 드로우 콜을 수행합니다.정적 배칭은 드로우 콜 수를 상당히 줄일 수 있습니다.

정적 배칭은 CPU에서 버텍스를 변환하지 않으므로 동적 배칭보다 더 효율적입니다. 정적 배칭이 성능에 미치는 영향에 관한 정보는 성능에 미치는 영향을 참조하십시오.

요구 사항 및 호환성

이 섹션은 정적 배칭의 렌더 파이프라인 호환성에 관한 정보를 포함합니다.

렌더 파이프라인 호환성

기능 빌트인 렌더 파이프라인 유니버설 렌더 파이프라인(URP) 고해상도 렌더 파이프라인(HDRP) 커스텀 스크립터블 렌더 파이프라인(SRP)
Static Batching 지원 지원 지원 지원

정적 배칭 사용

Unity는 빌드 시점에 및 런타임 시 정적 배칭을 수행할 수 있습니다. 일반적으로 애플리케이션을 빌드하기 전의 씬에 게임 오브젝트가 존재하는 경우, 에디터를 사용하여 빌드 시점에 게임 오브젝트를 배치합니다. 런타임 시 게임 오브젝트와 게임 오브젝트의 메시를 만드는 경우, 런타임 API를 사용하십시오.

런타임 API를 사용하는 경우, 정적 배치 루트의 트랜스폼 프로퍼티를 변경할 수 있습니다. 즉, 정적 배치를 구성하는 메시의 조합 전체를 이동하거나, 회전하거나 확대/축소할 수 있습니다. 개별 메시의 트랜스폼 프로퍼티는 변경할 수 없습니다.

게임 오브젝트 세트에 정적 배칭을 사용하려면 해당 게임 오브젝트가 정적 배칭이 가능해야 합니다. 일반 사용 정보에 설명된 기준 외에도 다음을 확인하십시오.

  • 게임 오브젝트가 활성화되었습니다.
  • 게임 오브젝트에 메시 필터 컴포넌트가 있으며, 해당 컴포넌트가 활성화되었습니다.
  • 메시 필터 컴포넌트에 메시에 대한 레퍼런스가 있습니다.
  • 메시의 버텍스 수가 0보다 큽니다.
  • 메시가 다른 메시와 결합되지 않았습니다.
  • 게임 오브젝트에 메시 렌더러 컴포넌트가 있으며, 해당 컴포넌트가 활성화되었습니다.
  • 메시 렌더러 컴포넌트가 DisableBatching 태그가 true로 설정된 셰이더가 있는 머티리얼을 사용하지 않습니다.
  • 함께 배치하려는 메시는 동일한 버텍스 속성을 사용합니다. 예를 들어 Unity는 버텍스 포지션, 버텍스 노멀, 하나의 UV를 서로 사용하는 메시를 배치할 수 있지만 버텍스 포지션, 버텍스 노멀, UV0, UV1, 버텍스 탄젠트를 사용하는 메시와는 배치할 수 없습니다.

참고:런타임 정적 배칭을 사용하려면 읽기/쓰기가 활성화되도록 메시를 설정해야 합니다.

정적 배칭이 성능에 미치는 영향에 관한 정보는 성능에 미치는 영향을 참조하십시오.

빌드 시점에 정적 배칭

에디터에서 빌드 시점에 정적 배칭을 활성화할 수 있습니다.

빌드 시점에 정적 배칭을 수행하려면 다음 단계를 따르십시오.

  1. Edit > Project Settings > Player로 이동합니다.
  2. Other Settings에서 Static Batching을 활성화합니다.
  3. 씬 뷰 또는 계층 구조에서 배칭할 게임 오브젝트를 선택하고 인스펙터에서 확인합니다.
    : 여러 개의 게임 오브젝트를 한 번에 선택하여 모든 게임 오브젝트에 대해 정적 배칭을 활성화할 수 있습니다.
  4. 게임 오브젝트의 Static Editor Flags에서 Batching Static을 활성화합니다.

지정된 정적 메시가 일반 사용 정보에 설명된 기준을 충족하는 경우, Unity는 해당 정적 메시를 자동으로 같은 드로우 콜에 배칭합니다.

인스펙터에 있는 게임 오브젝트의 Static Editor Flags 체크박스
인스펙터에 있는 게임 오브젝트의 Static Editor Flags 체크박스

참고: 빌드 시점에 정적 배칭을 수행하면 Unity가 런타임 시 정적 배치를 위해 메시 데이터를 생성하는 데 CPU 리소스를 사용하지 않습니다.

런타임 시 정적 배칭

Unity는 런타임 시 정적 메시를 배칭하기 위해 StaticBatchingUtility 클래스를 제공합니다. 정적 StaticBatchingUtility.Combine 메서드는 전달한 게임 오브젝트를 조합하여 정적 배칭을 준비합니다. 이는 런타임 시 순서대로 생성하는 메시에 특히 유용합니다.

빌드 시점의 정적 배칭과는 달리, 런타임 시 배칭에서는 Static Batching 플레이어 설정을 활성화할 필요가 없습니다. 이 API를 사용하는 방법은 StaticBatchingUtility를 참조하십시오.

성능에 미치는 영향

정적 배칭을 사용하려면 결합한 지오메트리를 저장할 추가적인 CPU 메모리가 필요합니다. 여러 개의 게임 오브젝트가 같은 메시를 사용하는 경우, Unity는 각 게임 오브젝트를 위한 메시 사본을 1부씩 생성하고 각 사본을 결합된 메시에 삽입합니다. 즉, 같은 지오메트리가 조합된 메시에 여러 번 나타납니다. Unity는 게임 오브젝트의 정적 배칭을 준비하는 데 에디터를 사용하든 런타임 API를 사용하든 관계없이 이 작업을 수행합니다. 메모리 풋프린트를 줄이고 싶다면 렌더링 성능을 희생하고 일부 게임 오브젝트의 정적 배칭을 포기해야 할 수 있습니다. 예를 들어, 우거진 숲 환경에서 나무를 정적으로 표시하면 메모리 소모가 심각할 수 있습니다.

참고: 정적 배치 1개당 포함할 수 있는 버텍스 수에는 제한이 있습니다. 각 정적 배치는 최대 64,000개의 버텍스를 포함할 수 있습니다. 버텍스 수가 이를 초과하면 Unity는 새로운 배치를 만듭니다.

드로우 콜 배칭
동적 배칭