天天看點

關于SkinnedMeshRenderer元件的換裝功能

最近在學習換裝相關的知識,建議大家搜尋關鍵字 SkinnedMeshRenderer換裝,Mesh合并等。

搜尋相關資料期間我發現一個比較牛逼的插件:UWA2(寫實風格)但是因為與項目的技術不符,并且學習成本巨大,最終放棄。

沒有從事美術相關的職業,是以不知道骨骼動畫相關的知識,第一次接觸相關的功能确實令人費解,最開始借鑒的Demo項目是Git上面的一個換裝解決方案,簡單講講他的做法:

根據部位直接換上對應的網格和材質就可以運作起來。

問題1:他能夠換成功(頂點不會亂)的原因估計是因為Mesh在導出的時候是以同一套骨骼來的或者他不帶谷骨骼資訊,我更偏向他不帶骨骼資訊的可能,因為替換Mesh到SkinnedMeshRenderer的時候代碼裡面并沒有相關的骨骼重新整理。

問題2:不同的衣服會綁定不同的骨骼,是以在替換Mesh和Mat的時候如果不重新整理骨骼可能會失敗。

問題3:關于資源處理政策(美術如何出資源,如何序列化相關資訊等)。

問題4:關于打包政策以及優化相關。

解決方案相關資料總結

換裝方案:

一套骨骼換上對應的網格和材質,如果是飄帶可以考慮做成挂點并且Follow到某個骨骼(這樣就能做到動态骨骼的傳遞)。

捏臉技術方案:

骨骼捏臉:

1.計算好捏臉骨骼和原始骨骼的差異值,每一幀需處理差異值。

優點: 實作簡單

缺點: 由于每幀都要做額外的補償計算,效率不高。

2.把影響蒙皮的骨骼和驅動動畫的骨骼進行分離,動畫資料不直接改變蒙皮骨骼的資料

優點: 實作更簡單

缺點: 增加了額外的骨骼,影響效率

參與動畫的骨骼不能進行調整(會被骨骼動畫還原),進而限制了捏臉的自由度,對捏臉效果産生不利影響。

3: 修改骨骼Bindposes達到捏臉效果。

優點: 隻計算一次,效率高。

缺點: 程式實作複雜、需要良好的數學計算基礎。

MorphTarget/BlendShapes:

BlendShapes的原理:在相鄰兩個網格間做插值運算,從一上形狀融合到另一個形狀;是單個網格變形以實作許多預定義形狀和任何數量之間組合的技術,在Maya/3ds Max中稱變形目标。

與骨骼捏臉相比:

骨骼隻适合控制整體的動作,但太局部的動作使用骨骼制作會非常繁瑣,BlendShape可以很好的表現不同的面部表情,但是制作工作量相對較大,性能消耗大。

總結:

關于效果:BlendShape與骨骼動畫不同,更為細膩,是直接對網格頂點上的 vertices, normals 和 tangents 資料進行操作。

關于性能消耗:骨骼動畫吃CPU,BlendShape吃記憶體(未測試證明,該結論為同行經驗所得)。

服飾以及挂飾實體模拟技術案例:

1.動态骨骼方案:插件:Magic Cloth

不适合模拟凝膠、橡膠等各方向拉伸明顯的物體,實體模型适用于模拟頭發、繩子等這些不容易拉伸但容易形變的物體。

2.質子-彈簧模型的方案:官方:Cloth

更真實的實體仿真

3.在設計之初就設計出最複雜的骨骼,往後的疊代中所有的衣服對于骨骼的應用<=骨骼總數,此方案意味着後續的衣物産出會有所限制。

總結:

1,2方案是實時實體仿真,雖然有JobSystem的加持,其性能消耗應該不低,但是1、3方案都是基于動骨實作,需要驗證其性能消耗。

表情技術案例:

BlendShapes 就變形目标動畫的一種實作,Unity該實作進行了相關支援,簡單了解就是插值動畫。

根據網上的技術文章其實作方式是将網格從其原始BlendShapes到目标BlendShape(另一個包含相同拓撲,但頂點位置與原始位置不同的Mesh)的混合量,也就是說Mesh替換後,BlendShape會失去原來的效果。

總結:

我們需求涉及到五官替換,可能會涉及到Mesh替換是以BlendShape效果會有所限制,和動作同學讨論得出可以将五官進行拆分,分别制作BlendShape。

繼續閱讀