建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇

潘翔發表於2024-06-11
本文首發知乎,GameRes獲授權釋出。

在上一篇文章中介紹了繫結的基本概念,建立下個時代的高畫質遊戲美術資源生產管線(五):繫結篇-繫結基本概念 ,文末預告了下一篇文章寫表情,這次就來補完表情篇。表情也算國內ACG行業的重災區了,這篇文章就從原理到製作詳細剖析計算機圖形學中的表情是怎麼一回事,看完這個有耐心相信你也能開發一套自己的表情系統。

一、表情捕捉原理

關於表情捕捉的研究在業內也有一些年頭了,最早表情捕捉技術是應用於影視與動畫行業,好萊塢在上個世紀90年代開始在影視特效製作中嘗試使用表情捕捉。隨著技術的發展,表情捕捉技術也開始大規模應用在遊戲,直播,短影片,人臉識別等領域。

表情捕捉的原理很簡單:

  • 在臉上生成一定數量的標記點(landmark),
  • 預設N組標記點座標位置(例如蘋果是52個)
  • 計算當前標記點座標與預設表情標記點座標的差異,也就是兩組座標系的近似值,轉化成權重資訊,對映至0-1範圍。0為完全不匹配,1為完全匹配。這個權重值就是表情係數
  • 用這個權重值驅動虛擬角色的表情動畫曲線。

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇

這也就是為什麼我們看好萊塢的特效大片的幕後花絮中,演員表演的時候會在臉上畫那些標記點。同時為了效果好,我們需要保證攝像頭始終能拍到演員的面部,所以需要一個帶支架的頭盔戴在演員頭上,保證攝像頭能和演員頭部一起運動,始終正對演員面部。

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇

影響表情捕捉效果的關鍵點有兩個,一是表情權重計算,二是虛擬角色的表情動畫製作。如果是實時表情捕捉,權重計算會更加複雜。影視行業的landmark是人工標記的,只服務特定的面孔,可以很方便的對比當前表情標記點位置與預設表情標記點位置的差異(演員事先擺出需要的表情pose記錄下來作為預設)。如果是做泛用性的實時面部捕捉,因為預設表情都是基於標準landmark位置製作的(例如mediapipe的400多個點作為標準landmark),就需要解決不同面孔的差異化問題。人臉相貌的差異會大大干擾捕捉精度,可能經常會把眼睛小的人識別為閉眼....這一點上目前做的最好的是蘋果,但是蘋果的預設表情太少了,只有52個,作為玩具玩玩可以,不能滿足更高要求的表情捕捉效果。

計算表情權重早期比較常見的演算法是用RBF計算,這方面論文很多,這裡隨便貼幾篇:

CN103198508A - 人臉表情動畫生成方法 - Google Patents
https://patents.google.com/patent/CN103198508A/zh

JG2019ysm.pdf (zhiyongsu.github.io)
https://zhiyongsu.github.io/Pub/JG2019ysm.pdf

目前的主流做法是引入機器學習的概念,透過人臉識別給面部進行自動標記,或者使用雙目攝像頭或者紅外線將面部的landmark替換為精度更高的點雲資訊,透過大資料訓練結果來計算表情權重,這方面做得比較好的目前是國內的facegood和epic的metahuman animator。

二、FACS

FACS指表情編碼系統,最早在上個世紀70年代由某位我不記得名字的心理學家建立,用來分析人類情緒。有部知名美劇 lie to me就是以此為靈感創作。現在的ACG行業和計算機圖形學行業主要用這套玩意做表情拆解和重建。

FACS相關文獻非常多,想仔細瞭解可以自己去查,這裡不囉嗦了。

因為人類面部肌肉運動非常複雜,我們不可能把一個虛擬角色能做出所有表情都製作一遍,那樣可能要做幾千個模型,工作量巨大。FACS把人類面部42塊肌肉運動範圍進行了歸納總結,我們可以基於肌肉運動來拆分組成人類表情的最小單元,這樣只需要製作最小几十種肌肉運動單元就可以組合出豐富的表情效果,要想更好的效果可以進一步細化至300——600多個,拆這麼細主要是為了減少表情重疊,這一步主要牽涉到blendshape製作。

三、blendshape拆分

blendshape一般是maya和unity的叫法,max和unreal叫morph target,指的都是同一回事。上篇文章中已經講過不再贅述。與身體形變製作不同的是,表情blendshape的主要製作難點有下面兩個:

  • 保證數字形象表情自然生動
  • blendshape拆分設計

寫實角色保證表情生動的方式很簡單,上掃描。靠美術同學手工雕刻表情不是不可以,但是效率太低,而且效果不可控,表情運動時聯動影響的肌肉皮膚太多,美術功底不夠做出來都很挫,製作成本昂貴。所以一般人工製作流程只用於細節較少的非人形角色和風格化的角色。掃描流程可以看我第一篇關於攝影測量建模的文章。建立下個時代的高畫質遊戲美術資源生產管線(一):攝影測量建模

通常會拍攝30組左右演員的複合表情,然後透過攝影測量重建模型,美術人員再人工修復模型的拓撲,補全細節,修正偏移,保證表情效果的連貫性。做完這些工作,就會進入下一步表情拆分環節。

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇
掃描模型重拓撲

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇
掃描模型匯入ZB

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇
修正後的掃描模型

目前主流的拆分方式有蘋果的52個和虛幻metahuman375(我自己數的,不一定對)個。拆分表情單元主要目的是將面部肌肉塊的運動方向都拆解出來,便於組合。比如眉毛有向上,向下,向內三個方向,根據左右臉區分可以拆分成至少6個表情單元,進一步區分開重疊區域,可以分為眉內,眉外12個。拆分得越細,重疊影響越少。但是重疊影響是無法消除,因為有些表情使用的是同一部位的肌肉,所以當兩個表情同時存在的時候,表情之間會互相影響,尤其是嘴部。metahuman的做法是使用第三個表情修正這個影響,這也是他的bs數量很多的原因。

四、表情傳遞

人的臉型千變萬化,我們不大可能為每個虛擬角色都掃描一套表情來還原這副面孔的表情效果。常見的做法是使用一套基礎表情庫,然後傳遞到不同的臉型上。表情傳遞常見做法有BS傳遞,包裹傳遞,RBF傳遞,拉普拉斯傳遞。

BS傳遞最簡單,將新的臉型作為一個變形目標體新增到舊臉型上即可。這種做法需要保證兩個臉型拓撲一致。演算法就是簡單的加法。

包裹傳遞主要用於不同拓撲的臉型,先將無表情的臉型拓撲成有表情的臉型模樣,然後用有表情的臉型的BS包裹演算法驅動無表情的臉型的形變,儲存下每個表情,在變形回原始模樣,本質上和BS傳遞是一回事,只是多了個包裹驅動的步驟。為了能得到比較好的包裹驅動結果才需要把兩個臉型的外觀修改到一致。

RBF傳遞:基於RBF演算法傳遞表情,重新計算每個頂點位置,通用性高,也可以適用於不同拓撲的模型,確定是不準。

拉普拉斯傳遞:與RBF一樣都是基於演算法重新計算頂點位置。比RBF效果更準,缺點是隻能用於相同拓撲。

目前也有用機器學習訓練表情傳遞的,這個領域我不大熟,就不班門弄斧了。

所有的表情傳遞方案都無法解決表情效果與真人的吻合問題,要完全還原真人表情必須為每張臉單獨做一套。

metahuman使用的是最簡單的BS傳遞。

五、表情修正

表情修正主要用於處理表情疊加現象,這也是得到良好的表情捕捉效果非常重要的一環。蘋果的52個表情沒有處理表情疊加,這也是他上限比較低的原因之一。虛幻的metahuman花了大量精力處理表情疊加,所以能得到比較好的表情驅動結果。

舉個簡單例子可以說明表情疊加的現象。我們製作了一個張嘴的表情,這個時候我們又引入了一個吹氣的表情,那麼現在的表情就是張嘴+吹氣,會疊加出不正常的姿勢,這樣的結果顯然不是我們想要的,這個時候我們就要想辦法修正這個狀態。

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇
張嘴

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇
吹氣

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇
張嘴+吹氣,疊加出不正常的唇形

metahuman的做法比較暴力,當A表情與B表情同時存在並出現了不正確的表情狀態時,引入一個修正表情C表情修復這個情況。修正表情是人工製作的,這樣做效果最好但是製作起來也最繁瑣。因為需要遍歷所有表情單元的疊加狀態並手動製作修正表情。疊加狀態並不是只在兩個表情單元之間存在,也可以多個表情單元同時疊加,這是一個巨大的工作量。metahuman修正表情的驅動方式為表情A權重*表情B權重=表情C權重值。metahuman一共製作了70多個修正表情。

我們也可以用資料驅動方式修正,將表情BS轉成骨骼,遍歷每個骨骼位移的最大值,然後限制骨骼位移的最大值。這樣當兩個表情值同時存在時候,疊加值不會超過正常範圍。不過這樣只能防止一部分疊加現象,我們還是要手動修正一些表情疊加。比如人不能在鼓腮幫子的時候同時張嘴,那我們為了防止出現這樣詭異的表情資料,就需要人工進行一些權重過濾,在故腮幫子的表情權重變大的時候同時縮小張嘴權重。做法也很簡單,用1減去這個係數即可。1-鼓腮幫子=張嘴

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇
錯誤的鼓腮幫子表情,張嘴+鼓腮出現了不好的疊加結果

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇
正確的鼓腮幫子表情,鼓腮=1,張嘴=0

表情修正是適用於所有表情方案的。雖然蘋果的面捕方案沒有提供表情修正功能,但我們可以自行增加表情數量提高蘋果的表現上限。

六、3lateral與snapper

3lateral與snapper都是業內做遊戲表情與實時表情捕捉比較知名的公司。國外有很多這種專注細分領域的公司,所以國外的3A產業鏈相對健全,遊戲開發公司不用花大量精力處理與遊戲內容無強關聯的技術,需要的時候只用購買其他產業鏈環節上的公司研發好的成熟方案即可。國內遊戲行業缺少這樣中介軟體供應商,遊戲美術外包只能提供簡單的模型或動畫製作服務,無法解決複雜的技術美術問題。所以國內公司往往需要投入大量成本自行消化這些和遊戲設計無關的複雜技術,無謂的增加開發成本,效果還不好。因為不可能做到別人幾十年如一日的深耕細分領域的專業程度。更可悲的是思想上的落後,這些並不是什麼遊戲開發的技術壁壘。大部分國內公司的領導和管理層卻意識不到這些技術都是可以買的。

3lateral就是epic收購的技術供應商,在為虛幻引擎製作了siren demo後,epic直接收購了3lateral團隊為虛幻引擎開發metahuman方案。我們從3lateral的早期方案中可以看到metahuman的影子。

十多年前,xbox的首發護航大作羅馬之子的表情方案就是3Lateral提供的。演示如下:

Ryse Facial Performances - YouTube
https://www.youtube.com/watch?v=reByZLSncco&t=3s

我們可以從控制器設計和骨骼分佈看出,十多年前3L的方案就和現階段的metahuman幾乎沒什麼區別了。

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇

基礎思路就是骨骼負責表情驅動,blendshape負責細節修正。

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇

3L關於羅馬之子表情方案的技術分享:

Stumbling Toward 'Awesomeness'Multi-Resolution Facial Rigging
http://www.chrisevans3d.com/pub_blog/multi-resolution-facial-rigging/

snapper也是一家專注表情與角色繫結的服務商,相信國內不少人看過他們的demo演示:

【繫結】Snappers Facial Rig演示合輯-高階面部繫結演示——就……跪著看唄?
https://www.bilibili.com/video/BV185411G7h5

最近參與的專案是unity的異教徒demo和數字人demo,以及木衛四協議中的主角,負責其中數字人主角繫結和表情。

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇

snapper的繫結方案與3lateral剛好相反,bs負責表情驅動,骨骼修正細節。BS的拆分邏輯與蘋果的52個表情一致,只是細化成了660個bs。

snapper一套表情繫結收費大概rmb30萬,這是兩年前我們給他們發外包時的報價,現在不知道有沒有變過。

七、metahuman拆解

虛幻的metahuman正在成為行業角色方案標準,metahuman提供了一套簡單易用的角色自定義生產方案和自動化的表情生成方案。讓使用者可以以極低的成本解決數字形象的生產和表情驅動問題。但是metahuman也有一些問題導致使用者用起來不是很順手,比如必須使用metahuman的拓撲網格,角色造型不夠好看,不符合亞洲人的審美習慣,表情庫是基於歐美人建立的,套在亞洲臉型或者唯美臉型上都有些怪異。另外不能自定義身體,無法修改身材,只能用他那個7頭身的角色,腦袋捏出來總會大一圈等等....所以要想把metahuman系統用到商業化生產中,需要進行一番改造。

在上篇文章的背後,我說了要對metahuman進行詳細拆解,描述如何從0開始製作一套metahuman或者snapper的表情繫結系統,徹底拋棄UE的DNA節點限制並實時驅動。這裡就來分析一下metahumen是如何設計的。

metahuman的面部blendshape只是干擾項,並不負責面部表情運動,只是用來彌補骨骼沒有做到的表情細節。肌肉的擠壓拉伸,皮膚褶皺這些。

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇

metahuman的真正表情是這些曲線,資料記錄在dna節點中,有些作用不大,但還有70多個修正表情曲線是隱藏在dna節點中的,只有兩個表情同時存在時才被使用。

建立下個時代的高畫質遊戲美術資源生產管線(六):表情篇

一部分曲線是用來驅動細節bs的,作用不大

  • 第一步我們需要掃描角色的面部表情。我們採集了30個面部表情,然後處理,這是我們的基礎表情庫,用來替換metahuman的表情庫
  • 第二步基於FACS拆分表情。因為是復刻metahuman,直接使用他們的拆分規範就可以。需要提取出metahuman的所有表情曲線,轉成blendshape動畫,基於我們的臉型建立和metahuman一摸一樣的骨骼,然後使用ssdr解算骨骼權重和動畫。看不懂的部分可以看我以前的文章。
  • 第三步將所有metahuman表情存成骨骼動畫,在引擎裡轉為poseasset。
  • 第四步用藍圖重寫一遍DNA的驅動關係,這樣可以完全乾掉DNA節點。unity和blender也可以使用。

DAN的驅動關係其實比較簡單,主要是三大類,第一是每個表情的資料,metahuman在dna節點裡儲存的是每個骨骼對應表情的座標,轉化為曲線讀取。所以我們可以直接用poseaset代替。第二個是控制器的驅動關係,這個也很簡單,控制器係數曲線驅動表情動畫pose曲線,maya裡直接搬過來就行。要是覺得metahuman控制器不好用可以自己換一個。第三個是修正表情的驅動,這個比較麻煩,要手動檢查。逐個復現表情之間的疊加和修正關係。

梳理清楚metahuman的設計邏輯,我們就可以用自己的表情庫替換metahuman表情庫,並且擺脫模型拓撲、引擎的限制,將metahuman應用到所有的引擎和DCC軟體中。也可以對meta human進行擴充套件,增加實時面部修改,身體修改等功能。

總結

簡單來說,表情捕捉如果想準確驅動數字形象的面部表情,那麼他的表情權重係數計算規則和虛擬形象的表情繫結方案必須是是高度耦合的。也就是透過標記點計算出的表情係數需要與虛擬形象拆解出的表情單元完全對應,蘋果是52套landmark座標對應52個表情模型,如果想實時驅動metahuman的表情,至少需要建立258個landmark座標預設,與metahuman的258個基礎表情一致.人臉識別,建立臉部landmark標記點,表情權重係數計算屬於演算法部分,數字角色的表情拆分,驅動關係建立,表情修正屬於美術部分。演算法決定了表情驅動效果,反過來,表情單元的拆分又定義了表情標記點的位置規範。只有演算法和美術完美結合,彼此都知曉對方的工作內容,工作原理,才能開發出完美的效果。

下一篇寫動作捕捉,對遊戲開發技術有興趣的也可以加群908353590交流

相關閱讀:

建立下個時代的高畫質遊戲美術資源生產管線(一):攝影測量建模
建立下個時代的高畫質遊戲美術資源生產管線(二):材質與紋理規範——場景篇
建立下個時代的高畫質遊戲美術資源生產管線(三):細節與質感
建立下個時代的高畫質遊戲美術資源生產管線(四):角色服裝篇
建立下個時代的高畫質遊戲美術資源生產管線(五):繫結篇-繫結基本概念


原文:https://zhuanlan.zhihu.com/p/656107400

相關文章