Version: 6000.3
语言: 中文
防止 Unity 剥离内置渲染管线中的 GPU 实例化着色器
图形性能和分析参考

内置渲染管线的GPU实例化着色器参考

本节包含有关着色器在 GPU 上运行的程序。更多信息
请参阅术语表
与 GPU 实例化相关的附加内容。

加法 描述
#pragma multi_compile_instancing 生成实例化变体。这是片段和顶点着色器 渲染模型时在 3D 模型的每个顶点上运行的程序。更多信息
请参阅术语表
.对于表面着色器:为内置渲染管线编写着色器的简化方法。更多信息
请参阅术语表
.
#pragma instancing_options 指定 Unity 用于实例的选项。有关可用选项开关的信息,请参阅#pragma instancing_options.
UNITY_VERTEX_INPUT_INSTANCE_ID 在顶点着色器输入/输出结构中定义实例 ID。若要使用此宏,请启用 INSTANCING_ON 着色器关键字。否则,Unity 不会设置实例 ID。
要访问实例 ID,请使用
vertexInput.instanceID在 #ifdef INSTANCING_ON 块内。如果不使用此块,变体将无法编译。
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 个实例的绘制调用时,这非常有用精灵2D 图形对象。如果你习惯于在3D中工作,精灵本质上只是标准纹理,但有一些特殊的技术可以组合和管理精灵纹理,以提高开发过程中的效率和便利性。更多信息
请参阅术语表
.这两个选项的默认值为 500。
assumeuniformscaling 指示 Unity 假定所有实例都具有统一的缩放(所有 X、Y 和 Z 轴的缩放比例相同)。
nolodfade 使 Unity 不将 GPU 实例化应用于LOD细节级别 (LOD) 技术是一种优化,可减少 Unity 在游戏对象与相机的距离增加时必须为游戏对象渲染的三角形数量。更多信息
请参阅术语表
淡入淡出值。
nolightprobe 阻止 Unity 将 GPU 实例化应用于光源探针光源探针存储有关光线如何穿过场景中的空间的信息。在给定空间中排列的光源探针集合可以改善移动对象的光照和该空间内的静态LOD场景。更多信息
请参阅术语表
值及其遮挡数据。将此选项设置为ON可以提高性能,如果项目不包含游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
同时使用GPU实例化和光照探针。
nolightmap 阻止 Unity 将 GPU 实例化应用于lightmap:预渲染的纹理,包含光源对场景中静态对象的效果。光照贴图覆盖在场景几何体之上,以创建光照效果。更多信息
请参阅术语表
地图集信息值。将此选项设置为ON如果您的项目不包含同时使用 GPU 实例化和光照贴图的游戏对象,则可以提高性能。
procedural:FunctionName 生成用于 Graphics.RenderMeshIndirect 的其他变体。在顶点着色器阶段开始时,Unity 调用冒号后指定的函数。若要手动设置实例数据,请将每个实例数据添加到此函数,其方式与通常将每个实例数据添加到着色器的方式相同。如果片段着色器中包含任何提取的实例属性,Unity 也会在片段着色器的开头调用此函数。
防止 Unity 剥离内置渲染管线中的 GPU 实例化着色器
图形性能和分析参考