Unity粒子系统相关——自定义数据CustomData和Shader的结合使用

Uma ·
更新时间:2024-09-21
· 969 次阅读

Unity粒子系统—自定义数据(CustomData)的使用

所谓的粒子系统的自定义数据,就是如下图的粒子系统选项:
在这里插入图片描述
我们可以在脚本中通过 SetCustomParticleData和 GetCustomParticleData来操作这两个数据。
自定义数据分为两种类型:Color和Vector
一般来讲我们将自定义数据和粒子系统的Renderer选项中的Custom Vector Stream属性联合起来进行使用。
在这里插入图片描述
这里对Custom Vector Stream进行一下解释:自定义顶点流和粒子系统使用的材质中的Shader中顶点着色器的输入数据有关,比如这里我使用的顶点着色器输入结构体:

struct a2v { float4 vertex:POSITION; float3 normal:NORMAL; float4 texcoord:TEXCOORD0; float4 texcoord1:TEXCOORD1; };

通过括号前面的变量来控制括号当中语义对应的在shader结构体当中的变量(比如上图中Custom1.xyzw控制TEXCOORD1对应的变量texcoord1的xyzw变量)。
Custom Vector Stream中一般默认拥有Position、Normal、Color、UV等语义。其中UV,UV2以此类推和我们的自定义数据都会按顺序填充TEXCOORD(0,1……)变量的xyzw分量,比如上图中UV填充了TEXCOORD0的xy分量,则按顺序在它下方的UV2会填充TEXCOORD0剩余的zw分量,接下来的自定义数据Custom1.xyzw则会填充TEXCOORD1的xyzw分量,以此类推。

那么通过以上所说的操作我们可以实现什么效果呢?自然是可以将粒子系统中的数据和粒子系统使用的材质结合起来操作,比如如上图中我将用Custom1.xyzw来控制texcoord1的四个分量。另外在顶点着色器中写下这样的语句:

o.uv = v.texcoord.xy*v.texcoord1.xy+v.texcoord1.zw;

这样就可以在粒子系统中通过自定义数据来操作着色器中的UV偏移,实现效果。
如下定义Custom1:
在这里插入图片描述
这样Custom1的xy分量则控制着UV的缩放,zw分量控制着UV的偏移。将w分量设置为Curve模式:
在这里插入图片描述
让w分量值在粒子生命周期内不断变化,会使UV进行不停的偏移(这里之前是想做一个攻击效果,奈何水平有限,另外录的有点卡,不是粒子的问题):
在这里插入图片描述


作者:Wind_Code



自定义 shader 系统 unity

需要 登录 后方可回复, 如果你还没有账号请 注册新账号