Version: Unity 6.0 (6000.0)
语言 : 中文
内置渲染管线中的 GPU 实例化
内置渲染管线中的 GPU 实例化着色器示例

将逐实例属性添加到内置渲染管线中的 GPU 实例化着色器

默认情况下,当__ GameObject__Unity 场景中的基础对象,可以表示角色、道具、风景、摄像机、路径点等。GameObject 的功能由所附的组件决定。更多信息
See in Glossary
在每次实例化绘制调用中都具有不同的变换时,Unity 会对这些 GameObject 进行实例化。要向实例添加更多变体,请修改着色器以添加逐实例的属性,例如颜色。表面着色器和顶点/片元着色器中都可以执行此操作。

自定义着色器不需要逐实例的数据,但需要实例 ID,因为世界矩阵需要实例 ID 才能正常运行。表面着色器会自动设置实例 ID,但自定义顶点和片元着色器不会。要设置自定义顶点和片元着色器的 ID,请在着色器开头使用 UNITY_SETUP_INSTANCE_ID。如需相关操作示例,请参阅顶点和片元着色器

声明实例化属性时,Unity 会从 GameObject 上设置的 MaterialPropertyBlock 对象中收集所有的属性值,并将它们放到单个绘制调用中。如需了解如何使用 MaterialPropertyBlock 对象在运行时设置逐实例数据的示例,请参阅在运行时更改逐实例数据

将逐实例数据添加到多通道着色器时,请记住以下几点:

  • 如果多通道着色器有两个以上的通道,Unity 将只会实例化第一个通道。这是因为 Unity 会针对各对象将后续通道一起渲染,从而强制更改材质。
  • 如果在内置渲染管线中使用前向渲染路径,那么 Unity 将无法对受多个光源影响的对象进行有效的实例化。Unity 只能对基本通道有效地使用实例化,而不能对其他通道如此。如需详细了解光照通道息,请参阅前向渲染和通道标签相关文档。

使用复数逐实例属性时,不需将所有这些属性填入 MaterialPropertyBlock。同样地,如果某个实例缺少属性,Unity 会从引用的材质中获取默认值。如果材质中没有对应属性的默认值,Unity 会将值设为 0。请勿在 MaterialPropertyBlock 中放置非实例化属性,因为这会禁用实例化。请为非实例化属性创建不同的材质。

内置渲染管线中的 GPU 实例化
内置渲染管线中的 GPU 实例化着色器示例