最近有在編寫過關於MotionMatching系統(以下簡稱為MM系統)的文章,也有在研究其接入AI控制的案例,腦子裡自然就都是這塊東西。《無限暖暖》開服的時候,大喵給我打了兩個電話(雖然我都沒接),由於白天在忙東西就先把遊戲給下了。晚上進遊戲時候,被狠狠驚豔到了,特別是運動系統,著實不簡單!恰巧跟自己研究的有點關聯,便順便研究一下。
前排提醒:本人既非項目成員也並非疊紙員工,文章將以假設《無限暖暖》使用MM系統的前提下進行講解。所有內容均基於個人見解,如有錯誤敬請諒解。
首先是待機-起步-行走-止步-待機的循環。使用鍵鼠控制,按下移動鍵的時候角色就開始移動/轉向了,粘滯感不明顯。使用手柄控制,點撥搖桿可以看到角色表現出將動未動的情況(第二張圖的鍵盤交互UI是因為剛進遊戲就插著手柄玩,沒進到設置界面該操控方式)。在之前的文章中講述過MM系統可以通過動作輸入對Actor進行預測,進而計算出未來時間點的速度,用於設置動畫切換的條件。當動作輸入不足以驅動角色移動,未能滿足從待機狀態到起步動畫的條件,或者中途中斷了動作輸入,迫使角色從起步動畫返回到待機狀態,即形成了所謂的粘滯感。
然後是我最為稱讚的左右腳起步。先看下面兩張圖
雖然都是起步動作,但若左腳在前就先邁左腳,右腳同理。說明在起步時會根據當角色左右腳的位置關係會選擇使用不一樣的起步動畫。在之前文章有有講述到“‘匹配’,也就是使用數據庫裡的動畫姿勢,與某個給定的參考值進行差異對比,得出差異最小的動畫姿勢就是即將播放的動畫”,但只講述對軌跡進行匹配的例子。當前的情況就需要進行“角色姿勢”的匹配。這需要引入Pose Search Schema與Pose Search Channel(也就是之前講述到的PSS與PSC)資產的講解。 (官方文檔見這裡)
PSS主要作用是配置到PSD中,在進行匹配時,依次對其中設置的各個PSC(通道)與這些通道在當前角色姿勢下的屬性值進行對比,進而選出最優解。以起步為例,起步的PSD的PSS配置了左右腳相對位置的通道,在進行起步動畫的匹配時,對比當前狀態下左右腳的位置信息,若左腳在前,則左腳起步的動畫更容易被選中,反之亦然。(下圖為官方項目中Stop動畫的PSD,根據當前左右腳的相對位置來選用不同的止步動畫)
若存在左右腳區分的起步動畫,那必須配套完整的左右腳區分的待機,止步以及轉身動畫,動畫資產的需求突然暴漲。
MM系統中,角色Actor與角色模型(骨骼體)的旋轉是獨立進行的,當角色模型(骨骼體)播放轉向動畫時,角色Actor在接受到輸入時就已經完成了轉向,因此在製作轉向相關的動畫資產時需要注意根骨骼的運動情況。
MM系統中可以使用RootBone Offset節點實現骨骼體與角色Actor的位置與旋轉偏移。
Setting面板中的Translation Mode跟Rotation Mode適用於設置於骨骼體與Actor的變換關係,可以選擇Accumulate(累積)、Hold(保持)、Interpolate(插值)跟Release(釋放)。個人項目中如圖設置進行設置
Strafe狀態下將Rotation Mode設置為Accumulate即可讓骨骼體保持原來朝向時設置Acotr的朝向為輸入方向,然後按照匹配結果播放相應的轉身動畫。
以上是在Orient to movement模式下的運動,接下來看Strafe狀態下的動畫表現。
Strafe狀態下運動時,腳部保持繼續運動,下半身身體會轉向角色的運動方向。在MM系統中可以使用Orientation Warping節點實現該種效果(官方文檔介紹見這裡)。 當啟用效果時,下半身將轉向運動方向,而上半身依據Spine層級逐層遞減以保證朝向維持一致。
在自己個人案例中進行如下設置:
- 在非Strafe狀態下權重為0,即不啟用效果
- Strafe狀態下,讀取當前正播放的動畫序列的名為EnalbeOrientationWarping曲線值,將其作為啟用節點的啟用權重。若當前動畫資產不含該曲線,但與含有該曲線的動畫進行混合時,其權重也會按照混合程度輸出
對於角色的運動系統先到這裡,然後來看看NPC的運動表現(這裡暫時不討論大喵的運動情況)
NPC起步也有左右腳的區分,只是似乎沒有根據待機狀態下左右腳的相對位置進行選擇。
轉身起步也有對應到左右腳的區分 。
若無針對角色當前姿勢進行匹配,則可以不設置骨骼位置等相關的PSC(或將相關的PSC權重降低),只要當前情況符合轉身起步的PSD的篩選條件,即可找到合適的轉身起步動畫進行銜接。
對需要轉彎的情況,項目採用延長轉向轉彎時間,逐漸插值到目標方向的方案。
個人項目中採用類似的方法在AI角色前進時實時調整方向,但目前只應用在轉彎角度較小的情況上,對於轉彎角度較大的情況個人更傾向使用播放轉向蒙太奇並使用MotionWarping設置骨骼體旋轉的方案。
NPC在正常運動過程中,很少會出現滑步的情況。
到此就是個人對《無限暖暖》運動系統的解析。再次聲明:本文是基於假設《無限暖暖》使用MM系統的前提下進行講解,且文章內容全部基於個人理解,若有錯誤敬請見諒。先不講技術實現,跟後期調整的工作量,單是區分左右腳的動作資產就可以看出製作組在運動系統下了很多心思,就為了製作這些幾乎不被察覺的細節,疊紙你是這個👍,Respect!