![650f1a125c6cae47989951d5b1af017f.png](https://i-blog.csdnimg.cn/blog_migrate/416ba496427c06758d7e0964cc1fde98.jpeg)
==========================
== 动画纹理插件
==========================
概述:
1 将骨骼动画转化为顶点动画,结合gpu instancing完成大规模动画角色的渲染.
2 支持任意数量的骨骼,任何精度级别的动画.
3 动画纹理的大小受限于(顶点数量,动画的时间)
水平像素:顶点的数量
竖直像素:动画的逐帧数据
顶点少,动画片段少,动画时间短,可以减少生成的动画纹理的大小.
4 网格渲染的细节,可以通过细分shader来增加
优劣势对比:
名称 蒙皮(cpu,gpu) 动画纹理
需要蒙皮计算(cpu,gpu) 有 无
骨骼数量限制 有 无
挂点骨骼 需要 需要
需要骨骼数据 需要 挂点功能需要
动画剪辑内存 需要 挂点功能需要
动画纹理 无 有,纹理格式:rgbHalf
----------------------------------------------
unity蒙皮动画的工作流程:
cpu,simd
cpu动画驱动骨骼 -> cpu骨骼驱动顶点 -> 变换后的顶点发给gpu渲染
gpu skin:
cpu动画驱动骨骼 ->gpu上蒙皮 ->写回主存 -> 变换后的顶点发给gpu渲染
动画纹理的原理
1 逐帧将动画驱动的mesh(顶点数据)烘焙到纹理,使用MeshRenderer结合gpu instancing来渲染.
渲染时无蒙皮的计算.
不需要挂点时,无cpu的骨骼变换
2 在顶点shader中获取对应的数据来控制顶点以复原动画的播放.
3 动画纹理的构成
动画1
水平: 动画驱动的顶点数据(xyz)
竖直: 动画帧
动画2
水平: 动画驱动的顶点数据(xyz)
竖直: 动画帧
注意事项.
1 材质需要开启gpu instancing.
2 TextureAnimation 组件的 manifest(运行时会赋值动画纹理)
3 MeshRenderer/Anim Tex,动画纹理须存在.
使用.
1 烘焙动画
* bake时,模型AnimationType需要为Legacy.
播放时,不需要.
1 有动画的模型拖放到Hierarchy.
或 Hierarchy建EmptyObject,起名AnimPlayer,附加MeshRenderer,MeshFllter,附加Animation及animtionClips,拖到Assets中形成prefab.
2 选择该prefab,点击AnimTexture/BakeAnimToAtlas
AnimTexPath会出现bake的动画纹理与动画纹理信息文件.
2 播放动画
1 prefab拖到Hierarchy
1 附加MeshFilter,选模型mesh
2 附加MeshRenderer.
3 TextureAnimation组件.
2 建材质
1 shader选AnimTexture.
2 拖到MeshRenderer的material槽.
3 将动画纹理信息文件拖给TextureAnimation的TexInfo槽位.
3 可直接使用TextureAnimation控制动画播放.
4 使用Animator
* 将模型(及动画模型)AnimationType置为Generic.
* 无挂点,不需要使用动画剪辑.
1 附加Animator到prefab,并做好AnimatorController
2 附加MecanimController组件
该组件会获取Animator的状态与过度,调用TextureAnimation播放动画
3 控制Animator的参数进行动画.
5 使用NavMeshAgent
1 Hierarchy中建Empty,起名AgentPlayer.
附加NavMeshAgent.
2 将AnimPlayer拖到AgentPlayer下
3 控制agent.destination.
6 使用骨骼作为装备的挂点
* 将模型(及动画模型)AnimationType置为Generic.
1 开启Optimize Game Objects,并保留期望的骨骼.
2 Animator Controller中动画状态放入对应的动画剪辑