默认情况下,Unity GPU 实例游戏对象Unity 场景中的基本对象,可以代表角色、道具、场景、摄像机、路径点等等。游戏对象的功能由附加到它的组件定义。更多信息
参见 术语表在每个实例化绘制调用中具有不同的变换。要为实例添加更多变化,请修改着色器在 GPU 上运行的程序。更多信息
参见 术语表以添加每个实例属性,例如颜色。您可以在表面着色器用于内置渲染管线的着色器编写方式。更多信息
参见 术语表和顶点/片段着色器中执行此操作。
自定义着色器不需要每个实例数据,但它们确实需要实例 ID,因为世界矩阵需要一个才能正常工作。表面着色器会自动设置实例 ID,但自定义顶点和片段着色器不会。要为自定义顶点和片段着色器设置 ID,请在着色器开头使用 UNITY_SETUP_INSTANCE_ID。有关如何执行此操作的示例,请参见顶点和片段着色器。
当您声明一个实例属性时,Unity 会将从游戏对象上设置的 MaterialPropertyBlock 对象中收集所有属性值,并将其合并到一个单独的绘制调用中。有关如何在运行时使用 MaterialPropertyBlock 对象设置每个实例数据的示例,请参见在运行时更改每个实例数据。
在将每个实例数据添加到多通道着色器时,请牢记以下事项
当您使用多个每个实例属性时,您不需要在MaterialPropertyBlock
对象中填充所有属性。此外,如果一个实例缺少属性,Unity 将使用参考材质的默认值。如果材质没有该属性的默认值,Unity 会将该值设置为 0。不要将非实例属性放入MaterialPropertyBlock
中,因为这会禁用实例化。相反,为它们创建不同的材质。