MotionMatching 初實踐 2


3樓貓 發佈時間:2024-11-21 20:32:38 作者:提子味芬達 Language

前期提要

如同上一篇文章介紹的設置,角色能正常實現待機——向前起步——行走循環——結束行走——待機多個動畫播放跟切換。(下圖為啟用RewindDebugger的截圖,紅色點及路徑為歷史位置及軌跡,藍色點為預測的位置點與路徑)
當我們旋轉鏡頭時,角色也會按照當前的前向行走,由於轉向速度夠快,我們就感覺角色在沿著圓弧運動,而預測的路徑也會呈圓弧狀。
但當我們嘗試向後或左右方向移動時,那就穿幫了。角色會突然轉向前向方向,然後開始播放起步動畫。
要解決這個問題,那就要先搞懂兩個東西,第一個是:旋轉模式。

旋轉模式

UE裡的旋轉模式分兩種,Strafe與Orient to movement。用法環來解釋就是,褪色者鎖定視角到敵人,褪色者的前向是面向敵人的方向,就是Strafe;褪色者正常行走時,角色的前方是接受到的輸入的方向(就算在輸入前角色的前方是正前方,輸入向後的動作指令,角色轉向後方),就是Orient to movement(由於Orient to movement這一串太長了,後面將簡稱為Orient)。由於我使用的是虛幻默認的第三人稱遊戲模板,其默認設置Orient to movement為真,當角色正前方向與輸入方向不一致時,角色會旋轉至輸入方向。
若將Orient的選項取消,在進行運動測試,會發現角色會以向前起步行走的姿勢進行輸入方向的移動。
這個就很明顯了,因為取消了Orient之後(即Strafe狀態下),角色不會轉向移動方向,自然就保持當前朝向進行移動了。
現在思考一下,如果需要角色在Strafe狀態下(即取消Orient to Movement),向四方移動時能像開頭描述那樣能正常播放切換不同動畫,需要怎麼操作?嗨!直接在PSD里加動畫資產就好啦,反正不同動畫的過渡條件例如未來速度Future Velocity、Speed2D等參數的設置都類似,應該不會出錯的!此乃第二個坑。
以向左移動為例,分別向之前的Start、Jog、Stop的PSD中加入左向起步、行走循環、停止的動畫資產,然後播放場景測試一下。
在向左移動時,能正常播放向左行走的動畫,但是在向前移動時,意外地還是播放向左起步的動畫。
多次播放場景測試,儘管有些時候能正確依照移動方向播放相應的動畫,但仍然會出現搭錯線的情況。這時候就引出了之前說的第二個問題:根骨骼運動。

根骨骼運動

在UE裡,如果一個角色在播放一個末尾位置與起始位置距離很大的不含(或不啟用)根骨骼運動的動畫,那在動畫播放結束時,會看到角色,或者說這個角色的模型,會從末尾位置被拖拽回到起始位置(如下圖演示,圖片來源於虛幻官方文檔
若該動畫包含(並啟用)根骨骼運動,則如下圖所示
可以注意到角色播放動畫結束時,是以膠囊形狀的線框(膠囊體)為位置基準,啟用了根骨骼運動之後,膠囊體會跟隨骨骼體的運動,而常說的角色位置,一般就是說的膠囊體的位置,也就是說,當角色啟用了根骨骼運動後,角色會跟隨帶有根骨骼運動數據的動畫移動。(開始拗口起來了)在動畫資產中需要點選以下選項才能啟用根骨骼運動。
但是在PSD中,明明看到根骨骼運動啟用了呀!(選中的動畫欄中,白色的拖尾箭頭表示啟用了根骨骼運動)
是的沒錯!確實已經啟用了!所以問題就是,這些向左起步、行走循環、停止的動畫,都不包含根骨骼運動數據。以下使用Lyra的動畫資產進行對比。
骨骼樹中選中根骨骼Root,拖動時間軸遊標,注意右邊的Mesh Relative的Location數據差異。
可以看到角色骨骼體在視口位置的差異以及右邊的Mesh Relative的Location數據差異。這是包含根骨骼運動的動畫資產。再看原本機器人的動畫資產(機器人原本材質顏色是綠色的,在上述案例中只是給替換了材質,並無其他設置)。
可以看到機器人的行走動畫並不會真實向前移動,也就是不包含根骨骼動畫數據。
那這個根骨骼動畫,跟MM系統正確選擇動畫資產播放,有咩關係?

關於匹配

回過來看看官方對於MM系統的介紹
官方介紹說“從數據庫中選擇動畫姿勢,在運行時匹配動態系統查詢”。“匹配”,也就是使用數據庫裡的動畫姿勢,與某個給定的參考值進行差異對比,得出差異最小的動畫姿勢就是即將播放的動畫。
在MM系統運行中,角色運動時位於角色前面的軌跡是MM系統基於該角色的運動組件中參數配合運動輸入進行預測的。在機器人的案例中,機器人角色往正前方移動,其預測的軌跡點位於角色正前方,但卻選擇了向左行走的動畫,說明了是“MM系統對預測的軌跡點匹配了錯誤的動畫資產”,將本該向左的動畫姿勢匹配到了向前的運動中。對於預測的軌跡與動畫的匹配,其中重要的因素之一就是根骨骼運動,說白了就是在MM系統中,預測的軌跡與根骨骼的變換趨勢是重要的匹配因素之一
關於匹配的問題展開說的話要涉及到PSS跟PSD的配置,那這裡就直接演示根骨骼的與預測軌跡的匹配吧。新建兩個PSD(因為僅用於測試,所以直接使用默認設置就好,所需要的PSS也可以臨時創建一個套用),一個用於存放機器人的行走動畫,一個用於存放Lyra項目的行走動畫。
這是存放機器人行走動畫的PSD,由於其動畫資產不帶根骨骼運動數據,所以是否啟用根骨骼運動並不影響結果,在預覽窗口中看到四個動畫都擠在原點。
這是存放Lyra項目行走動畫的PSD,其動畫資產帶根骨骼運動數據,因此在預覽窗口中能看到四個動畫能分別向四個方向走開,而不是擠在原點。(窗口中的顏色點、線等可以忽略,那是在PSS中進行設置的,不影響預覽結果)。
當角色向前移動時,其預測軌跡向前,此時運行MM系統,對數據庫中的動畫逐個查詢,以其根骨骼的變換趨勢進行對比,若查詢到某個動畫的根骨骼也向前移動,並且其他特徵差異也最小,那該動畫即將於當前動畫進行過渡直至播放該動畫。

太多字了請看

返回來,我們應該怎麼去解決這個問題呢?答案是,在對這些動畫資產補充根骨骼運動數據前,無法按照官方MM案例的設置實現這個效果(攤手)。
所以搞了這麼久,只有一個實現不了效果的結論。就當是提前認識MM系統的資產準備了,磨刀不誤砍柴工嘛。下篇文章開始將使用Lyra資產重頭構建一個能用的MM系統,又是敲鍵盤的一天咯。

© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com