UNITY_DOTS_INSTANCED_PROP 매크로는 3가지 배리언트가 있습니다.
UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED(PropertyType, PropertyName)UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(PropertyType, PropertyName)UNITY_DOTS_INSTANCED_PROP_OVERRIDE_REQUIRED(PropertyType, PropertyName)이러한 매크로를 사용하면 컴파일 시 프로퍼티가 인스턴스화될 수 있는지 여부를 지정할 수 있습니다. UNITY_ACCESS_DOTS_INSTANCED_PROP 같은 액세스 매크로를 더 최적의 코드로 확장할 수 있으며 저사양 플랫폼에 상당한 영향을 미칠 수 있습니다.
다음은 위의 모든 매크로 배리언트를 사용하는 DOTS 인스턴스화 프로퍼티 블록의 예시입니다.
UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)
UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(float4, Color)
UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED(float4, SpecColor)
UNITY_DOTS_INSTANCED_PROP_OVERRIDE_REQUIRED(float4, EmissionColor)
UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)
Color 프로퍼티를 인스턴스화하거나 인스턴스화하지 않을 수 있습니다. 올바른 로딩 경로는 프로퍼티 메타데이터 하이비트에 따라 동적으로 선택됩니다.SpecColor 프로퍼티는 인스턴스화할 수 없습니다. 이 선언은 상수 버퍼에 uint32 필드를 추가하지 않습니다. 이는 아무것도 선언하지 않는 것과 같습니다. 코드의 다른 부분을 수정하지 않고도 프로퍼티에 대한 인스턴싱을 빠르게 비활성화하는 것이 유용할 수 있습니다.EmissionColor 프로퍼티는 인스턴스화되어야 합니다. 프로퍼티는 항상 unity_DOTSInstanceData 버퍼에서 로드되며 프로퍼티에 액세스할 때 동적 브랜치가 방출되지 않습니다.기본적으로 UNITY_DOTS_INSTANCED_PROP은 UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED와 동일합니다. “com.unity.render-pipelines.core\ShaderLibrary\UnityDOTSInstancing.hlsl”의 UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED_BY_DEFAULT 정의에 대한 코멘트를 해제하여 이 기본 동작을 변경할 수 있습니다. 이렇게 하면 이 정의가 활성화되고 UNITY_DOTS_INSTANCED_PROP이 UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED와 동일해집니다.
참고: UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED_BY_DEFAULT 정의에 대한 코멘트를 해제할 때 셰이더가 올바르게 다시 컴파일되었는지 확인하려면 Library 폴더를 지워야 할 수 있습니다.
저사양 기기에서는 인스턴스화된 프로퍼티에 상당한 성능 소모가 발생할 수 있습니다. 예를 들어 SSBO에서 로드가 일반 상수 버퍼 로드보다 훨씬 느릴 수 있습니다. 많은 저사양 기기에서 이 유형의 버퍼 로드는 텍스처 샘플러를 통과하지만, 상수 버퍼 로드는 동적 인덱스를 사용하여 버퍼에 액세스하지 않는 한 더 빠른 하드웨어를 사용하기 때문입니다. 인스턴스화된 프로퍼티는 항상 프로퍼티 메타데이터에 의존하므로 동적 인덱싱과 함께 로드됩니다. 즉 저사양 기기에서 항상 텍스처 샘플러를 통과합니다. 저사양 기기에 맞게 프로젝트를 최적화하려면 기본적으로 프로퍼티 인스턴싱을 비활성화하면 됩니다. 그러려면 UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED_BY_DEFAULT 정의를 활성화합니다. 이렇게 하면 프로퍼티 인스턴싱이 기본적으로 비활성화됩니다. 그러고 나면 프로퍼티 인스턴싱이 필요한 프로퍼티에 대해서만 수동으로 활성화할 수 있습니다.