unity內渲染大量角色
==========================
== 動畫紋理插件
==========================
概述:
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中動畫狀態放入對應的動畫剪輯
推薦閱讀: