==========================

== 動畫紋理插件

==========================

概述:

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中動畫狀態放入對應的動畫剪輯

推薦閱讀:

相关文章