Version: Unity 6.0 (6000.0)
언어 : 한국어
URP의 커스텀 셰이더에서 DOTS 인스턴싱 지원
커스텀 셰이더에서 DOTS 인스턴스 프로퍼티에 액세스

URP의 커스텀 셰이더 DOTS 인스턴싱 프로퍼티 선언

트랜스폼 매트릭스와 같은 인스턴스 데이터를 로드하려면 셰이더에 DOTS 인스턴스화 프로퍼티를 정의해야 합니다. 다음은 간단한 DOTS 인스턴스화 프로퍼티 블록 예시입니다.

UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)
    UNITY_DOTS_INSTANCED_PROP(float4, Color)
UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)

프로퍼티 블록의 시작과 끝을 표시하려면 블록 이름 뒤에 있는 UNITY_DOTS_INSTANCING_STARTUNITY_DOTS_INSTANCING_END 매크로를 사용합니다. 이 예시에서는 이름 MaterialPropertyMetadata를 사용합니다. 다음 세 가지 블록 이름이 허용됩니다.

  • BuiltinPropertyMetadata
  • MaterialPropertyMetadata
  • UserPropertyMetadata

셰이더는 각 블록 중 하나를 선언할 수 있으므로 DOTS 인스턴스화 셰이더에는 0–3개의 블록이 있을 수 있습니다. Unity 정의 셰이더 코드는 UserPropertyMetadata를 사용하지 않으므로 이 이름은 무료로 사용할 수 있습니다. URP와 HDRP는 제공하는 모든 셰이더에 BuiltinPropertyMetadata를 정의하고, 대부분의 셰이더에 대해 MaterialPropertyMetadata도 정의하므로 UserPropertyMetadata를 사용하는 것이 가장 좋습니다. 커스텀 셰이더는 사용 가능한 세 가지 이름을 모두 한 번에 사용할 수 있습니다.

블록에는 다음과 같은 형식의 DOTS 인스턴스화 프로퍼티 정의를 얼마든지 포함할 수 있습니다.

UNITY_DOTS_INSTANCED_PROP(PropertyType, PropertyName)

PropertyType은 부울 벡터를 제외하고 모든 HLSL 빌트인 유형(예: uint, float4, float4x4, int2x4)일 수 있으며, PropertyName은 DOTS 인스턴스화 프로퍼티의 이름입니다. DOTS 인스턴스화 프로퍼티는 일반 머티리얼 프로퍼티와 완전히 분리되어 있으며, 다른 일반 머티리얼 프로퍼티와 동일한 이름을 지정할 수 있습니다. 이는 UNITY_DOTS_INSTANCED_PROP 매크로가 다른 프로퍼티 이름과 충돌하지 않는, Unity가 인식하는 특수 상수 이름을 생성하므로 가능합니다. Unity가 제공하는 셰이더는 DOTS 인스턴스화 프로퍼티에 일반 머티리얼 프로퍼티와 동일한 이름을 부여하지만 이 규칙을 따르지 않아도 됩니다.

내부적으로 Unity는 셰이더가 선언하는 모든 DOTS 인스턴스화 프로퍼티에 대해 셰이더에 32비트 정수 메타데이터 값을 제공합니다. Unity는 코드가 BatchRendererGroup.AddBatch 호출을 수행하여 드로우와 연결된 배치를 생성할 때 메타데이터 값을 설정합니다. Unity가 설정하지 않은 경우 메타데이터 값은 기본값인 0입니다. 셰이더는 Unity가 BatchRendererGroup.AddBatch에 인수로 전달하는 GraphicsBuffer에 설정하는 ByteAddressBuffer unity_DOTSInstanceData에 액세스할 수도 있습니다. 일반적으로 이 버퍼는 셰이더가 인스턴스 데이터를 로드하는 위치입니다. 여러 배치가 하나의 GraphicsBuffer를 공유할 수 있지만, 각 배치에서 unity_DOTSInstanceData에 대해 별도의 GraphicsBuffer를 사용할 수도 있습니다.

참고: Unity는 DOTS 인스턴스화 데이터를 자동으로 제공하지 않습니다. 각 배치의 unity_DOTSInstanceData 버퍼에 올바른 데이터가 포함되어 있는지 확인하는 것은 사용자의 책임입니다. 인스턴스 데이터에는 Unity가 일반적으로 게임 오브젝트에 제공하는 여러 프로퍼티(예: 트랜스폼 매트릭스, 라이트 프로브 계수, 라이트맵 텍스처 좌표)가 포함되어야 합니다.

URP의 커스텀 셰이더에서 DOTS 인스턴싱 지원
커스텀 셰이더에서 DOTS 인스턴스 프로퍼티에 액세스
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961