熱門
Unity:揭秘數(shù)字人制作流程
數(shù)字人、虛擬形象的開發(fā)逐漸成為了新興的技術議題,,除了用于虛擬真人類形象,,數(shù)字人的開發(fā)技術也能讓角色表情更加生動,并且與觀眾互動,。近期,,Unity 技術團隊制作了一個數(shù)字人Demo,很多業(yè)內(nèi)人士都對此表示很有興趣,。
在Unity技術開放日-上海站上,,Unity技術美術團隊和技術團隊就為大家介紹了這套基于 Unity的數(shù)字人生產(chǎn)流程。本文截取了其中的重點內(nèi)容,,如果你對數(shù)字人感興趣不妨繼續(xù)讀下去,。
“關于數(shù)字人臉部動畫的制作,我們是用手機蘋果 ARKit 方法進行面部表情捕捉的,?!?a class="insidelink" href="http://shcjtec.com/Item/69424.aspx" target="_blank" title="Unity">Unity TA團隊的講師Michael說道。
關于面部表情捕捉,,這其實是另外一項技術,,需要搭配蘋果手機并使用Face Cap app軟件,,面部表情捕捉可以提供更高精度和細節(jié)的面部表情。通過使用 FBX 文件導件,,可以用左邊的白模把動作移動到角色上,。
有關虛擬人創(chuàng)作主要分為兩個主題,一個是渲染,,一個是流程,。接下來讓我們看看渲染部分的內(nèi)容。
虛擬人頭發(fā)渲染
渲染這里首先要做的第一件事,,就是用機器掃描一位真人,。
Unity最近發(fā)布了全新的頭發(fā)系統(tǒng)?;绢^發(fā)制作流程是用Maya X-gen來做頭發(fā),X-gen主要工具也是現(xiàn)在很多影視團隊的選擇,。之后再導到Unity里,,生成tfx文件并在Unity里做頭發(fā)的渲染。這套頭發(fā)工具集成了AMD的頭發(fā)技術,,所以格外逼真,。
在設置我們可以將不同的配置進行分組,每個配置文件都可以調(diào)細節(jié),。頭發(fā)工具共分三個主要區(qū),,一個控制頭發(fā)生成,一個控制頭發(fā)動態(tài),,最后一個控制頭發(fā)顏色, 美術師可以設計自己的組, 另外發(fā)尾部分的寬闊度也是可以動態(tài)調(diào)整的,。
Unity將頭發(fā)系統(tǒng)集成到HDRP(高清渲染管道)的頭發(fā)材質(zhì)里,用頭發(fā)黑色素物理參數(shù)調(diào)出喜歡的發(fā)色,,也可以用Dye Color直接加入一個你想要的任何顏色,。
虛擬人制作流程
整個過程很簡單,首先要根據(jù)FaceCode標準掃描極限表情,,由模特在光場設備里做出那些表情,,并被拍攝下來。剩下的事就是關于模型清理工作了,,目前這部分也可以交給AI 算法來做從而實現(xiàn)節(jié)省人力的目的,。
當我們清理出模型之后便需要開始做BlendShap(以下簡稱BS)拆分,關于這一部分方法有很多,。FACS 在理論上人支持60個極限表情,,從解剖學上講,這60個表情可以非線性地組合出任意表情,。但是我們做表情對話時,,沒辦法只用60個表情就做出所需的所有表情。因此,這就涉及到BS拆解過程了,。拆解的數(shù)量,,與用戶想追求的精度相關,也跟成本相關,。在此項目中僅僅掃描了45個有代表性的極限表情,,并拆分出了300多個BS。
有些算法有可能會進行重復拆解,。實際上BS和BS不是完全疊加而回歸到極限表情,,它可能有些加和減的關系。如果AI將BS拆解成這樣時就可能需要人為進行修正,。比如一個嘴唇往下的動作是幾個 BS 的組合,,但是有一個BS是凹進去的,那么這個凹進去的就需要人為進行修正,。因為這些極限表情和別的表情組合的時候會出問題,。出現(xiàn)這種問題的時候,就需要人為進行修正,,因此自動拆的算法還需要演進,。
我們可以把表情貼圖簡單地劃分為表情和微表情。表情上結(jié)構(gòu)性的變化需要做在模型上,,有些因為結(jié)構(gòu)性變化而產(chǎn)生的擠壓的紋理性變化的話,,則需要做成貼圖。貼圖是Winkle Map,,它是一 Normal的表情貼圖,,在不同表情間可進行切換,一張臉上往往會有五六張Winkle Map,。
其實在掃描之后的數(shù)據(jù)是要把眉毛和一些眼睫毛從Map上去掉的,,因為在做重拓撲和修模型時,這些都是噪聲,,是不需要的,;但這些東西又在渲染時會用到。因此需要先進行刪除,,然后后面再把這些部分給加回去,。像在此項目中,眉毛是用插片的方式來做的,。
流程上還有修貼圖,,除了Winkle Map,還有一個Blood Flow Map(血流圖),,當你臉皺起來后,,因為收擠壓,,某個地方的血流圖會發(fā)生改變,那么這個地方的顏色會變深,,這個表現(xiàn)在微表情中,,也算在貼圖中。所以關于微表情的貼圖有兩套,,Winkle和Blood Flow,,這是比較常規(guī)的操作。
這里是我們發(fā)現(xiàn)可以繼續(xù)迭代的地方,,修模型的部分,,如果有足夠的美術資源,其實是不用考慮算法的問題,。
修完模型,,拆完BS之后一般會做Rigiging 和模型Capture,因為用戶最后想要的是快速生產(chǎn)高質(zhì)量的表情動畫,。在Rigging中,,相信大家一定會遇到一些這樣的情況,比如Retargeting,,這是因為不是模特去驅(qū)動他自己,而很可能是別人去驅(qū)動他,,所以一定會有 Retargeting,;還有就是Secondary Geometry 、Dynamic Winkle與Blood Flow,,但是現(xiàn)在Unity目前還沒做到Dynamic,。目前本項目是在Shader中實現(xiàn)的,有關需要哪些貼圖,,讓貼圖對應表情等等一系列工作目前都是由用戶自己來處理的,,但這些簡單枯燥的工作后期相信會有一些以AI的方式來實現(xiàn)。
關于模型Capture ,,目前有兩個方案,,用一些第三方提供的高精度結(jié)果去驅(qū)動模型。在這個項目中,,Unity團隊通過ARKit或者谷歌開源的AR core里face的model來做特征提取,,從而驅(qū)動模型。但是模型capture也有可以迭代的地方,,如果我們以Marker Based來驅(qū)動的話,,后期就可能會需要修改一些Marker Tracking有問題的地方。如果用戶選擇自己做或者買第三方的Motion Capture設備也是可以的,。因為有頭盔的話就可以做更高質(zhì)量的模型capture,。
最后有關數(shù)字人的生態(tài)流程還有幾個問題,,一個是真人掃描數(shù)據(jù)的處理,就是模型的重建,,那就會牽扯到算法的事,;一些掃描得不太好的地方要修;還有就是貼圖的重建,。項目中出了剛才提到的兩張貼圖 Winkle Map 和 Blood Flow Map,,其實我們還有一張?zhí)峁╊伾膱D,Color Map?,F(xiàn)在的設備都有偏正光,,所以它會給你偏正的結(jié)果,但是實際上用戶也要去做類似Delighting 的事,,才能夠得到一個沒有光照的結(jié)果,。
還有就是關于faceCode的掃描數(shù)據(jù),目前我們能見到的虛擬人都是這樣做的,,就是模特去表演faceCode里的表情,。做完之后進行BlendShap、Winkle Map,、Blood Flow Map以及Face Rigiging的制作,。而目前Face Rigiging 沒有一致的標準,基本上是用戶自己定義標準,,能實現(xiàn)一個合理的,、容易做動畫的搭建就可以了。如果沒有高質(zhì)量的模型capture前提下,,做動畫很多時候還是需要人工手動修出來的,,所以Face Rigiging這一步非常重要。
表情驅(qū)動會有一套控制器,,人臉上有很多點,,這里是參考 Unity 國外團隊做《異教徒》項目的那一套來做的。傳統(tǒng)做動畫的方式就是上文中提到的以人工修幀為主的方式,,還有面部驅(qū)動的方式,,下一步Unity還將在這些流程之中試著加入一些AI的算法來優(yōu)化整體流程。
下圖是通過掃描得到的模型,。我們可以清晰的看到在圖中有這樣那樣各種問題,。就是說我們雖然也是非常高精度的攝像機,基本攝像機有三套,,一個負責顏色,,一個負責光學,還有一個負責高速攝像,,這三套相機可以提供人臉重建的非常高面素的mesh,,但是拿到的 Geometry 也會有這樣的問題,,就比如像我們拿到的頭是左邊那樣子的,但是模型的眼睛基本上全部壞掉了,,這就需要建模師把它給手工修出來,。還有耳朵也有可能是壞掉的,總之,,掃描出來的模型會有很多壞掉的地方,,這就是修模型時候后期要處理的事。
在修完模型之后,,我們需要將模型重拓撲到一個合適的 Layout,,還有就是上文中提到的掃描出來的模型也會提供Normal的貼圖。貼圖里有什么東西呢,?這里其實也有一個值得迭代的點,,就是這個貼圖的使用率,實際上現(xiàn)在有很多做影視的公司,,他們其實都在要求高分辨率的貼圖,,比如16K的貼圖。但正是因為精度不夠,,實際上貼圖的 layout 是不太好的,。
制作表情,需要遵循以下步驟:
第一步,,是先Remove掉那些我們不想要的Geometry,,這里包含上文中說到的眉毛、眼睫毛這些,,還有一些噪點,,因為它掃出來的那個面素是一個巨大的開銷,,所以我們需要清理掉它,。
第二步,在清理掉它之后,,我們需要重拓撲,,現(xiàn)在大家重拓撲都會用3D軟件來做。
這里我們加Subdivide base mesh的原因是因為清理之后有一些地方需要增加細節(jié),,比如眼皮的地方,,如果是雙眼皮,一定是把它給疊起來的,,因為在將來做動畫時一定會有閉眼的時候,。所以在眼皮處的Mesh的段數(shù)要加多一些,然后再去掉一些噪聲和進行一些細節(jié)處理就可以了,。
電話:010-50951355 傳真:010-50951352 郵箱:[email protected] ,;點擊查看區(qū)域負責人電話
手機:13811546370 / 13720091697 / 13720096040 / 13811548270 /
13811981522 / 18600440988 /13810279720 /13581546145