版本:Unity 6 (6000.0)
语言:英语
粒子系统中的自定义数据流
粒子系统标准着色器自定义顶点流示例

粒子系统自定义顶点流

如果您善于编写自己的 着色器在 GPU 上运行的程序。 了解更多信息
请参阅 术语表
,则可以使用 渲染器模块 的 **自定义顶点流** 功能配置您的 粒子系统通过生成和动画场景中大量小型 2D 图像,来模拟液体、云朵和火焰等流动实体的组件。 了解更多信息
请参阅 术语表
,从而将更广泛的数据传递到您的自定义着色器。

您可以从许多内置 数据流 中进行选择,例如速度、大小和中心位置。除了能够创建强大的自定义着色器外,这些流还允许许多更通用的优势

  • 使用 切线 流支持法线贴图粒子。
  • 您可以移除颜色,然后添加切线 UV2AnimBlend 流在粒子上使用标准着色器。
  • 为方便地执行混合页面的线性纹理混合,添加 UV2 和 AnimBlend 流,并附加粒子/Anim Alpha 混合着色器(请参见下面的示例截图以了解如何进行设置)。

还有两个完全自定义的每个粒子数据流 (ParticleSystemVertexStreams.Custom1ParticleSystemVertexStreams.Custom2),可以在脚本中填充它们。使用您的数据数组调用 SetCustomParticleDataGetCustomParticleData 来使用它们。有两种使用此数据的方法

  • 通过将自己的数据附加到粒子中来,在 脚本允许您创建自己的组件、触发游戏事件、按时间修改组件属性以及以任何您喜欢的方式响应用户输入的代码片段。 了解更多信息
    请参阅 术语表
    中驱动自定义行为;例如,将“健康”值附加到每个粒子。
  • 要将此数据传递给着色器,可以使用两种自定义流之一,就像将任何其他流发送到着色器一样(请参阅 ParticleSystemRenderer.EnableVertexStreams)。详细说一下第一个示例,你的自定义生命值属性现在除了驱动基于脚本的游戏逻辑外,还可以驱动某种视觉效果。

在添加顶点流时,Unity 将在每个项目旁边提供括号中的部分信息,以帮助你在着色器中读取正确的数据。

括号中的每个项目对应一个 Vertex Shader在渲染 3D 模型时在模型的每个顶点上运行的程序。 了解更多信息
请参阅 术语表
输入,你应在着色器中指定该输入。下面是此配置的正确输入结构。

            struct appdata_t {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
                fixed4 color : COLOR;
                float4 texcoords : TEXCOORD0;
                float texcoordBlend : TEXCOORD1;
            };

请注意,UV 和 UV2 都在 TEXCOORD0 的不同部分传递,因此我们对两者使用一个声明。要在着色器中访问每个 uv,请使用 xy 和 zw 交错。这使你可以有效地打包顶点数据。

其他资源

粒子系统中的自定义数据流
粒子系统标准着色器自定义顶点流示例