編者按:不僅從外表看起來仿若真人,而且為你笑而開心,為你哭而悲傷。虛擬人的數字世界和人類世界的鴻溝似乎正在慢慢縮小。未來,人類會和虛擬人「談情說愛」嗎?技術發展永無止境,這個問題留待未來回答。在這篇文章中NExT聯合AI Lab分享虛擬人Matt AI的「情感」誕生之路。
11月20日,布裡斯班當地時間下午4點,虛擬人Matt 和AI技術聯手,亮相SIGGRAPH Asia 2019 Real-Time Live!舞臺,完成了一次精彩的演繹。SIGGRAPH是計算機圖形學領域最具影響力的會議,其中Real-Time Live!挑選並現場展示當年最具創意和技術實力的實時Demo,被標定為SIGGRAPH的必看環節。NExT和AI Lab的三位同學聯手展示了虛擬人Matt在不同情緒下被多種語言驅動的實時Demo。Matt AI在SIGGRAPH現場(向右滑動)
在2018年GDC遊戲開發者大會現場,NExT聯合Epic,3Lateral等公司推出高保真虛擬人Siren,這成為當時實時虛擬人的行業標杆。隨後我們嘗試給Siren插上AI的「大腦」,亮相當年的SIGGRAPH Asia。今年,更進一步,NExT內部工作室(in-house)自主製作了男性虛擬人Matt,結合AI技術,將語音驅動的虛擬人推進到「情感表達」的新階段。
在Siren AI項目中,我們試圖為高保真虛擬人Siren加上AI的「大腦」,與人進行自然的交互。但試驗過程中發現,我們雖然能夠訓練出精確的口型驅動模型,且在訓練數據中含了虛擬人全臉的控制器,Siren的表情依然很「木訥」,在交互中,遠沒有動捕演員那麼自然。
所以,今年我們為Matt AI項目設立了兩個目標:
一、首先in-house自主完成一套高保真虛擬人的研發,品質不輸Siren;
二、同時,讓這個虛擬人能夠在語音驅動時,具備「情感」表達的能力。
為了完成第一個目標,我們要在3Lateral掃描數據的基礎上,獨立進行LookDev的全流程開發;為了讓虛擬人具備「情感」表達能力,我們需要建立一套精確的面部動捕流程,完成不同情感下的動作捕捉,用以訓練不同情感下的語音驅動模型。下面分別介紹這兩部分的工作。
渲染和動畫是虛擬人製作的兩項關鍵技術。首先要讓靜態人臉模型在虛擬LightStage不同的光照下和真實LightStage裡拍攝的照片儘可能一致,然後通過迭代優化Rig邏輯,訓練動捕跟蹤和解算器,實現接近真實的表情動畫。
渲染方面,我們的首要目標就是要使虛擬人和真人視覺上一模一樣,電影行業裡的LookDev就是實現這一目標的製作流程。下圖對比展示的就是LookDev的結果。
虛擬人Matt(左邊臉)
Matt本人(右邊臉)
在3Lateral塞爾維亞的工作室,我們掃描了模特Matt本人,通過Photogrammetry,生成了Matt的幾何模型。同時,通過不同表情下掃描的照片,我們得到各種貼圖,比如:漫反射貼圖、高光貼圖、法線貼圖等。儘管有了這些「物理正確」的數據,在UE裡重現照片級真實的(Photorealistic)渲染效果依然是個挑戰。大家都知道,Siren項目結束後,Epic將虛擬人的材質開放出來,但這並不能讓新做一個虛擬人輕鬆達到Siren品質,原因在於掃描數據來自真實的相機和燈光,對於不同的皮膚,會有不同的視覺效果,而在渲染引擎中,針對不同的虛擬人,模擬真實的相機,光照以及皮膚不是一件一勞永逸的事。
為了減少變量,我們基本延用了Siren項目中的相機和燈光,以真實照片為標準,大膽地修改了3Lateral提供的原始貼圖,使最終渲染效果逼近真人的照片。做出這個決定是一個糾結的過程,我們在項目早期認為掃描獲得「物理正確」的貼圖,但是在LookDev過程中無論怎麼調節相機和燈光,也做不到和照片一樣的結果。我們對比分析了原始照片和貼圖,發現3L在貼圖處理過程中有不少問題,於是決定自己修正貼圖。下面有幾個貼圖修改的例子,基於法線貼圖,我們修正的貼圖增加了皮膚細節。
頭髮製作是另外一個挑戰。Siren是黑色頭髮,馬尾辮,相對好做,而Matt是棕色的短髮,要做到照片級真實,相對困難。在電影行業,普遍使用XGen生成頭髮細絲,但隨之也帶來一個問題:面數太高。為了能實時渲染我們的角色,我們在確保頭髮效果儘可能不變的情況下,做了髮絲的減面。XGen可以設置全局頭髮段數,這會導致頭髮的面數超標。
為了解決這個問題,我們將頭髮分成不同區域,每個區域內的段數分別設置,這樣就能大幅降低頭髮的面數,且不降低頭髮整體效果。
減面以後,只有35萬個三角面
另外,我們採用了Hair Cards和Hair Curves結合分層建模的方案。
兩層模型疊加的效果
為了不使頭髮看上去過於稀疏,避免頭皮穿幫,頭髮的第一層用HairCards做基礎造型,每個面片和頭髮的每一簇對應,保證與真實頭髮造型一致。第二層是頭髮的主要表現層,用hair curve 來製作一絲絲的頭髮。第二層做了三套UV ,分別是控制頭髮自身顏色變化的UV1 、控制頭髮之間顏色差異的UV2 、頭髮AO對應的UV3,如下圖所示:
第二層頭髮材質opacity test,頭髮邊緣會有鋸齒狀,所以最後加上一層半透的頭髮絲,以保證頭髮的邊界不會產生明顯的鋸齒狀,使頭髮看上去更柔和,下面是三層頭髮的渲染效果。
我們對Siren頭髮的散射效果也做了改進,實現了雙邊散射光照模型,並且做到實時。
針對皮膚渲染的性能問題,我們對SSS(Subsurface Scattering)算法做了性能優化,在不損失效果的前提下,將原來兩個pass,優化到了一個。
2 Pass
Matt的動畫綁定主要分為三個部分:臉部綁定,頭髮綁定和身體綁定。臉部綁定和Siren類似, 3Lateral基於表情掃描數據提供了一套Rig,但我們發現這套綁定不是想像中的那麼完美,需要我們的綁定師和3Lateral經過多輪反饋迭代,一起把Rig提升到最終質量。
對於頭髮綁定,由於頭髮面數很高,按照傳統的逐頂點去刷權重是不現實的,因此我們首先把骨骼權重刷在一個低模的多邊形上,然後通過工具把權重自動映射到頭髮的頂點。實時驅動的時候,從動捕中獲取控制器的值,轉換成3Lateral API能接受的控制器的值,然後通過Rig Logic翻譯成底層的blend shape的權重,以及骨骼的旋轉和位移,最終驅動虛擬人臉,生成豐富的表情動畫。在Matt AI Demo中,語音驅動的動畫不涉及眼睛,因此眼睛部分我們用了Procedural Look-at,使虛擬人在說話頭動時,眼睛始終看著Camera,看上去更真實。
在Siren AI項目中,我們實現了用聲音實時驅動虛擬人,雖然我們可以準確的驅動口型,但是面部表情還是不夠自然,虛擬人只是保持中立情緒說話,缺少了多樣化的情緒,整體缺乏真實度和感染力。因此,我們想在Matt AI項目中聯合AI Lab,進一步探索,是否可以在實時語音驅動的基礎上,讓虛擬人能表達出不同的「情感」。
第一步,我們需要構造高質量訓練數據集,這是訓練語音驅動模型的基礎。和訓練Siren AI類似,有了Matt的面部Rig之後,我們就可以通過改變這些控制器來驅動虛擬人的臉部。具體來說,Rig面板包括100多個控制器,每個控制器對應0-1範圍的浮點數,100多個浮點數構成了動畫幀。和Siren AI不同的是:Matt AI驅動模型的輸入端加了情感標籤,用於控制情感表達。
Matt AI訓練過程的示意圖
為了採集情緒數據,我們準備了不同類型的臺本,要求演員用不同情緒準確、自然地去朗讀這些臺本。這些情緒包括高興、難過、生氣和中立等。在朗讀過程中,我們同時使用面部捕捉和身體捕捉去採集數據。具體的,面捕方面,我們使用動捕頭盔錄製演員的面部運動視頻(60fps),然後Rigger會使用這些數據,為該演員的每種情緒製作特定的解算器,將不同情緒的面部運動視頻解算為虛擬人Matt對應的面部Rig控制器。這些控制器的數值,也就是後續語音驅動模型想要處理的目標。身體動捕方面,我們使用光學動捕設備,記錄下演員頭部、身體在內的全身動作,並將動捕數據重定向到虛擬人Matt上。
在保證了音頻和視頻數據在時間軸上嚴格對齊之後,我們構造了一個長約20個小時、13,339條語句的,包含語音、面部運動和身體運動的多模態訓練數據集。輸入樣本為:從視頻中提取的每一條音頻數據和對應的情感標籤,輸出樣本:為該音頻數據對應的面部控制器運動序列和身體關節運動序列。下圖是視頻捕捉和驅動的示意圖:
演員表演的視頻畫面(左)
虛擬人被驅動的結果(右)
下圖為身體動作捕捉和驅動示意圖:
有了數據之後,我們和AI Lab開始合作訓練驅動模型。Matt AI的驅動目標是自動生成不同情緒的面部動畫。為了讓模型能夠學習到語音和不同情緒面部動畫的映射關係,不同於去年的Siren AI語音驅動模型,我們的Matt AI模型在輸入上增加了一個情感標籤來增強模型的處理能力,輸入空間的維度增加可以使得一個模型能夠處理多組映射關係。此外,因為我們的虛擬人Matt仍然有著很高的保真度,並且以60fps進行實時渲染,為了匹配這樣精度的虛擬人,我們的語音驅動模型也必須具有較高的準確性和魯棒性,否則語音驅動的Matt很容易陷入「恐怖谷」。
為了準確地學習語音和面部動畫控制器之間的映射關係,Matt的驅動模型考慮了以下幾方面:
1) 基於多人帶噪聲的語音數據集合語音識別模型提取了PPG(phonetic posterior grams)語音特徵,該特徵在一定程度上滿足了說話者無關的特性,從而增加了語音驅動模型的魯棒性,並使得任何人的聲音都可以高質量驅動Matt;又由於我們的模型基於語義識別提取了因素級別的語音特徵,因此除了中文之外,我們的語音驅動模型允許使用英語、日語、法語等不同語言來驅動虛擬人Matt,這大大增加了Matt AI的應用場景。
2) 採用雙向LSTM模型,在進行控制器數值預測時考慮了輸入語音的上下文環境,一定程度上解決了語音的Co-articulation效應,也讓Matt的口型動畫更加接近真人。
除了帶情緒的面部運動,相比Siren AI,Matt AI的另外一個探索是嘗試用語音驅動虛擬人的身體運動,包括頭部和上下半身的關節。雖然身體的運動不如面部運動和聲音有著很強的相關性,但我們認為在某些場景下,身體運動仍然存在和說話內容的相關性,比如播報新聞時抑揚頓挫的說話節奏和頭部、手的運動模式。因此,我們模型在預測面部運動控制器的同時,也嘗試了預測頭部和上半身運動。處理目標為Matt身體模型中每個關節的運動信息,具體的是每個關節的三個歐拉角數值。但這種端到端預測關節運動的方式,目前的結果還不是很理想,表現在頭部運動幅度過小,手部運動和說話節奏匹配得不好。
我們分析目前結果不好的原因:
1) 在訓練數據採集上。雖然我們要求演員儘量模仿新聞主播來朗讀臺本和做動作,但無法保證運動模式非常清晰。同時,由於retargeting到Matt的身體運動數據數量太大,我們並沒有逐條進行手動清洗和修正,因此數據當中也存在噪聲,這一定程度也會影響模型的訓練。2) 在模型設計上。與面部運動相關的語音特徵和驅動身體運動的語音特徵很大程度上並不相同,那麼就需要設計新的子網絡或者引入新的信息來有效提取語音數據中的特徵,從而學習更加準確的聲音-身體映射關係。關於這個問題,我們仍在繼續探索中。感謝騰訊AI Lab在Matt AI研發過程中的大力支持