MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

遊資網發表於2024-04-07
導語:在今年的遊戲開發者大會(GDC 2024)上,來自騰訊遊戲的專家持續帶來前沿分享,圍繞AI、渲染、跨端遊戲開發、動畫等遊戲技術應用及遊戲製作,引發同業關注。本文為“MotorNerve:一種使用機器學習的角色動畫系統”分享的圖文版乾貨內容。

分享嘉賓:
李松南 騰訊互娛天美F1工作室Machine Learning Team副總監
廖宇辰 騰訊互娛天美F1工作室資深引擎開發

大家好,我是來自騰訊遊戲的廖宇辰。我和我的同事李松南將與大家分享我們如何在角色動畫中應用機器學習。讓我們開始吧!

本次分享的主題MotorNerve是一個使用機器學習的角色動畫系統的名字。我們期望使用機器學習技術來提升動畫效果、生產效率和執行效能

我們有一個非常有才華的團隊,也非常感謝團隊成員的付出。這裡我要介紹下天美J1F1工作室,是我和松南所屬的工作室。MotorNerve這項技術也會被應用在工作室的產品中例如QQSpeed和NFS:Mobile。

一、Motion Matching

好了,讓我們深入我們的演講!演講將分為兩個部分:一部分是基於改進的Learned Motion Matching的行走動畫,另一部分是基於我們自研的動畫間補技術的互動動畫。

以下是第一部分的大綱:首先,我將介紹一些基於Motion Matching的動畫最佳化方法和工具。然後,我將討論Learned Motion Matching 和 Base Motion Matching(或簡稱為LMM和BMM),並解釋為什麼我們在Motion Matching中使用機器學習。最後,我將分享一些我們為效能最佳化所做的工作。

眾所周知,Motion Matching是一項很成熟的技術,通常用於Locomotion。這裡有兩個我們完成的Locomotion Demo,可以看到動作很連貫流暢。為了實現這樣的效果,我們實現了一些方法和工具來打磨動畫。接下來我會簡單談談如何實現他們。

我們都知道Motion Matching在執行過程中會在不同的動畫片段中來回切換,從而影響動畫的完整度和連續性。所以我們在Motion Matching的演算法中增加了一些策略,例如允許增加動畫跳轉時的cost,或者跳轉時遮蔽附近的幀等等,來避免不合理的動畫跳轉讓整個動畫更流暢。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

另外玩家操作角色移動的時候,大多數情況下動畫與邏輯的軌跡是會有一定誤差的。比如這個影片裡,黃色的是玩家操作的目標軌跡,紅色箭頭是MM匹配出來的動畫的軌跡,還是偏差比較大的。我們實現了一套動態軌跡修正的功能,可以自動修正動畫的軌跡讓他貼近玩家操作的目標軌跡,綠色箭頭就是結果。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

另外我們提供了強大的編輯功能和除錯工具來幫助我們快速完成動畫的打磨工作。右邊是我們的除錯工具,能夠錄製每一幀並且顯示Motion Matching的匹配細節,幫助我們快速分析出讓動畫表現更好的辦法。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

前面介紹了我們如何打磨動畫表現,接下來讓我們來談談我們為什麼要使用機器學習。使用傳統的Motion Matching(我們稱之為 Base Motion Matching)可以進行快速的開發迭代,但如果放在遊戲執行時則有一個不可忽視的問題就是:高品質的動畫會需要巨大的動畫量,從而帶來很高的記憶體佔用,這通常是不可接受的。

而基於機器學習的Learned Motion Matching則可以很完美的解決這個問題,但LMM的缺點是開發困難。每次你簡單修改了一些引數並且想看結果都必須等模型訓練,通常需要花費數個小時甚至更多,所以我們應該怎麼辦?一個可行的辦法是我們在開發階段使用BMM,並且在執行階段使用LMM。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

所以有一個很重要的事情就是LMM和BMM的動作表現必須一樣,為此我們做了大量的工作。可以看到這個影片,左邊是LMM,右邊是BMM,幾乎看不出區別。另外我們也測了一些客觀資料以及做了主觀雙盲實驗,都說明我們的LMM的表現能對齊BMM。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

另外之前的LMM方案無法實現曲線和Notify功能,這會導致很難實際應用在遊戲中。我們實現了這個功能,能自動處理動畫曲線和notify。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

好了,現在來談談效能。Learned Motion Matching演算法雖然在記憶體方面令人滿意,但CPU耗時方面不太理想,這也導致了很難應用在遊戲專案中。我們對LMM的推理架構進行了改進,使用獨立於幀率的步進器和非線性策略,使得效能得到了很大提升,並且讓同一個模型能夠應用在不同的幀率下。可以看到右邊的影片中,模型都是在30FPS下訓練的。原始的LMM模型在60FPS下無法正常工作,而MotorNerve則可以。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

另外我們還實現了批處理推理最佳化,能夠使得多人同屏的情況下節約最高50%的CPU開銷。這是我們的demo,實現了160個角色在單執行緒的情況下達到60FPS。很酷對吧?

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

這就是第一部分的內容,我們討論瞭如何使用機器學習來打造一個令人驚歎的Locomotion動畫系統,可以實現流暢、高質量的動畫並具有出色的效能。接下來由我的同事李松南為大家介紹第二部分關於互動動畫的內容。

二、Motion In-Betweening

現在,讓我們深入探討第二部分的內容,即可以用於生成過渡動畫的間補技術。如果您對動畫和機器學習有一些經驗,那麼這將很容易理解。

以下是大綱:首先,我將介紹什麼是動畫間補以及為什麼我們在遊戲開發中需要它。然後,我將介紹動畫間補方法的分類,我們的方法屬於哪個類別,它是如何工作的以及為什麼它比其他方法更好。最後,我將介紹它在我們的互動和位移系統中的應用。

首先,什麼是動畫間補?在左側的影像中,橙色姿勢是關鍵幀,可以由動畫師手動設定。而藍色姿勢是由我們的動畫間補演算法生成的。簡單來說,動畫間補演算法是一種可以根據一些關鍵幀生成中間動畫的方法。這些關鍵幀相對較稀疏,因此使用線性插值不會得到很好的質量。

如今,動畫間補演算法大多基於機器學習。為了生成高質量的中間動畫,它需要從大量的動畫資料中進行學習。右側的影片顯示了我們的方法的結果,這是浙江大學和騰訊遊戲的合作作品,發表於SIGGRAPH 2022。藍色姿勢是由我們的方法生成的。您可以看到動作質量很高,過渡很平滑。

好的。那麼為什麼我們在MotorNerve專案中使用動畫間補?在影片遊戲中,我們可以使用動畫間補的至少兩種場景。第一種是互動動畫的過渡,第二種是位移動畫的過渡。

在本演講的第一部分,我的同事介紹了位移動畫。行走是角色活動的重要組成部分。但除了行走之外,角色還可能需要進行互動,即與環境中的物體或其他角色進行互動。為了實現這一點,通常我們需要一個過渡,將角色的狀態從位移轉變為互動。我們可以使用動畫間補來進行這個過渡,如左圖所示。

第二,行走本身具有不同的狀態,例如行走、奔跑、衝刺、朝不同方向移動等等。我們可以使用動畫間補來生成這些不同行走狀態的過渡,如右圖所示。在後面討論應用時,我將詳細介紹。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

首先,讓我介紹一下動畫間補方法的分類。從現在開始,我將使用MIB作為動畫間補的縮寫。一般來說,有離線MIB方法,可以在DCC工具中離線生成動畫,如右圖所示。輸入是當前幀f1和目標幀fn。離線方法一次性生成所有中間幀,如圖所示,這通常需要很長時間,因此無法實時在遊戲中使用。另一方面,我們還有線上方法,可以逐幀生成中間幀。如果模型足夠高效,它可以實時在遊戲中使用。我們的方法屬於這個類別。它具有相對較低的複雜性,因此既可以線上在遊戲中使用,也可以離線在DCC工具中使用。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

這是我們方法的概覽圖。簡單來說,它以當前幀、目標幀和這兩幀之間的差異作為輸入,並在潛在空間中生成下一幀的特徵。然後使用解碼器解碼特徵,生成下一幀的姿勢。然後將輸出幀用作輸入幀,重複這個過程,直到結束。

我們使用變分自編碼器將下半身的運動編碼到潛在空間中,然後在這個高質量運動的潛在空間中進行取樣。這是我們的方法比其他方法實現更高質量的關鍵因素,尤其是在減少腳滑動方面。我們可以比其他方法減少50%的腳滑動。受時間限制,我認為我無法清楚地解釋這個複雜的圖表,特別是對於不熟悉深度學習的觀眾。如果您對細節感興趣,請參考我們的論文,如下所列。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

在MotorNerve中,我們在兩個方面擴充套件了論文的方法。我們增加了軌跡控制和幀數預測。

對於軌跡控制,我們不僅可以設定目標幀的姿勢,還可以使角色沿著特定軌跡移動。在左側的影片中,我們僅使用一個幀和一個軌跡來生成這個奔跑序列。

對於幀數預測,我們開發了一種方法,根據當前幀和目標幀的姿勢來預測要生成的幀數。直觀地說,如果目標幀與當前幀相距較遠,我們應該生成更多的中間幀,否則如果目標幀接近當前幀,我們應該生成較少的中間幀。

除了距離之外,其他因素如角色面朝方向、移動速度等也會影響中間幀的數量。在右側的影片中,您可以看到如果我們使用固定數量的中間幀,運動是不穩定的,即有時過慢,有時過快,有時看起來像角色在努力擺姿勢給攝影師拍照。另一方面,如右側所示,如果我們能夠預測出適應輸入的合理數量的中間幀,生成的運動更加自然。

接下來,讓我介紹一下MIB的應用。第一個應用是為互動式動畫生成過渡。過渡是從當前的行走姿勢到即將播放的互動式動畫之間的過渡。

當我們按下按鈕開始互動時,角色通常處於行走狀態,可能處於任何姿勢。通常,我們可以使用動作混合來生成這個過渡,但混合的動作往往線性化,因此不自然。會出現很多腳滑動的問題。從程式設計的角度來看,您可能需要手動設定一些入口點,這很麻煩。相反,我們可以使用MIB來生成過渡動作。如影片所示,它可以用於各種角色與物體的互動,例如坐在椅子上、拾取物品、開啟門、開啟盒子等等。腳滑動較少,過渡自然。您幾乎無法注意到哪部分是過渡動作。

在這些影片中,我們實時在遊戲中使用MIB。在PC上,生成一幀大約需要1毫秒的時間。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

我們還在動作構建器中實現了我們的MIB方法,以離線生成過渡動作。這個影片展示了從靜止到開啟門姿勢的過渡結果。

MIB的另一個應用是用於行走過渡,準確地說,是生成與軌跡匹配的行走動作。除了迴圈動畫,如靜止迴圈、行走迴圈、奔跑迴圈等,還有更多的動畫是這些迴圈動畫之間的過渡,用於將角色過渡到不同的狀態,例如從靜止到行走,從行走到奔跑,或者改變移動方向。

在Motion Matching中,這些位移動畫與控制軌跡的匹配非常重要,否則就會出現滑步的問題。在運動捕捉過程中,演員盡力按照預定的舞蹈動作表來跟隨軌跡,但只能近似地跟隨軌跡。因此,需要進行後期處理來微調這些位移動畫,這需要耗費時間。正如之前提到的,我們的MIB方法可以生成與軌跡匹配的角色動畫。因此,我們可以使用MIB來生成那些與預定軌跡不匹配的動畫。

MotorNerve:一種使用機器學習的角色動畫系統【GDC 2024】

作為一個實驗,我們要求演員在運動捕捉舞臺上自由表演,而不是嚴格按照舞蹈動作表來執行。然後,我們使用這些運動捕捉動畫來訓練我們的MIB模型。最後,使用我們的MIB模型生成與控制軌跡匹配的位移動畫。我們的DCC工具可以在短時間內生成大量的位移動畫,其中大多數動畫具有高質量的運動效果。在下面的影片中,我們比較了使用MIB動畫和使用混合動畫進行轉向運動的效果。可以看到,左側的角色具有腿部在地面上踩踏等細節動作。

好的,這就是第二部分的內容。我們做個總結:首先,MIB是一種基於深度學習的運動生成方法。其次,我們可以使用MIB來生成互動和位移的運動過渡。最後,由於我們的MIB方法具有高效的時間效能,我們可以直接在遊戲中使用MIB,還可以在DCC工具中使用MIB生成離線的過渡動畫。我們相信,基於機器學習的運動生成方法在遊戲開發中將在不久的將來發揮越來越重要的作用。

來源:騰訊遊戲學堂

相關文章