天天看點

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

作者:GameRes遊資網

以下文章來源于騰訊遊戲學堂 ,作者騰訊遊戲學堂

導語:在今年的遊戲開發者大會(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生成離線的過渡動畫。我們相信,基于機器學習的運動生成方法在遊戲開發中将在不久的将來發揮越來越重要的作用。

繼續閱讀