触手摆动效果

实现步骤:
1.在Houdini中制作模型和生长动画效果,先在houdini展好UV,让美术制作相应的贴图,也可以用美术提供的模型制作
2.利用VAT3导出模型、贴图、材质球,在unity中使用官方的shadergraph文件(我使用的是自己精简之后的)
3.在shader中用贴图偏移顶点位置形成摆动效果,并将shadergraph转成代码接入管线shader
VAT原理:


U是顶点数,V是帧数
houdini中烘焙VAT时,如果顶点数大于贴图U向像素,会自动放到下一行(一开始我以为顶点数最大支持8192,其实并不是)
每一帧存储当前所有顶点的位置,像素rgb对应顶点的xyz坐标,顶点位置进行归一化存进贴图,在shader中反算出位置。
模型生长动画
Houdini全部节点:

这个生长使用缩放实现的,其实还有很多种其他方案
实现缩放的代码如下

原理:获得模型包围盒大小,然后归一化,用Ramp控制作为比率乘到位置坐标上,然后对ramp K帧

使用labs的节点导出即可,节点使用可以参照Vertex Animation Textures in Unity | SideFX

选择柔体模式,引擎种类,帧数,输入的模型,贴图格式,贴图大小,点击左上角渲染出图(目前格式只能用exr,png有bug)
破碎效果也是类似的方式,在刚体模块解算后选择刚体模式导出即可,刚体、柔体、流体、粒子在引擎中的shader是不一样的

生成的模型、贴图、材质球

pos就是顶点位置贴图,rot是生成法线和切线的贴图,col是顶点色贴图
把图指上去即可,顶点色没用到的话可以删除,pos2是为了优化贴图大小用的,测试发现至少这版本无太大意义

在unity设置模型设置和贴图设置


触手摆动顶点动画
原理:用一张贴图做UV滚动分别影响模型物体空间坐标的三个轴向
类似这种图

下面是VAT3柔体+顶点动画的shadergraph文件(只能用柔体,刚体效果不适用)
总结:实现VAT的方法很多,之所以选择使用houdini的方式,是因为houdini的模块能够制作很多视觉效果,未来可以尝试各种酷炫效果并导入到引擎实现
效率:模型264个顶点100帧,两张图, 206k*2 。1140顶点 100帧,两张图,900k*2。
问题:目前还是不支持生成2的n次幂正方形的图,如果再深入研究的话,要修改这个节点
其他VAT调研:
1.
Houdini的VAT3官方案例视频及工程(推荐)
Vertex Animation Textures in Unity | SideFX
Vertex Animation Textures in Unreal | SideFX
2.
unity插件:Vertex Animation Tools | 动画 工具 | Unity Asset Store
文档:Polyflow - Vertex Animation Tools documentation
这个unity插件可以将现成的动画FBX转成点缓存
3.
能导出VAT的3dmax插件(Unreal专用)
Vertex Animation Tool | Unreal Engine Documentation
4.
国外大佬写的Unity工具GitHub - Gaxil/Unity-AlembicToVAT: Alembic to VAT (Vertex Animation Texture) mini tool
可以将Alembic文件直接在unity转VAT并有相应的shader
网友评论