快速實現捏人系統
捏人,是如今各種單機聯機遊戲中常見的功能。
有些3A大作的捏人功能細緻入微,玩家DIY空間很大
而即使是獨立遊戲,捏人系統也能起到避免「克隆人」現象,減少美術成本的效果
先說原理部分
原理其實很簡單,將需要改變的頂點們綁定到特定的捏人骨骼上,遊戲中再根據玩家保存的數據實時修改骨骼的Scale、Translation和Rotation。
難點主要在蒙皮,也就是美術的工作量上,常常要對特定的頂點進行權重調整。
不過好在每個單獨的部位需要調整的部位頂點數較少。
由於時間精力限制,目前我只對眼睛、鼻子、嘴巴、臉頰、下頷這幾個部位進行了操作。
(差點忘了還有一個屬性叫發色,顏色調整放在後面說吧)
如圖,我其實是在Head層級下弄了個Bone001,然後Bone001下面創建不同的骨骼延伸到需要捏的部位附近(以後可能用於表情動畫),而最下方的實際捏人骨骼實現得比較簡單,一個部位對應一塊。
以鼻子為例,就是離骨骼最近的幾個點權重弄成1,外圍部分權重衰減。
而左右眼、左右臉頰就要注意對稱問題了。
遊戲中修改骨骼當然是在動畫藍圖中進行了
在這之前我定義了個叫FNierenData的結構體,
除了性別,只出現了float,FRotator,FVector三種數據類型,並且在聯機中每個Character的NierenData需要進行數據同步,保持與LocallyControlled的一致。
存檔、讀取部分我用了UE4的SaveGame類,目前每個存檔文件只存儲了一個FNierenData類型的變數。
下面是UI部分了
值得注意的是由於捏人過程中角色播放Idle動畫會動來動去,所有我加了個暫停/播放按鈕,可以按需使用。
左下角是相機相關
當然用的相機是我自己新建了個繼承於Camera的bp_NierenCamera類
每幀根據MyTarget、MyRotExtra、MyTargetLength調整Location和Rotation就行了。
右側是ScrollBox加上了一隊TextBlock和SliderBar。
以嘴部X軸縮放為例
當然剛載入後也要設置SliderBar初值
最後講一下發色部分,
要實現修改頭髮相關最好在建模時頭髮和身體其他部分就是分離的
原發色到黑色的過渡比較簡單,直接在材質顏色節點乘上1~0效果就不錯了
到白色的過渡就是當前R、G、B值和1、1、1之間都進行Lerp,問題也不大
至於其他顏色,紅綠藍之類的色調修改問題還是不大的,要更好的效果的話可能需要單獨繪製頭髮貼圖,不同貼圖進行插值。
至於髮型修改,就和換裝差不多了,分別建模、蒙皮的工作量還是比較大的,以後我在介紹換裝原理的文章再提吧。
推薦閱讀:
※遊戲製作流程ver0.8
※如何打造細緻的2D捏臉系統
※遊戲開發之伺服器技術選型淺析
※讓角色半透明:樹形結構(三)
※《伏龍記》ea實錄(week4)