做特效经常用到一些流动的光效,流光等等,但是为了某些需要,需要粒子发射过程中,控制材质的变化参数
(比如控制光效流动)故unity提供了一个自定义的顶点流功能接口如下图所示:
代码部分:
顶点数据传入代码块,
其中包括渲染的基本数据,包括顶点坐标数据,顶点颜色数据,(顶点法线数据等等)
其中TEXCOORD是寄存器,其中TEXCOORD0可能即将存放的是uv数据(为什么是可能,因为
要看它到底后面存放什么数据,如果它用来在后面计算了uv坐标,
float2 uv_MainTex = i.ase_texcoord1.xy * _MainTex_ST.xy + _MainTex_ST.zw;那么它是存放uv数据,
如果它纯粹用于数据计算,就是存放其他数据)
,然后如果需要,可以设置更多TEXCOORD 1、2、3…
然后TEXCOORD1就是存放了我们自定义的数据,这个数据对应了粒子系统中的Custom1.xyzw
需要注意的是:
问题1:
Custom Vertex Streams 下面的参数,要与代码块里面的字段对应起来,不然粒子会报错,像这样:
因为一套uv只需要2维数组,所以我用uv2又让其把TEXCOOORD0的数据占满。
接线来用Custom1.xyzw占用TEXCOORD1占满
我发现代码的排列也不能乱,不然粒子也会爆红,一一对应起来
问题2:
如果顶点色没有被片源着色器计算,也会报错:(解决方法,把顶点色数据在片元着色器里计算上即可)
然后我又尝试在ASE里面用节点方式来实现自定义顶点流,设置如下图所示:
reference 设置为None
UV Set设置为2(如果设置为1,那么就跟第一套TEXCOOORD0冲突了,必须要重新开辟新的TEXCOOORD1)
这是自己的分析,如有错误,欢迎指出来
这只是一个简单的控制水平UV 的x分量效果,要实现更加复杂的效果,要看美术的具体需求