Version: Unity 6.0 (6000.0)
언어 : 한국어
빌트인 렌더 파이프라인에서 Unity의 GPU 인스턴싱 셰이더 스트리핑 방지
그래픽스 성능 및 프로파일링 레퍼런스

빌트인 렌더 파이프라인용 GPU 인스턴싱 셰이더 레퍼런스

이 섹션은 GPU 인스턴싱과 관련된 셰이더 추가에 대한 정보를 포함하고 있습니다.

덧셈 설명
#pragma multi_compile_instancing 인스턴싱 배리언트를 생성합니다. 이는 프래그먼트 및 버텍스 셰이더에 필요합니다. 표면 셰이더의 옵션입니다.
#pragma instancing_options Unity가 인스턴스에 사용하는 옵션을 지정합니다. 사용 가능한 옵션 스위치에 대한 자세한 내용은 #pragma instancing_options를 참조하십시오.
UNITY_VERTEX_INPUT_INSTANCE_ID 버텍스 셰이더 입력/출력 구조에서 인스턴스 ID를 정의합니다. 이 매크로를 사용하려면 INSTANCING_ON 셰이더 키워드를 활성화합니다. 활성화하지 않으면 Unity가 인스턴스 ID를 설정하지 않습니다.
인스턴스 ID에 액세스하려면 #ifdef INSTANCING_ON 블록 안에 있는 vertexInput.instanceID를 사용합니다. 이 블록을 사용하지 않으면 배리언트가 컴파일되지 않습니다.
UNITY_INSTANCING_BUFFER_START(bufferName) 이름이 bufferName인 인스턴스당 상수 버퍼의 시작을 선언합니다. 이 매크로를 UNITY_INSTANCING_BUFFER_END와 함께 사용하여 각 인스턴스에 고유하게 지정할 프로퍼티의 선언을 래핑합니다. UNITY_DEFINE_INSTANCED_PROP을 사용하여 버퍼 내 프로퍼티를 선언합니다.
UNITY_INSTANCING_BUFFER_END(bufferName) 이름이 bufferName인 인스턴스당 상수 버퍼의 끝을 선언합니다. 이 매크로를 UNITY_INSTANCING_BUFFER_START와 함께 사용하여 각 인스턴스에 고유하게 지정할 프로퍼티의 선언을 래핑합니다. UNITY_DEFINE_INSTANCED_PROP을 사용하여 버퍼 내 프로퍼티를 선언합니다.
UNITY_DEFINE_INSTANCED_PROP(type, propertyName) 지정된 유형과 이름으로 인스턴스당 셰이더 프로퍼티를 정의합니다. 아래 예시에서 _Color 프로퍼티는 고유합니다.
UNITY_SETUP_INSTANCE_ID(v); 셰이더 함수가 인스턴스 ID에 액세스할 수 있도록 허용합니다. 버텍스 셰이더의 경우 이 매크로는 처음에 필요합니다. 프래그먼트 셰이더의 경우 이 추가 사항은 선택 사항입니다. 버텍스 및 프래그먼트 셰이더에서 예시를 참조하십시오.
UNITY_TRANSFER_INSTANCE_ID(v, o); 버텍스 셰이더의 입력 구조에서 출력 구조로 인스턴스 ID를 복사합니다. 프래그먼트 셰이더의 인스턴스당 데이터에 액세스해야 하는 경우 이 매크로를 사용합니다.
UNITY_ACCESS_INSTANCED_PROP(bufferName, propertyName) 인스턴싱 상수 버퍼의 인스턴스당 셰이더 프로퍼티에 액세스합니다. Unity는 인스턴스 ID를 사용하여 인스턴스 데이터 배열을 인덱싱합니다. bufferName은 지정된 프로퍼티를 포함하는 상수 버퍼의 이름과 일치해야 합니다. 이 매크로는 INSTANCING_ON 및 인스턴싱되지 않은 배리언트에 대해 다르게 컴파일합니다.

Instancing_options 스위치

[#pragma instancing_options](#pragma-instancing_options) 지시문에서는 다음의 스위치를 사용할 수 있습니다.

스위치 설명
forcemaxcount:batchSizemaxcount:batchSize 대부분의 플랫폼에서 Unity는 인스턴싱 데이터 배열 크기를 자동으로 계산합니다. 타겟 기기의 최대 상수 버퍼 크기를 모든 인스턴스당 프로퍼티가 포함된 구조의 크기로 나눕니다. 일반적으로 배치 크기에 대해 걱정할 필요는 없습니다. 하지만 일부 플랫폼에는 배열 크기를 고정해야 합니다. 해당 플랫폼의 배치 크기를 지정하려면 maxcount 옵션을 사용합니다. 다른 플랫폼에서는 이 옵션을 무시합니다. 모든 플랫폼에 대해 배치 크기를 강제로 설정하려면 forcemaxcount를 사용합니다. 예를 들어 프로젝트가 RenderMeshInstanced를 사용하여 256개의 인스턴싱된 스프라이트로 드로우 콜을 보내는 경우 유용합니다. 두 옵션의 기본값은 500입니다.
assumeuniformscaling 모든 인스턴스의 스케일링이 동일하다고 가정하도록 Unity에 지시합니다(모든 X, Y 및 Z축에 대한 동일한 스케일).
nolodfade Unity가 LOD 페이드 값에 GPU 인스턴싱을 적용하지 않도록 합니다.
nolightprobe Unity가 GPU 인스턴싱을 라이트 프로브 값과 해당 오클루전 데이터에 적용하지 않도록 합니다. 이 옵션을 ON으로 설정하면 프로젝트에 GPU 인스턴싱과 라이트 프로브를 모두 사용하는 게임 오브젝트가 없는 경우 성능을 향상시킬 수 있습니다.
nolightmap Unity가 GPU 인스턴싱을 라이트맵 아틀라스 정보 값에 적용하지 않도록 합니다. 이 옵션을 ON으로 설정하면 프로젝트에 GPU 인스턴싱과 라이트맵을 모두 사용하는 게임 오브젝트가 없는 경우 성능을 향상시킬 수 있습니다.
procedural:FunctionName Graphics.RenderMeshIndirect와 함께 사용할 추가 배리언트를 생성합니다. 버텍스 셰이더 단계 시작 시 Unity는 콜론 뒤에 지정된 함수를 호출합니다. 인스턴스 데이터를 수동으로 설정하려면 일반적으로 셰이더에 인스턴스당 데이터를 추가하는 것과 동일한 방식으로 인스턴스당 데이터를 이 함수에 추가하십시오. 가져온 인스턴스 프로퍼티가 프래그먼트 셰이더에 포함된 경우 Unity는 프래그먼트 셰이더 시작 시 이 함수를 호출합니다.
빌트인 렌더 파이프라인에서 Unity의 GPU 인스턴싱 셰이더 스트리핑 방지
그래픽스 성능 및 프로파일링 레퍼런스
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961