模型美術規範
阿新 • • 發佈:2019-02-13
http://www.gameres.com/480489.html
到現在我大概用了四年多u3d,期間掉過無數坑,遇到過各種問題,2015年底的時候想著應該將其整理出來,方便大家查閱,於是有了這篇東西。但是實際整理完髮現,有些問題我已經想不起了,遇到過的問題肯定不止這麼多。希望各位同行能把遇到的問題發給我,解決了的、沒解決的都可以,大家互相交流一起進步。我會把所有問題全部整理好在共享給大家,自己能提高的同時也算給行業做點小貢獻。我的微訊號:othniel-aslan。
匯出相關
圖為max匯出fbx介面,各版本介面略有不同功能相近,版面所限請放大檢視
在遊戲美術工作流中,模型和動畫的匯出都是由動畫師負責,一份可用的動畫檔案,必須同時包含模型和動畫檔案各一個。
模型匯出時應注意勾選蒙皮和幾何變形,不要勾選貼圖檔案,匯出模型後單獨將貼圖檔案手動放在模型資料夾下。避免重複匯出替換時出錯。動畫的匯出則比較常規,需要注意的是很多人喜歡使用烘焙動畫,其實並不好用,容易出現萬向軸的問題且不說,還給一些中間幀動畫的修改帶來難度。具體內容見模型篇。
掛點相關
圖為常規掛點所需點位,實際根據專案需求增減。
所掛dummy點需作為子級連結到對應骨骼,三軸對齊,各個模型間同一個點位置要統一。
武器換手相關
換手的三種方式 1.縮放隱藏換手 2.link連結約束換手 3.prop骨骼換手
1.縮放隱藏換手 即 在需要有武器的位置都放置一把武器(如左手、右手、後背、空中),將當前不需要顯示的武器縮放至極小不可見,需要顯示時再放大顯示。優點為無需特別支援,引擎通用,非常簡單。缺點為略麻煩,做動畫之前就要想好武器需複製幾份分別在哪,動畫縮放容易出現中間幀過度不順暢。
2.link連結約束換手 即 使用link約束動畫實現武器換手 其最大優點就是大部分動畫師非常熟悉,運用起來得心應手。缺點也很明顯,引擎不能識別link動畫,需要塌陷或匯出時烘焙動畫才可被引擎識別,而一旦出現萬向軸問題,改起來會比較麻煩。
3. prop骨骼換手 即max自帶的武器道具骨骼 優點是設定即為武器道具骨骼,能解決武器所需一切需求,並且被unity3D 5.0以後的版本支援,直接匯出即可。缺點是unity3D 5.0之前的版本不支援,需要烘焙動畫。
表情動畫相關
Unity支援的MAX表情動畫已經確認可行的有兩種 一種就是 面部骨骼繫結表情動畫 另一種是morpher控制器表情動畫。表情動畫常見於舞蹈類、大型MMO類及單機類等遊戲中,前兩種重視社交和展示所以對錶情有需求,後一種常見於精品遊戲中,各方面品質相對都比較高所以對錶情也有要求。
面部骨骼繫結動畫 最常見的面部骨骼就是張嘴動畫,只需一根下顎骨骼即可解決,在很多有坐騎或怪獸的專案中使用,是廣義上的表情動畫。較為複雜的表情動畫用骨骼繫結來做並不划算,一來架設骨骼比較麻煩,具體K動畫的時候也相對繁瑣(有人用線性IK來製作表情,其實道理與骨骼繫結並無二致,只是調動畫的時候有聯動關係相對簡單些);二是骨骼過多帶來的運算量也比較大,會比較佔用資源。
morpher控制器表情動畫 優點是佔用資源相對較小,動畫可以做到比較精細,製作流程也相對簡單。缺點是動畫師不一定會調模型表情,前期過程相對麻煩(被拾取的表情頭不能映象、不能在統一個被拾取臉上左右同時調錶情),並且有比較多的動作師從來沒接觸過morpher學習成本也相對較高。
這裡解釋下morpher的原理 將一個角色的面部模型複製出多份,每份分別承擔表情的一個區域性動作,如微笑至少需要左嘴角上翹、右嘴角上翹、左眼微閉、右眼微閉四份。然後通過morpher控制器拾取這些表情,即可通過控制morpher的數值來調節表情動畫。
(以上表情為鄙人隨手亂調作為配圖使用,略醜勿怪)
檔案壓縮相關
由於Fbx匯出取樣原則(即我們通常所說的滿幀匯出)所致,通常一段動畫匯出後的容量都會比較大,常見的壓縮方式只有一種,即使用unity自帶的動畫壓縮。這裡再額外介紹兩種非常規的壓縮方法以應不時之需。
Unity自帶的動畫壓縮 選項有三種分別是關閉壓縮 減少關鍵幀 減少關鍵幀並壓縮檔案。 1.關閉即為不進行壓縮保持匯出時的狀態。2.減少關鍵幀 即unity會檢查相鄰兩幀之間移動旋轉縮放的閾值,當這個值小於規定數值時就刪掉其中一幀。3.減少關鍵幀並壓縮檔案 除了2中所描述的內容還會降動畫檔案進行打包壓縮,使其減少佔用硬碟容量,但對記憶體容量並無影響。
Rotation error、Position error、Scale error三個值是上文“減少關鍵幀”內容中所提到的閾值,這個值越大被刪除的幀就越多,動畫檔案相對就越小,同時動畫質量相對也就越差。
當動畫壓縮過於嚴重時,一些動作幅度較小的動畫將會嚴重失真,如待機動畫在壓縮嚴重時腿部將無法站立於地面,而是隨著質心搖擺。產生此類問題,只需將該動畫的壓縮閾值略作調整即可,如果遇特殊情況調整閾值無效可嘗試後面的方法。
Max中匯出時進行壓縮 在max的匯出面板也有減少關鍵幀的選項,其工作原理也與unity相同,只是max作為專業的動畫製作軟體,他的閾值允許的精度更高可以到小數點後面很多位。而且作為美術軟體相信他對動畫關鍵幀的刪減也更專業。但缺點也很明顯,他不能實時預覽。當我們設定一個閾值之後,沒有辦法實時檢視壓縮後的效果,難保壓縮後的檔案沒有錯誤,不適用於處理大量的檔案。當unity無法處理某個動畫時可以用max嘗試。
編輯fbx動畫 這種是非常規的辦法了,我也是聽人說沒試過。方法是 在max中匯出fbx之後,使用可以編輯fbx的軟體(如mortion builder),對動畫進行刪幀。這個辦法的好處顯而易見,由於是動畫師手工刪除,既能保證動畫的質量又能保證壓縮到最小。缺點也很明顯,工作量大浪費時間,如果不是非常重要的角色出現解決不了的問題,不建議使用這種方式。
新舊骨骼系統相關
Unity在4.0系統增加了新的動畫系統,目前unity動畫型別下拉選單中共有四個選項,分別是None、Legacy、Generic以及Humanoid。其中G和H為4.0版本新增的內容,L是老版本的動畫系統,none則是不使用動畫。
Legacy 是我目前使用最多的動畫系統,在我看來他已經滿足一個專案的絕大部分需求,而且因為最基礎所以也最易擴充套件,需要一些額外功能時也方便修改追加。
Generic 與legacy相比,generic可以使用新系統自帶的狀態機,並且自帶可編輯的動畫融合系統,然而在我看來這都沒什麼用。如果generic不與humanoid配合使用,其功能與legacy並無二致,反而因為系統並不成熟更容易出現未知錯誤。當然,也可能是有其他功能我並未得知,如有遺漏還望指正。
Humanoid 字面上理解即為人型骨骼系統,其最顯著的特點是可以將max的骨骼轉化為unity的骨骼,並且會生成一份avatar,將avatar指定給不同的角色模型。即可無視高矮胖瘦的體型差異將同一個動畫分配給每個角色,簡單來說就是可以實現動畫的通用。
這裡並沒有講每個動畫系統的優劣,因為動畫系統優劣的評判並不是單一獨立的,理論上每個動畫系統都能解決問題。具體要選擇哪個系統,要看遊戲的型別、打包方式,舉例來說,如果是像三國無雙系列這種,同一個角色換了武器就會換一套動作,每件武器都有對應的動畫,那顯然是要用humanoid這種可以無視體型的通用骨骼;又比如角色間不需要共用動畫,並且每個角色程式都是單獨打包,那最好還是用legacy系統,簡單省事。甚至在同一款遊戲裡也可以主角單獨打包使用legacy骨骼,其他怪物使用humanoid骨骼共用動畫,以實現資源的最優化。
常見問題與小技巧
1.單幀動畫無效 在unity中至少要兩個關鍵幀才能被認定為是一段動畫,如果某根骨骼只有一個關鍵幀能不能讀取這個關鍵幀則比較看緣分,有時候讀得出有時候讀不出。
注:另外要注意的是,同一個骨骼的兩個動畫,如果A動畫中該骨骼存在兩個以上的關鍵幀,而B動畫只有一個關鍵幀,當播完A繼續播B的時候,該骨骼則會保持A動畫的最厚一幀狀態。同理如果B動畫該骨骼沒有幀,也會保持A動畫最後一幀。
2.超遠位置出現關鍵幀 一般常見於導bip動作檔案時bone骨骼或dummy點上,在負幾百萬幀的位置出現一個孤立的幀,具體是什麼原因目前仍不清楚。該問題在max中比較不容易被發現,匯入到unity時動畫無法讀取,曲線面板不顯示任何關鍵幀。Max匯出動畫時雖有刪除孤立幀的選項,但經測試無法解決該問題,一般只能開啟曲線面板找到該幀刪除之。這裡要特別強調一下,因為其位置非常遠,最好逐一選擇骨骼刪除,框選所有骨骼一起刪的話,極容易導致max崩潰。
3.層動畫問題 常見的有兩種,匯出時如果動畫層沒有塌陷,則unity只能識別當前層所記錄的動畫,基本是百分之百出錯的,回到max塌陷即可。另外一個是max自身的問題,當某個骨骼使用了select IK object的時候,加層是無效的,必須點選空白處清空掉拾取的IK object。
拾取狀態
清空狀態
4.攝像機動畫 理論上來說,max裡的攝像機動畫unity是不識別的,但實際上匯出的攝像機在unity中會預設作為一個gameobject來使用。這樣只要在這個gameobject下面掛載一個unity的攝像機,並把座標歸零即可。這裡說個小技巧,由於單位的原因,max的攝像機動畫進入到unity中可能會遇到比例的問題,我們可以在max中建立一個dummy點,座標歸零,把攝像機作為子級連結給dummy,然後再調攝像機動畫。這樣進入unity的時候,我們只要吧dummy歸零,縮放它的尺寸就可以調整比例。
5.Unity動畫曲線 unity曲線面板提供了一些基礎功能,但是卻連複製幀這種常用的功能都沒有,我的解決辦法是將需要複製的幀拖動至動畫的末尾,然後再尾幀之外打個關鍵幀,這樣即可複製出一樣的幀,之後再把幀拖到適當的位置即可(下圖我複製了第二幀)