Custom Vertex Streams 自定义粒子顶点流

做特效经常用到一些流动的光效,流光等等,但是为了某些需要,需要粒子发射过程中,控制材质的变化参数
(比如控制光效流动)故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分量效果,要实现更加复杂的效果,要看美术的具体需求
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用 Boost Graph Library 实现自定义顶点自定义边的最小生成树的 C++ 代码示例: ```c++ #include <iostream> #include <vector> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/prim_minimum_spanning_tree.hpp> using namespace std; using namespace boost; // 定义自定义顶点结构 struct Vertex { int id; Vertex(int i = 0) : id(i) {} }; // 定义自定义边结构 struct Edge { int weight; Edge(int w = 0) : weight(w) {} }; // 定义图的类型 typedef adjacency_list<vecS, vecS, undirectedS, Vertex, Edge> Graph; int main() { int n = 5; // 顶点数 vector<pair<int, int>> edges = {{0, 1}, {0, 2}, {1, 2}, {1, 3}, {2, 3}, {2, 4}, {3, 4}}; // 边集合 vector<Vertex> vertices(n); // 顶点集合 // 初始化顶点 for (int i = 0; i < n; i++) { vertices[i] = Vertex(i); } // 构建图 Graph g(edges.begin(), edges.end(), vertices.begin(), n); // 定义最小生成树的存储变量 vector<Graph::edge_descriptor> tree; // 计算最小生成树 prim_minimum_spanning_tree(g, back_inserter(tree)); // 输出结果 for (auto e : tree) { cout << "(" << g[source(e, g)].id << ", " << g[target(e, g)].id << ") " << g[e].weight << endl; } return 0; } ``` 在这个例子中,我们自定义了一个 `Vertex` 结构体,用来表示顶点的标识符,然后使用 `adjacency_list` 定义了图的类型,将 `Vertex` 结构体作为顶点的属性存储在图中。同时,我们也自定义了一个 `Edge` 结构体,用来表示边的权值,将 `Edge` 结构体作为边的属性存储在图中。最后使用 `prim_minimum_spanning_tree` 计算最小生成树,将结果存储在 `tree` 变量中,并输出结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值