發(fā)布時間:2024-04-13 17:51:49 瀏覽量:261次
原創(chuàng) 幻星數(shù)字人團隊 嗶哩嗶哩技術(shù) 2023-07-28 12:00 發(fā)表于上海
收錄于合集
#實時渲染1個
#虛擬制作1個
#B站119個
本期作者
Paladin
嗶哩嗶哩技術(shù)專家
怪盜基德
嗶哩嗶哩資深開發(fā)工程師
KayPlus
嗶哩嗶哩資深開發(fā)工程師
AI醬
嗶哩嗶哩資深開發(fā)工程師
一 背景簡介
1 幻星數(shù)字人簡介
,時長00:07
幻星數(shù)字人風(fēng)格展示
幻星數(shù)字人是天工制作部聯(lián)合人工智能平臺部虛擬人算法組打造的3D數(shù)字人解決方案,主要由工業(yè)化數(shù)字人智能生成管線+AI驅(qū)動的表情與動作捕捉系統(tǒng)兩部分構(gòu)成。如上圖所示,渲染風(fēng)格涵蓋卡通/游戲CG/古風(fēng)/超寫實等,能夠兼容市面上大部分主流審美。目前支持的上游業(yè)務(wù)包括3D數(shù)字人直播,虛實融合的內(nèi)容創(chuàng)作投稿,平臺級用戶虛擬形象專項,3D虛擬禮物,3D虛擬偶像IP孵化等。行業(yè)中對標的競品包括網(wǎng)易伏羲虛擬人平臺,百度希壤數(shù)字人平臺,騰訊超級QQ秀,快手KVS虛擬演播助手等。
幻星數(shù)字人整體的技術(shù)思路是依托UE/Unity等頭部商業(yè)引擎工具鏈和渲染架構(gòu),針對業(yè)務(wù)需求進行源碼級別的二次開發(fā)與平臺化改造,實現(xiàn)跨平臺多模態(tài)的數(shù)字人內(nèi)容制作方案。目標有兩個:一是降低內(nèi)外部PGC創(chuàng)作者在虛擬制作方向上的成本和門檻,提供更高效的上下游工具鏈和豐富的資產(chǎn)模板。二是逐步向UGC內(nèi)容方向進行滲透,以“為B站每個用戶提供一個虛擬形象“為切入點,撬動用戶在虛擬世界進行自我展示,內(nèi)容表達的欲望,從而拉動虛擬內(nèi)容在供給側(cè)的效能,為整體的虛擬生態(tài)帶來消費增量。
本文將重點介紹人資產(chǎn)生成管線的技術(shù)方案與細節(jié),著重分享真實感渲染,角色個性化定制,物理仿真等行業(yè)難點問題在幻星側(cè)的解決思路。也非常歡迎各位前來建聯(lián)溝通,業(yè)務(wù)合作和技術(shù)交流。
二 打造具有行業(yè)競爭力的
實時虛擬角色制作管線
1 兼顧品質(zhì)與性能的虛擬人渲染系統(tǒng)
1.1 真實感渲染
1.1.1 三千煩惱絲,一絲勝一絲-虛擬人頭發(fā)渲染的技術(shù)方案
頭發(fā)渲染面臨的技術(shù)挑戰(zhàn)主要分為幾何結(jié)構(gòu)和光照陰影兩部分:
目前行業(yè)中相對比較成熟的寫實發(fā)型建模方案主要分為兩種:一種是傳統(tǒng)3A游戲中大量使用的基于頭發(fā)插片的Hair Card模型,典型案例如《最后生還者》《神秘海域4》等,在低配機器或移動端上,該方案會進一步退化成純Mesh模型,以降低渲染開銷。另一種是近幾年隨著軟硬件性能不斷提升,各大廠商基于發(fā)絲發(fā)束的Strand-Based模型,提供更好的物理效果和光影視效,典型案例如AMD的TressFx, Nvidia的HairWorks,UE5的Groom方案等。下圖結(jié)合幻星虛擬人的具體業(yè)務(wù)需求,對這兩類方法進行三個維度的對比。
Hair Card/Mesh | Strand-Based Hair | |
模型制作 |
|
|
光影效果 |
|
|
性能 |
|
|
下圖可以直觀對比Hair Mesh 和 Strand Based兩種方式下的初始頭發(fā)模型形態(tài)。
Hair Mesh 白模 Strand Based 白模
在數(shù)字人直播領(lǐng)域,特別是移動直播間/PC游戲直播間等場景,對性能有較高要求,我們采用以Hair Mesh為主的降級策略來進行模型制作。而在虛擬偶像,虛實融合的投稿視頻制作中,為了提升效果表現(xiàn),幻星虛擬人則是圍繞Strand-Based方案打造了對應(yīng)的升級方案。下文將分別詳細介紹兩種方案的著色步驟與技術(shù)細節(jié)。
Strand-Based 頭發(fā)渲染
直接上PBR來渲發(fā)束:硬邊問題,光影粗糙
Multiple Scattering優(yōu)化后,層次感立體感提升明顯
目前寫實方向上,行業(yè)里主流的渲染方案是基于PBR(Physically-Based Rendering)著色模型來構(gòu)建的,用來渲染場景,道具,衣服等常規(guī)物體是游刃有余的。但在基于發(fā)束的人物頭發(fā)模型上,由于特殊的物理結(jié)構(gòu),通用方案無法獲得較高的渲染質(zhì)量,如上左圖所示,硬邊,高光不成型,缺乏立體感等問題非常明顯。經(jīng)過對Frostbite在Siggraph19上分享的發(fā)束渲染方案的研究,我們引入了新的渲染流程,如上右圖所示,在光影層次和立體感上有了較大的提升。那么我們是如何一步步優(yōu)化成上圖的究極形態(tài)呢?為了解決這個問題,我們先要理解真實頭發(fā)的物理結(jié)構(gòu)。
理解真實頭發(fā)物理結(jié)構(gòu)
毛小皮:毛表皮的最外層結(jié)構(gòu),由扁平細胞交錯,呈魚鱗片狀,從毛根排列到毛梢,包裹著內(nèi)部的皮質(zhì)。
毛皮質(zhì):毛皮質(zhì)占毛發(fā)成分的75%至90%,由柔軟的角蛋白構(gòu)成,對頭發(fā)受光表現(xiàn)有著比較大的貢獻。
毛髓質(zhì):位于頭發(fā)的中心,細胞集合體以一至二并排呈立方體的蜂窩狀排列著,內(nèi)部是空心的空狀結(jié)構(gòu)。和毛皮質(zhì)一起影響了頭發(fā)的散射、透射效果。
通過對頭發(fā)真實構(gòu)造進行觀察,我們發(fā)現(xiàn)造成頭發(fā)像稻草的主要原因有二。
首先在于傳統(tǒng)的頭發(fā)渲染方式,只考慮到了表層的反射,而忽略了光線在皮質(zhì)層中的散射和光線與多根頭發(fā)間交互的復(fù)雜形態(tài)。
并且一根發(fā)絲往往小于一個像素,且有多根頭發(fā)堆疊在同一個像素中的情況。如果直接通過傳統(tǒng)的光柵化填充像素,則會造成頭發(fā)過硬。
因此,針對這些問題,我們采用了更貼近頭發(fā)真實構(gòu)造的物理建模,將頭發(fā)渲染拆成了單次散射、多重散射和可見性計算三個部分,下文會分別介紹各部分的具體實現(xiàn)。
發(fā)束光照著色的主要步驟
發(fā)束光照計算主要分為下圖所示的三個步驟:單次散射->多重散射->可見性計算
單次散射
僅描述單根發(fā)絲受光照的影響,不考慮頭發(fā)間的相互作用。常用的是Marschner Model,模擬了頭發(fā)在遠距離下的觀察效果,沒法很好的模擬近距離下的發(fā)絲。
直接上PBR來渲發(fā)束:硬邊問題,光影粗糙
單次散射效果:頭發(fā)光影細膩一些
從上圖對比可以看出,單次散射的效果明顯比PBR更具有頭發(fā)的質(zhì)感。
單次散射通常按光路拆成3部分進行獨立計算,最后結(jié)合成最終的渲染效果。
由于性能原因,光照在近似圓柱的發(fā)絲上,可拆成沿著發(fā)絲生長方向(M項)和發(fā)絲圓周方向(N項)的乘積,通過頭發(fā)表面粗糙度、吸收因子以及頭皮傾斜角度作為影響因子來計算。
其中N項的TT路徑分布函數(shù)通過一張LUT圖做了近一步的簡化。
多重散射
Single Scattering Only With Multiple Scattering
多重散射增加了光線在多個發(fā)絲之間的相互作用。通過上圖對比單次散射和多重散射的效果可以看出,右圖的多重散射提升了頭發(fā)顏色飽和度,還原了更真實的光影層次,提升了頭發(fā)整體的立體感。
多重散射的核心思路是采用局部散射+全局散射來實現(xiàn)對多次散射的模擬。局部散射只需要渲染點附近區(qū)域參與計算,而全局散射要通過考慮沿著光照方向或者陰影方向來計算散射,因此需要一種沿著光線方向計算頭發(fā)厚度的方法。這里采用了Deep Opacity Maps,通過深度對頭發(fā)進行切片,每片分別生成一張陰影貼圖,最終來計算光照透射、衰減等效果。
多重散射示意 發(fā)絲可見性示意
發(fā)絲可見性
我們根據(jù)Mesh和Strand-Based特性,采用不同的可見性計算策略。
Strand-Based
Strand-Based由于發(fā)絲細,小于一個像素,且發(fā)絲間有大量疊加區(qū)域,如果采用傳統(tǒng)的處理方式,在發(fā)絲tessellation時輸出的面片寬度提升到pixel-size,就會看起來特別粗糙,像干草一樣。
這里通過引入Visibility-Buffer的方式進行優(yōu)化。
V-buffer不同于延遲渲染的G-buffer,它在燈光屏幕空間像素點內(nèi),存儲了實際場景發(fā)絲信息的地址,通過地址映射到一個發(fā)絲數(shù)據(jù)結(jié)構(gòu)上,這個結(jié)構(gòu)可以通過V-buffer里的場景地址索引到,因此就可以得到當前這個像素實際上所有發(fā)絲的信息,比如發(fā)絲的數(shù)量、深度、透明度、覆蓋在后邊的發(fā)絲地址,結(jié)合這些信息可相對正確的計算出發(fā)絲的可見性。
Visibility-Buffer數(shù)據(jù)結(jié)構(gòu)示意
Hair Mesh
Hair mesh則有兩種方式來優(yōu)化頭發(fā)模型層次的可見性,分別是透明剔除和半透渲染
透明剔除
通過透明貼圖mask,結(jié)合alpha test來剔除,其中有兩問題需要解決。
為了解決上述兩問題,我們通過引入一系列技術(shù)組合拳來平滑發(fā)絲邊緣和降噪。
優(yōu)化前, 噪聲多,鋸齒明顯,效果粗糙
優(yōu)化后,噪聲過濾明顯,邊緣平順,鋸齒
半透明渲染
半透明頭發(fā)渲染最大的挑戰(zhàn)是如何正確的進行排序,我們嘗試了以下兩種方式來解決該問題。
這兩種處理方式的區(qū)別主要在美術(shù)制作流程上。前者半透是單層,美術(shù)制作時比較簡單,往往用于不太復(fù)雜的頭發(fā)造型,比如單層薄劉海波波頭。后者半透是多層,制作時比較復(fù)雜,用于復(fù)雜多層的頭發(fā)造型,比如多層卷大波浪。我們根據(jù)頭發(fā)造型的復(fù)雜程度選擇更適合的制作方案。
頭發(fā)成型高光-天使環(huán)
在計算頭發(fā)高光時,我們遇到下面的問題,可以很明顯的看到頭發(fā)高光分布不均勻,且高光太細。
高光分布不成型 環(huán)狀高光分布
CG風(fēng)格需要我們呈現(xiàn)形狀分布美觀的高光,直接使用Marschner的反射層計算天使環(huán)形狀的高光時,容易出現(xiàn)頭發(fā)高光碎和亂的現(xiàn)象,為此我們使用了Kajiya模型來替換Marschner算法的高光計算部分??梢钥吹缴嫌覉D是經(jīng)過Kajiya算法計算的“天使環(huán)“高光區(qū)域。
那么如何估算正確的法線方向,以制作上圖這種分布均勻美觀的高光?Kajiya光照模型中將頭發(fā)假設(shè)成光滑圓柱體,過副切線的起點并且與副切線和光線共面,可以找到唯一的一條法線,我們使用這條法線就可以計算出一個近似的高光。這樣就解決了圖中圓柱體法線朝向各異的問題。
法線方向示意
為了使得高光規(guī)則有形狀,我們還需要對頭發(fā)面片制作工藝有要求。首先是設(shè)計上盡可能保證頭發(fā)面片的完整且平滑,減少碎發(fā)和復(fù)雜造型,比如留出大片平順劉海。之后在模型制作上,相鄰片的布線盡可能連續(xù),這樣計算出的切線平整,高光規(guī)則。最重要的一點,在DCC軟件中,為設(shè)計師提供和引擎中相同的頭發(fā)高光環(huán)境,使得設(shè)計師在制作發(fā)片時就能所見即所得的調(diào)整面片來控制高光形狀。
1.1.2 膚如凝脂 面如白玉-虛擬人皮膚渲染技術(shù)方案
皮膚的真實感渲染一直是人物渲染領(lǐng)域的難點之一。真實世界人體皮膚構(gòu)造復(fù)雜,由絨毛、油脂、表皮、真皮以及其下各種血管、組織組成,且皮膚表面還包含了毛孔、油脂等許多微妙的視覺特征。人的視覺對臉部皮膚的細節(jié)非常敏感,質(zhì)量較低的皮膚效果容易產(chǎn)生“恐怖谷“效應(yīng)。此外,在實時渲染領(lǐng)域,除了追求渲染質(zhì)量外,也需要考慮到平臺算力的限制。因此,如何兼顧品質(zhì)和性能是研發(fā)過程中的一大挑戰(zhàn)。
方案初期,我們曾嘗試使用通用PBR模型來直接渲染皮膚,如下左圖所示,整體效果塑料質(zhì)感明顯,缺少皮膚的通透感。通過調(diào)研行業(yè)主流的次表面材質(zhì)方案,我們采用了符合幻星數(shù)字人風(fēng)格的SSP(Subsurface Profile)渲染方案,如下右圖所示,在鼻尖,鼻翼,下頜線等關(guān)鍵臉部結(jié)構(gòu)位置,皮膚的通透感和光澤度有較為明顯的改善。下面我們將介紹實現(xiàn)的原理和細節(jié)。
PBR方案,塑料感,缺乏皮膚通透感
次表面優(yōu)化后鼻尖鼻翼/下頜線處通透有光澤
渲染技術(shù)方案
首先,我們對皮膚的物理結(jié)構(gòu)進一個簡單的剖析。
實驗測試表明,皮膚表面油脂層主要貢獻了反射部分(約6%的光線被反射),而油脂層下面的表皮層和真皮層則主要貢獻了次表面散射部分(約94%的光線被散射)。如果沒有了次表面散射部分,那么皮膚則過于生硬。對于皮膚來說,光線穿過油脂層進入表皮層和真皮層后,在其內(nèi)部不斷傳播,散射到不同方向,其中一部分會再次穿過表面被觀察到,這種現(xiàn)象稱為次表面散射,最直觀的解釋就是光在皮膚表面反射的位置,和光實際的入射點位置不一樣。
皮膚次表面散射結(jié)構(gòu)示意圖
擴散剖面
那么,要怎么實現(xiàn)次表面的散射效果呢?我們引入擴散剖面來解決這一問題。擴散剖面(Diffusion Profile)是用來描述光線如何在半透明物體中進行擴散和分布的函數(shù)。相當于一個記錄次表面散射細節(jié)的“地圖”,通過這個“地圖”我們就能快速的索引到周邊像素需要使用什么程度的散射。
當我們假設(shè)皮膚材質(zhì)各項均勻其散射行為和角度無關(guān)時,就可以用一個一維函數(shù)來描述。對于不同的材質(zhì)RGB根據(jù)距離衰減的行為是不一樣的。
顏色剖面示意圖
上圖為在黑暗密閉空間中,使用白色薄激光束打到一個平坦表面時,產(chǎn)生的光暈效果。其中邊緣光暈是紅色的,由此我們可以發(fā)現(xiàn)每種顏色都有自己的剖面。
我們可以將其繪制成一維曲線,發(fā)現(xiàn)擴散剖面具有很強的顏色相關(guān)性:紅光比綠色和藍色散射得更遠,而正因為紅色擴散得更遠一些,所以耳朵和鼻子的部位通常會更有紅彤彤的感覺。
在計算次表面時,我們考慮下面兩種部分。
皮膚渲染方法,通常就是對擴散剖面的不同近似。
高斯擬合
實驗數(shù)據(jù)表面,結(jié)合皮膚真實構(gòu)造進行建模,6個高斯函數(shù)結(jié)合可以得到相當高精度的擬合效果。
6個高斯函數(shù)擬合參數(shù)和函數(shù)圖
早期的實時3s(次表面散射)技術(shù)采用的是屏幕空間方法,針對上邊列的6個高斯函數(shù),需要12個pass來渲染,性能開銷十分大。因此,針對這一問題,有兩種解決方案。一種是可分離次表面散射技術(shù)(Separable Subsurface Scattering),俗名4s,還有一種是Pre-Integrated Skin(基于預(yù)積分的皮膚著色技術(shù))。在PC平臺的中低端設(shè)備上,我們主要以4S技術(shù)為主來簡化計算,而針對移動端和web端,我們則考慮通過預(yù)積分的方法來進一步壓縮計算開銷。
可分離次表面散射
可分離次表面散射皮膚效果
4s技術(shù)(可分離次表面散射),極大的優(yōu)化了3s的效率。使得原先需要進行的6次高斯函數(shù),12個pass的計算,壓縮成了1個高斯函數(shù),2個pass,將皮膚次表面渲染時間壓縮到0.5ms內(nèi),我們在pc端選用的就是可分離次表面散射技術(shù)。
那么他是怎么壓縮高斯函數(shù)的呢?先拋出個問題,根據(jù)高斯函數(shù)特性,1個2維高斯雖然可分離,但是6個2維高斯和卻是不可分離的,除非使用6*2個1維卷積 Pass 但仍然十分耗性能。
基于上述問題,業(yè)界有幾種解決方式:
(需要注意的是,如果不把高光拆開,代入模糊中則會出現(xiàn)星形異常高光現(xiàn)象)
通過該方案,設(shè)計同學(xué)可以通過調(diào)節(jié)ssp資源參數(shù),來控制角色皮膚實際照明應(yīng)該散射的距離、次表面顏色以及離開對象后照明的衰減色等效果。在一些算力比較充沛的機型上,我們引入Burley次表面散射模型,他在物理上更為精確,主要用于改善皮膚著色的質(zhì)量。
Burley Normalized Diffusion
4s方案已經(jīng)能夠滿足絕大多數(shù)效果品質(zhì)需求了,但是他的擬合形態(tài)還和真實皮膚存在小誤差,有沒有什么方式可以更近一步的減少誤差呢?
Burley于2018年提出了 Burley Normalized Diffusion方式來近一步擬合真實皮膚擴散剖面。該方案放棄物理,直接用純數(shù)學(xué)(一個數(shù)學(xué)公式)的方法擬合 diffusion profile。
下面先上下兩種方式的對比圖,主要差別在于 Burley Normalized Diffusion方式更接近真實物理??梢钥幢穷^處差別,4s方式模糊過了,burley方式更清晰。
可分離次表面散射皮膚 Burley次表面散射皮膚
那么該方案具體是怎么做的呢?要從下面這個公式開始說起。
其中A 是 Surface Albedo(或者說單散射 Albedo),d 是用來控制這條曲線的參數(shù),r則是距離半徑。
上圖是Burley在論文中使用的Surface Albedo和Diffuse Mean Free Path Length著色模型參考數(shù)據(jù)。為了簡化近似復(fù)雜度,舍棄了模型中原本的入射光的角度,介質(zhì)本身是否 isotropic等特性。
我們通過調(diào)整 d,來讓整個近似的曲線可以根據(jù) A 的變化達到正確的近似結(jié)果。那么d值的計算方式怎么來的呢?我們可以根據(jù)上面的曲線算出一張 d 表,然后根據(jù)實際的 A 值插值出求出 d。這樣做雖然有誤差,但從結(jié)果來看,范圍大概在 4.9% 左右,是一個很不錯的結(jié)果。除了查表以外,還可以使用簡單的函數(shù)來擬合出 A 和 d 的對應(yīng)關(guān)系。
我們使用Burley模型在一些高配置PC或離線制片上,中低端配置PC還是采用4s方式。
Burley模型的特點在于
預(yù)積分的皮膚渲染
4s和burley在移動端、web端上由于耗時大,幀率一直不太理想,直接上PBR性能好但是又太塑料,那么有沒有一種方式在效果折損在可接受的范圍內(nèi),在這些看重性能的平臺上流暢運行呢?
針對這個問題,我們采用了預(yù)積分的皮膚渲染技術(shù)。通過下圖可以看到,低配版預(yù)積分皮膚雖然效果略差于高配版皮膚,但顯著優(yōu)于直接用pbr渲染。
Burley次表面散射皮膚 PBR皮膚 預(yù)積分的皮膚
預(yù)積分方案最大的優(yōu)勢就是速度快,主要的應(yīng)用場景還是在移動端、web端上,此方案其實是一種從結(jié)果反推實現(xiàn)的方案。
將次表面散射的效果預(yù)計算成一張二維查找表,參數(shù)分別是dot(N,L)和曲率。其中N是法線,L是光照方向。實際皮膚計算時,通過查表的方式,通過法線、光線方向、表面曲率即可直接取sss結(jié)果。該方案的效果不如4s和burley的,皮膚表面通透感差些,但是勝在性能好,在低端機如小米7上耗時也在1ms內(nèi)。
1.1.3 眉蹙春山,眼顰秋水-虛擬人眼球渲染技術(shù)方案
背景
生物學(xué)的眼球解剖圖非常復(fù)雜,涉及的部位數(shù)十種,在圖形渲染領(lǐng)域,將眼球構(gòu)造做簡化,只關(guān)注其中的幾個部位。
1 - 鞏膜(sclera):也稱為“眼白”,通常非常濕潤,包含少量的觸感紋理、血絲等細節(jié)。
2 - 角膜緣(limbus):角膜緣存在于虹膜和鞏膜之間的深色環(huán)形。有些眼睛中的角膜緣更為明顯,從側(cè)面看時往往會消退。
3 - 虹膜(iris):虹膜是圍繞在眼睛中心周圍的一圈色環(huán)。
4 - 瞳孔(pupil):瞳孔是眼睛中心的黑點。這是一個孔,光線穿過這個孔后才會被視網(wǎng)膜的視桿和視錐捕捉到。
5 - 角膜(cornea):角膜是位于虹膜表面上的一層透明的、充滿液體的圓頂結(jié)構(gòu)。
眼球的渲染
眼睛的渲染通常包括以下效果部分。
幻星虛擬人眼球渲染效果示意圖
眼神光
角膜的反射部分,就是我們常說的眼神光,我們將光照結(jié)果直接烘焙成matcap貼圖,實際計算中,通過將法線轉(zhuǎn)換到相機空間對貼圖進行采樣,從而模擬眼神光。為了更真實的效果,我們還給眼神光疊加了層周圍環(huán)境的cubemap,來使得眼睛更加有神。
采用該方案而不是實時計算物理光照的原因有兩種,一是性能,還有一種是效果的穩(wěn)定性。效果穩(wěn)定性主要體現(xiàn)在角色的眼神光要保持穩(wěn)定的形狀,如果是物理光照,場景往往不止一盞光,且光的位置不一,會造成眼神光特別雜和亂。
折射和散射
瞳孔的折射和次表面散射部分,是由眼睛結(jié)構(gòu)產(chǎn)生的。瞳孔的結(jié)構(gòu)可以概括為一個有縱深的高低不平的區(qū)域,瞳孔與角膜間存在間隔。這使得光線在此處會發(fā)生折射,且光線還會進一步在瞳孔結(jié)構(gòu)內(nèi)部發(fā)生次表面散射。
光線在進入瞳孔內(nèi)部組織前,首先會在角膜表面發(fā)生一次折射,然后進入瞳孔組織的內(nèi)部,產(chǎn)生散射,最后從瞳孔表面的另一個點散射出來。
我們面臨如下兩個問題。
為了解決這些問題,我們采用了次表面紋理映射技術(shù),主要為了解決多層厚度不均勻的材質(zhì)次表面層的計算。
該方案核心在于將眼睛根據(jù)深度的差異分成多層,每層的散射參數(shù)分別存在貼圖的一個通道中,通過當前眼睛像素分別位于哪一層取得具體的散射參數(shù)來參與眼睛散射的計算。
折射部分可以采用視差貼圖或者IOR來計算。
2 角色個性化的核心功能:捏臉與換裝
2.1 基于面部骨骼驅(qū)動的捏臉系統(tǒng)介紹
捏臉系統(tǒng)的目的是滿足用戶的個性化需求,業(yè)界常見的捏臉方案有兩種:
幻星數(shù)字人基于骨骼驅(qū)動的方式實現(xiàn)了捏臉/捏人系統(tǒng)。骨骼驅(qū)動相比于Blendshape方案,設(shè)計師制作工作量較少,且有著更好的性能,但是捏臉的精細程度受骨骼數(shù)量/權(quán)重限制。
幻星數(shù)字人捏臉工具界面
為解決骨骼驅(qū)動方案可控性較低的問題,需要設(shè)計師在有限的骨骼數(shù)量下,設(shè)計好捏臉項,并為每個捏臉項配置好控制的骨骼以及參數(shù)范圍。而這個配置過程需要反復(fù)調(diào)試、驗證,極其消耗設(shè)計師的時間。為此我們配套開發(fā)了捏臉配置工具,設(shè)計師可以在該工具上直觀的配置每個捏臉項所控制的骨骼和參數(shù)范圍,并直接看到捏臉效果,降低了設(shè)計師與開發(fā)的溝通和反復(fù)調(diào)試成本,縮短了制作周期。
骨骼捏臉參數(shù)配置工具鏈
幻新數(shù)字人還支持實時面捕驅(qū)動。表情動畫方面我們使用Blendshape來實現(xiàn),按照蘋果ARKit52個表情基為規(guī)范制作。然而在捏臉骨骼驅(qū)動的基礎(chǔ)上再疊加Blendshape容易出現(xiàn)異常穿幫現(xiàn)象,如眼睛無法閉合或者過度閉合等。為了緩解該問題,一方面需要控制好捏臉與動畫Blendshape的程度,另一方面我們提供了表情動畫系數(shù)與捏臉參數(shù)關(guān)聯(lián)的配置,面捕驅(qū)動過程中會實時根據(jù)當前的表情Blendshape系數(shù)調(diào)整捏臉參數(shù)。
BS系數(shù)優(yōu)化前 BS系數(shù)優(yōu)化后
除了基于骨骼驅(qū)動的捏臉修改臉部外形,切換妝容,如唇妝、面妝、美瞳等功能也提供了更多的個性化選擇。
妝容配置界面
2.2 分部件可定制換裝系統(tǒng)介紹
換裝本質(zhì)上是切換網(wǎng)格體(Mesh),由于幻星數(shù)字人還支持塑形和半身驅(qū)動,因此需要使用骨架網(wǎng)格體(SkeletalMesh),并保證服裝的基礎(chǔ)骨架與身體骨架保持一致。
我們一開始僅對服裝進行了部件拆解,如上裝、下裝、鞋子等,代碼中使用枚舉對其定義并固定了服裝類型間的互斥規(guī)則。設(shè)計師需要嚴格按照身體模型大小制作服裝,以免與身體模型發(fā)生穿模。然而這樣無法滿足設(shè)計師對有緊身部位的服裝需求,在緊身處服裝可能與身體模型大小一致甚至更小。
原始方案:部分服飾無法匹配身形
為滿足設(shè)計師靈活的服裝需求,我們對身體模型也進行了拆分如軀干、手臂、手、腿、腳等,換裝時需要根據(jù)規(guī)則將重疊的身體部件隱藏。由于身體部件的拆分,換裝規(guī)則更加復(fù)雜,我們設(shè)計和開發(fā)一套更加靈活的換裝系統(tǒng),方便配置換裝規(guī)則。我們使用GameplayTag來定義身體和服裝部件,因為GameplayTag是樹形結(jié)構(gòu),相對于枚舉更直觀的描述部件間的父子結(jié)構(gòu),方便完成復(fù)雜的匹配、檢測、互斥等功能。每一件服裝都需要為其配置好部件Tag以及覆蓋的身體部件,運行時會根據(jù)該配置完成換裝。換裝整體流程為,首先根據(jù)新服裝的配置,將覆蓋/沖突的身體/服裝部件卸載;再加載設(shè)置上新的服裝部件;最后還需要對身體部件復(fù)原,如長袖上衣時卸載了手臂部件,切換到無袖上衣時需要將手臂部件復(fù)原。
服裝部件配置
同時該配置上還可配置服裝可選的材質(zhì),以支持更換材質(zhì)/顏色等功能,滿足用戶個性化需求。
2.3 引擎中的半身驅(qū)動技術(shù)方案
半身驅(qū)動的基本流程是:通過算法實時檢測出人體關(guān)節(jié)點,再對算法人體姿勢進行重定向并應(yīng)用在幻星數(shù)字人上。
由于幻星數(shù)字人是使用拆分部件的方式組成,需要將當前驅(qū)動的姿勢同步給所有部件。對于和身體骨架完全一致并且不需要支持物理的部件,如腳、腿、手等,使用設(shè)置主姿勢組件(Set Master Pose Component)的方式同步姿勢,減少游戲線程消耗;對于有額外骨骼和需要物理的部件,如衣服、裙子等,通過動畫藍圖從網(wǎng)格體復(fù)制姿勢(Copy Pose From Mesh)的節(jié)點同步姿勢。
角色藍圖示意 動畫藍圖示意
基于以上工作,數(shù)字人已經(jīng)能夠?qū)崿F(xiàn)驅(qū)動,但仍存在關(guān)節(jié)扭曲,肩膀塌陷和部件穿模等效果問題,下面將分別介紹針對類似動態(tài)效果問題的優(yōu)化方案。
如果直接將檢測算法計算得出的手腕旋轉(zhuǎn)值設(shè)置到幻星數(shù)字人的手腕骨骼上,會產(chǎn)生數(shù)字人手腕區(qū)域網(wǎng)格明顯扭曲的問題。這個問題是由于手腕的旋轉(zhuǎn)不符合人體的手腕運動約束,真實的手腕旋轉(zhuǎn)時會帶動到手肘之間的肌肉一起運動。為了模擬這樣的情況,首先在模型設(shè)計生產(chǎn)階段,需要在手肘與手腕之間插入多段骨骼。
手臂骨骼示意
并在運行時實時處理手腕關(guān)節(jié)扭曲校正。算法檢測出的手腕旋轉(zhuǎn)值后,將其轉(zhuǎn)化為歐拉角的形式,并確定手腕的扭曲軸(此處假設(shè)扭曲軸對應(yīng)歐拉角的Roll)。對于該手腕歐拉角,需保持Pitch和Yaw值不變,將Roll值以一定的權(quán)重值插值分攤到小臂關(guān)節(jié)鏈上。
優(yōu)化前手腕關(guān)節(jié)效果 優(yōu)化后手腕關(guān)節(jié)效果
手臂抬起時,肩膀處出現(xiàn)擠壓、凹陷等問題。這些問題是由于線性混合蒙皮導(dǎo)致的體積損失。為了系統(tǒng)性的解決該問題,我們引入了基于Pose Space Deformation的修型模塊。綁定師需要給需要修型的骨骼添加不同方向/角度的姿勢,并為每個姿勢制作BlendShape修型,最終將所有姿勢烘培到動畫中。這些動畫通過我們的自研插件導(dǎo)入UE后能自動生成姿勢資產(chǎn)(PoseAsset)及動畫藍圖(AnimBlueprint)。插件會為每個需要修型的關(guān)節(jié)創(chuàng)建一個姿勢驅(qū)動器(Pose Driver)動畫節(jié)點,并為每一個與該關(guān)節(jié)關(guān)聯(lián)的姿勢創(chuàng)建對應(yīng)的姿勢目標(Pose Target)。
該藍圖會作為后處理動畫藍圖作用于幻星數(shù)字人上,根據(jù)數(shù)字人的當前姿勢與姿勢目標的”接近程度“得出一個權(quán)重值,該權(quán)重值最終會作為每個姿勢目標對應(yīng)的BlendShape系數(shù)疊加到人物網(wǎng)格上。
優(yōu)化前肩關(guān)節(jié)塌陷 優(yōu)化后肩關(guān)節(jié)正常
為了解決由于肢體關(guān)鍵點深度信息不足導(dǎo)致的穿?,F(xiàn)象,我們在幻星數(shù)字人的驅(qū)干及手部添加了用于碰撞檢測計算的膠囊體,并在動畫藍圖的Retarget重定向步驟后添加了自定義動畫藍圖節(jié)點。該節(jié)點的作用是根據(jù)預(yù)設(shè)膠囊體間的相交結(jié)果,對手部關(guān)節(jié)進行旋轉(zhuǎn)調(diào)整,避免手部之間或手部與軀干的相交。再進行IK(Inverse Kinematics)重計算以得到更自然的姿勢。
動畫藍圖設(shè)置 Control Rig設(shè)置
優(yōu)化前右手與衣服穿插,與左小臂穿插 增加碰撞和IK后效果正常
3 物理仿真與模擬
在人物動態(tài)效果的物理仿真與模擬方面,頭發(fā)和服裝是該方向的兩大模擬難點。
幻星數(shù)字人在人物頭發(fā)的實時物理模擬上,為不同計算平臺設(shè)計了高配與低配兩套模擬方案。在算力緊張的終端設(shè)備上,如移動設(shè)備,低配筆記本電腦等,我們基于Hair Mesh方式制作頭發(fā)模型,并通過Dynamic Bone的動態(tài)模擬方案來還原頭發(fā)飄動的物理效果。每頂頭發(fā)平均綁定40-50根左右的動態(tài)骨骼,即可達到滿足簡單物理力學(xué)模擬的順滑效果。其原理可理解成具備父子層級關(guān)系的彈簧振子鉸鏈,如下圖所示,每個黃色包圍盒對應(yīng)一根動態(tài)骨骼,運動狀態(tài)會從根節(jié)點向子節(jié)點傳導(dǎo)。運動過程中通過每個step的約束求解來更新符合力學(xué)模型的運動參數(shù),同時可設(shè)置對應(yīng)的阻尼,彈性,硬度和慣性等參數(shù)來控制仿真過程中的物理量。
DynamicBone原理示意
頭發(fā)綁定動態(tài)骨骼后的動態(tài)效果
這套方案的優(yōu)勢是計算開銷小且效果精度可伸縮。以40根骨骼,3萬面數(shù)的頭發(fā)為例,經(jīng)過測試,該方案能在驍龍625等7年前的主流移動設(shè)備上跑滿30幀。且隨著算力的增加,通過骨骼的LOD分級設(shè)置,可以在驍龍825等高端設(shè)備上應(yīng)用80-100根動態(tài)骨骼,來提升整體的物理仿真表現(xiàn)。
該方案在移動端實時渲染場景下,基本能夠達到對物理效果的預(yù)期,但依然存在一系列的真實感問題。在馬尾或者丸子頭等發(fā)型上尚不明顯,但如下圖所示的蓬松劉海長發(fā)中,可以看到頭發(fā)的物理存在兩處明顯問題:1 頭發(fā)的柔性體效果沒有表現(xiàn)出來,整體像打了較重的發(fā)膠,動態(tài)效果不絲滑,且頭發(fā)和頭部模型進行碰撞時有明顯被撐開的效果問題。2 發(fā)束與發(fā)束間沒有相互穿插的效果,沒有辦法做手撩劉海等動態(tài)效果。
,時長00:03
DynamicBone動態(tài)效果并不那么物理
,時長00:14
Strand Based Physics絲滑順暢
在計算性能較好的PC平臺,為了解決上述問題,我們采用了Strand Based毛發(fā)實時模擬技術(shù)。該方案通過引導(dǎo)線制作發(fā)束,針對引導(dǎo)線進行tessellate細分,生成多個控制點,如下圖所示。我們可以將控制點的運動抽象成單個粒子在速度場中運動分析,以歐拉法的視角在網(wǎng)格中進行基于位置的約束求解。一般來講一個人物擬真發(fā)型通常包含8-10W根發(fā)絲,逐根解算的性能開銷過大,因此主要算力聚焦在求解引導(dǎo)線的運動狀態(tài),其他發(fā)絲通過插值得到當幀的位置信息。在計算開銷增加的前提下,大幅提升了頭發(fā)真實感物理的模擬效果,如上圖所示,在柔順程度和與頭皮的貼合感上有較為明顯的改善。
Strand Based Hair Simulation引導(dǎo)線細分示意圖
服裝方面,布料的物理效果模擬是圖形學(xué)領(lǐng)域比較有挑戰(zhàn)的技術(shù)方向之一。常見的模擬算法包括基于物理(Physics-Based)的求解方法,基于約束(Constraints)的求解方法和有限元分析(Finite Element Method)等。對于虛擬人的實時服裝仿真這一業(yè)務(wù)場景而言,對求解方式有兩個具體要求:性能和穩(wěn)定性。性能方面,要求求解過程能夠并行化,迭代能夠較快收斂。這方面如基于約束的Projective Dynamics,有限元分析等方法都難以徹底的GPU并行解算,在5000-8000個三角面的布料上無法達到實時。而在穩(wěn)定性方面,要求運動過程中物理狀態(tài)盡量穩(wěn)定,避免在離散時間步長內(nèi)發(fā)生越界和穿插。這方面彈簧質(zhì)點系統(tǒng)中的顯示歐拉方法就難以滿足穩(wěn)定性要求。
在游戲和虛擬人直播領(lǐng)域中,較為主流的方案還是基于位置的約束求解方法PBD(Position Based Dynamics),比如Nvidia的Flex,UE5的Chaos Cloth等。PBD并不是一個嚴格物理正確的求解算法,但其最大的優(yōu)勢是實現(xiàn)簡單,對內(nèi)存訪問少,可以在GPU上完成并行化求解過程,能夠在網(wǎng)格分辨率相對不高的布料模型上做到實時。且因為迭代過程相對簡單,對其他約束有較好的兼容性,F(xiàn)lex在Siggraph2014上發(fā)表的Unified Particle Physics框架也很好的說明了這一點。
PBD的算法思路可簡單概括為:先建立Stretching和Bending等約束,再將約束投影作用到位置和速度的更新上去。整個算法流程如下圖所示,最核心的步驟在9-11行進行約束投影,并得到優(yōu)化后的位置,在12-15行更新當前的位置和速度信息。如何進行約束的并行化求解是整體計算加速的關(guān)鍵問題,本質(zhì)上來說是一個線性系統(tǒng)的優(yōu)化問題。常用的方法包括Gauss-Seidel 迭代方法和Jacobi方法。GS方法的優(yōu)勢是一般情況下收斂速度會略快于Jacobi方法,但存在bias問題。Jacobi方法不存在偏向性,主要通過位置更新量的平均值來和當前位置做線性混合,但整體的收斂速度會低于GS方法。
布料網(wǎng)格結(jié)構(gòu)示意 PBD算法流程圖
如下圖所示,在古風(fēng)虛擬形象的服飾效果上,通過上述布料模擬算法,實時模擬出了絲綢和紗布的動態(tài)物理效果,為整個虛擬形象的真實感帶來了較大的增益。
,時長00:08
虛擬形象溶月的布料模擬效果示意
當然如上文中提到,PBD因為其求解過程并非完全基于物理,導(dǎo)致控制效果的參數(shù)并不完全正交,迭代步長,迭代次數(shù)與布料硬度等參數(shù)的調(diào)節(jié)相對不直觀且容易顧此失彼。為了更好解決這一問題,業(yè)界推出了最新的XPBD(Extended Position-Based Dynamics)算法,未來我們將基于UE5的Chaos物理系統(tǒng),通過XPBD的方法進一步提升實時過程中服裝的布料仿真精細程度。
三 未來展望
幻星數(shù)字人未來的愿景是為B站每個用戶打造個性化的3D數(shù)字人形象。我們將在下一階段持續(xù)探索形象風(fēng)格化渲染方面的相關(guān)技術(shù),優(yōu)化虛擬人資產(chǎn)生成管線的類型兼容性和生產(chǎn)效率。此外,隨著AIGC技術(shù)的快速發(fā)展,我們將在兩個方向結(jié)合制作管線和業(yè)務(wù)需求進行AI能力的整合。第一,我們將聚焦在3D數(shù)字人動畫智能生成系統(tǒng)這一領(lǐng)域,通過AI算法識別并提取真人視頻中的人物動作,以重定向的方式輸入到幻星數(shù)字人模型上,實現(xiàn)高效的數(shù)字人舞蹈/短劇/MV視頻生產(chǎn)流程。第二,我們將在制作管線的原畫環(huán)節(jié),引入Stable Diffusion等AIGC能力輔助視覺設(shè)計,降低產(chǎn)研之間的溝通成本,提升設(shè)定->概念視效->審核->制作的整體效率,同時持續(xù)關(guān)注3D建模和綁定環(huán)節(jié)的AI相關(guān)技術(shù)。這些技術(shù)的引入,將加速我們在虛擬制片與投稿領(lǐng)域的業(yè)務(wù)落地,為平臺創(chuàng)造更高的生態(tài)價值。
參考文獻
以上是今天的分享內(nèi)容,如果你有什么想法或疑問,歡迎大家在留言區(qū)與我們互動,如果喜歡本期內(nèi)容的話,歡迎點個“在看”吧!
熱門資訊
想了解動畫制作和影視特效的區(qū)別嗎?本文將帶您深入探討動畫制作和影視特效之間的關(guān)系,幫助你更好地理解這兩者的差異。
想知道快影、剪映、快剪輯這三款軟件哪個更適合小白?看看這篇對比評測,帶你了解這三款軟件的功能和特點,快速選擇適合自己的視頻剪輯軟件。
剪映專業(yè)版新增全局預(yù)覽縮放功能,可以輕松放大或縮小時間軌道。學(xué)習(xí)如何使用時間線縮放功能,提升剪輯效率。
4. 豆瓣8.3《鐵皮鼓》|電影符號學(xué)背后的視覺盛宴、社會隱喻主題
文|悅兒(叮咚,好電影來了!)《鐵皮鼓》是施隆多夫最具代表性的作品,影片于... 分析影片的社會隱喻主題;以及對于普通觀眾來說,它又帶給我們哪些現(xiàn)實啟發(fā)...
5. 從宏觀蒙太奇思維、中觀敘事結(jié)構(gòu)、微觀剪輯手法解讀《花樣年華》
中觀層面完成敘事結(jié)構(gòu)、以及微觀層面的剪輯手法,3個層次來解讀下電影《花樣年華》的蒙太奇魅力。一、 宏觀層面:運用蒙太奇思維構(gòu)建電影劇本雛形。蒙...
6. 15種電影剪輯/轉(zhuǎn)場藝術(shù),賦予影片絕妙魅力
15種電影剪輯/轉(zhuǎn)場手法,讓影片更吸引眼球!回顧電影中豐富多樣的專場技巧,比如瞬間從一個場景中變換到空中... 現(xiàn)在是測試技術(shù)的時候了!以下是一些常見剪輯手法,讓你觀影過程更加華麗動人!
本文介紹了十款強大的PR視頻剪輯插件,幫助提升視頻剪輯效率,提高創(chuàng)作品質(zhì),并降低創(chuàng)作難度。
8. 零基礎(chǔ)怎么學(xué)習(xí)視頻剪輯?新手視頻剪輯教程
1、每個切點需要理由和動機 很剪輯師認為,賦予每一個切點動機是非常困難的。很多...
電影創(chuàng)作者可以通過表意、造型、畫面展示等元素對隱身性的含義進行隱喻,打... 電影和夢境都具有普遍性的象征意義,夢境中的元素能夠代表人內(nèi)心的欲望,...
10. 《肖申克的救贖》通過鏡頭語言,向觀眾展現(xiàn)了安迪自我救贖的過程
以突出劇情的緊張氛圍和角色的情感變化。此外,電影的拍攝手法和剪輯方案還與影片的敘事結(jié)構(gòu)和主題緊密相連。導(dǎo)演巧妙地運用回憶、閃回和象征性鏡頭等...
最新文章
同學(xué)您好!