快速實現捏人系統

捏人,是如今各種單機聯機遊戲中常見的功能。

有些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)

TAG:遊戲 | 遊戲開發 | 虛幻引擎 |