《UNREAL:基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用白皮書(34頁).pdf》由會員分享,可在線閱讀,更多相關《UNREAL:基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用白皮書(34頁).pdf(34頁珍藏版)》請在三個皮匠報告上搜索。
1、白 皮 書基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用引言為什么會有此白皮書?DCC應用中的毛發術語Groom工作流程Groom最佳實踐 虛幻引擎中的毛發實時渲染 優化導入流程Groom資產編輯器 表面附著 光源近似渲染 纖細發絲的光影模擬皮膚暗化使用案例:用MetaHuman Creator制作人類毛發 斜劉海Groom短卷Groom使用案例:狐獴項目中的動物皮毛與羽毛 狐獴皮毛老鷹羽毛總結其它學習資料345567101011111214161717181919222729313233目錄2引言頭發和毛皮都是由數千根具有一定特征的彩色發絲構成的復雜有機結構。我們能夠一眼認出毛發的獨
2、特光澤,是因為發絲本身擁有獨特的半透明與反光屬性,而且容易形成發束并卷曲在一起。這些發絲還會對重力或風吹等外力產生反應;由于生活中我們一直在觀察各種各樣的毛發,所以對這些效果早已習以為常。然而,生成逼真的CG毛發一直是一個難點,并且是已經持續了數十年的研究,其中涉及的不僅包括游戲與影視中的動畫角色,還牽涉到軍事、工業、動物科學及其他領域中的培訓模擬。圖1:DCC應用中的毛發導線,以及虛幻引擎中的最終渲染效果。3基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用創建計算機生成(CG)毛發的最大難點在于如何瞞過肉眼。然而,由于計算機處理能力有限,在完成耗時良久的渲染流程之前,CG美術師通常無法
3、看到CG毛發的最終色彩、場景環境中的陰影,或是頭發對光照和運動的反應。在渲染結束后,美術師終于可以看到改進的空間,卻不得不對設置進行微調,然后再次渲染。因此,要制作精美的CG毛發與毛皮,整個流程通常費時費力。正是出于這個原因,Epic Games最近推出了在虛幻引擎中實時渲染毛發的功能,讓美術師能夠立即在屏幕上看到最終的結果,無需為渲染苦苦等待。為什么會有此白皮書?毛發的渲染通常會消耗大量時間,雖然實時渲染是眾望所歸的解決辦法,但為了確保其高效運行,制作出最逼真的毛發或毛皮,在虛幻引擎中設置時就必須慎重考慮多種參數。本白皮書旨在介紹虛幻引擎中實時渲染毛發的流程,并在文檔的內容之外,探討美術師們
4、在使用該功能時可能遭遇的美術與技術考量。4基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用DCC應用中的毛發虛幻引擎中的毛發是在Maya、3ds Max或Houdini等數字內容創作(DCC)應用中創建的。毛發會附著在人臉或動物模型等多邊形表面上。用于制作毛發的常用工具包括XGen、Yeti和Ornatrix等DCC插件,還有Houdini所包含的Hair Utils工具。除了毛發之外,這些工具也能制作鳥類的羽毛。在DCC應用中完成毛發的設置后,就可以將其導入到虛幻引擎中,以進行實時渲染。術語為了介紹DCC應用的方法論與考量因素,以及虛幻引擎中的擴展工具組,我們會在此簡短回顧一下與制作C
5、G毛發相關的術語和流程。毛發導線、引導曲線(Guide hair,guide curve)-代表一組毛發發絲樣條類型的圖元。毛發工具包括了操控毛發導線的機制,能夠確定最終毛發(插值毛發)的表現插值毛發的形狀取決于和最近的引導曲線的加權平均距離,其長度通常由引導曲線的長度決定??刂祈旤c(Control vertices)-引導曲線上會放置一個或多個控制頂點,以便在曲線上控制該點。毛發導線上的控制頂點數量越多,毛發導線的形狀就更為精確。然而,控制頂點的增多會增加處理時間,從而降低性能。造型(Styling)-沿著特定的方向對毛發導線或插值毛發進行推拉、塑形和卷曲等操作,使CG毛發更符合參考圖片。G
6、room-定義毛發生長和自然毛發屬性的過程,此外還包括毛發的造型過程。其中包括了設置發絲的厚度及卷曲聚叢的傾向。由此產生的設置及保存設置的文件被稱為Groom文件。在DCC應用中,使用毛發導線和參數設置就能實現 圖3:引導曲線上的控制頂點圖2:導線和毛發的關系 導線控制頂點根帶有5個控制頂點的毛發帶有3個控制頂點的毛發毛發Groom。5基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用Groom工作流程Groom工作流程發生在DCC應用中,此時模型尚未導入到虛幻引擎中。作為起點,先使用一組毛發導線來確定形狀,然后會在網格體區域中創建體積??梢允褂肎room筆刷定位、雕刻和縮放可塑性的引導曲
7、線,Groom筆刷可以卷曲、修剪甚至移除毛發。在雕刻和毛發造型筆刷的幫助下,引導曲線會被塑造成發型或毛皮樣式。渲染毛發的色彩可以通過材質參數或毛發采樣的紋理確定。由于角色的不同區域會有大相庭徑的特征,Groom設計師可能會為人類的頭部、眉毛、胡須和體毛,以及動物的頭部、身體、腿部和尾巴創建單獨的Groom。在創建較為復雜的Groom時,可以將其分解為不同的部分,這樣將資產導入虛幻引擎后就能更輕松地管理多個分組。程序化造型DDC應用中的毛發工具包含許多程序化造型參數,可以用來調整毛發導線或插值毛發的效果。這些參數的名稱通常與現實生活中的發型設計術語相仿,比如修剪(trim)、卷曲(curl)和卷
8、發(frizz)。每個程序都有相關的一個或多個數值,以表明毛發導線或發絲的相對變動程度。修剪(trim)值會限制毛發導線或插值毛發的長度。卷曲(curl)設置會獲取卷曲的數量和范圍,并相應地執行。鬈曲(frizz)或噪點(noise)會根據輸入的數值,使曲線的控制頂點位置隨機化。對于此類參數,控制頂點的數量會直接影響到曲線可以支持的細節程度。由于復雜的形狀需要大量的控制頂點,你也許不得不經常重建曲線,才能確??刂祈旤c在整根毛發中均勻分布。密度與厚度渲染帶有毛發的圖片時,系統需要在每個像素中渲染多根可見的發絲。人類的頭部長有數十萬根發絲在虛幻引擎里,人類發型的合理發絲數量大約為5萬根每根發絲的平
9、均直徑約為100微米。(動物毛皮的發絲數量和平均直徑會根據動物而大相庭徑。)最適宜的Groom會找到密度與厚度的平衡點,在真實感和性能之間把握平衡。圖4:人臉形狀毛發的引導毛發圖5:虛擬Groom筆刷圖6:程序化造型工具 毛發修剪卷曲6基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用聚叢聚叢是毛發自然發生的現象,常見于發束、單獨卷曲或潮濕的毛皮。添加聚叢水平的主要目的是為較大的形體增添細節、變化和層次,以獲得更為逼真的外觀。在CG中,聚叢算法會在渲染期間將發絲的尖端拉扯到一起,由此打造出這種效果。為了讓毛發產生層次效果和自然結構,聚叢又被細分成三個等級:大聚叢、中聚叢和小聚叢,我們也會將
10、其稱為主要聚叢、次要聚叢和三級聚叢。主要聚叢是主要的毛發發絲集群,從中會衍生出次要聚叢和三級聚叢。程序化與人工方法程序化方法會使用參數(修改器、表達式)來放置毛發,并設置一根或多根毛發的卷曲和長度等屬性。人工方法與之相反,需要手動放置毛發,并使用鼠標刷對單根或小群毛發進行雕刻,以匹配參照物。Groom通常包含這兩種方法,從程序化轉變為人工控制的時機取決于Groom設計師,可以使用一系列造型修改器程序化地定義簡單引導曲線的最終狀態,也可以人工放置每一根引導曲線并精雕細琢為最終造型。程序化方法傾向于處理較短的毛發。通常情況下可以先使用盡可能多的程序化方法來填充Groom區域,隨后再手動放置發束和單
11、獨的毛發。如果角色距離攝像機較遠,或者處于高速運動的序列中,程序化方法通常就是最優解。在大部分情況下,與使用人工方法構建的資產相比,程序化Groom的圖層或節點網絡都會更少。雖然人工方法頗耗時間,但對需要近距離觀摩的主角類資產而言,這是必需的選擇。憑借這一技巧,Groom設計師可以手動放置毛發來匹配具體細節,從而獲得理想的效果。例如,在為影片制作視覺效果時,Groom設計師通常會手動調節每一根睫毛來匹配演員的容貌,或者手動移動每一根毛皮發絲來匹配參照物的毛皮結構。Groom最佳實踐參照要獲得最出色的逼真度,最好的方法莫過于尋找參照物并仔細觀察細節。收集高清圖片可以確保纖細發絲和微妙層次等特寫細
12、節能夠清晰展現。尋找能夠覆蓋多個角度的參照是重中之重,因為它們能夠透露Groom的綜合體積與形狀。圖7:聚叢將發絲尖端聚攏發束導線何時使用這些額外的聚叢并沒有固定規則,一切都要看對應的參照物?,F實中的聚從效果往往細節豐富,(因此)要完全獲得參照圖片中的效果會十分困難。最好先從較大的聚叢結構入手,然后再著手處理更細微的聚叢效果,直到整體結構符合參照圖片中的效果。7基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用從多個不同的來源選擇有趣的結構并結合參考,就能創造出基于現實而又獨一無二的Groom。在Groom設計流程中,Groom設計師可以將關鍵參照圖片分作主要參照,將其他參照圖片作為次要參
13、照。假如Groom包含大量方向性變化,則可以在平面圖像中勾勒出變化方向。這一技巧能夠加快進程,讓你更快地將引導曲線布置在正確的區域中。圖8:狐獴參考照片(左側)和渲染(右側)8基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用生長網格體雖然可以直接將Groom附著到模型的主要部分上,但使用生長網格體會更為輕松這個獨立的幾何體唯一的作用就是 “生成”毛發。當你之后將Groom導入虛幻引擎時,就能將Groom綁定在主要網格體的皮膚上。如果模型的設計仍在變動,使用生長網格體就能減少轉化次數(將Groom重新配置/轉化到網格體上)。生成多個生長網格體,讓每個網格體代表Groom的獨立區域,就能更輕
14、松地聚焦各個區域的Groom。讓Groom網格體單獨分離開來的另一項好處是,那些無需毛發的幾何體區域,例如眼球、眼眶、口腔內部、牙齒、衣物等,都可以被移除或隱藏起來。如果網格體的UV布局中有部分區域分辨率不足,則可以使用一組單獨的UV來繪制Groom的屬性貼圖。圖9:勾勒方向變化9基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用虛幻引擎中的毛發實時渲染虛幻引擎主要執行優化、渲染、模擬以及毛發LOD的生成,以及有限的造型控制。在理想情況下,你需要先確定好Groom的造型,再將其導入到虛幻引擎中。在初次導入之后更改造型的情況并不罕見,此時只需要在數字內容創作應用中更改造型,隨后重新導入Gro
15、om即可。虛幻引擎使用Alembic文件格式作為毛發導入語言,并會通過命名規則來輔助導入XGen、Ornatrix、Yeti和Houdini Hair Utils等數字內容創作工具的靜態Groom。在DCC應用中創建Groom文件并導出為Alembic格式時需要注意,你要確保將特定屬性導出到Alembic文件中,詳情請參見本白皮書的“導入流程”章節。Ornatrix和Yeti可以將這些屬性導出到Alembic文件中,以便后續導入虛幻引擎。優化 就基于發絲的毛發系統而言,高密度的Groom可以包含數十萬甚至百萬根發絲,每根發絲也會包含數十個控制頂點。這兩點共同構成了導入、渲染和模擬的性能影響因素
16、。由虛幻引擎實時渲染的獵犬毛發,作者:Jelena Jovanovic-Digitalbite10基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用在影片特效等離線渲染流程中,通常會參照真實世界中的(毛發)密度和寬度來盡可能營造真實感。但在實時渲染中,雖然你也可以一開始參照就現實中的密度和寬度,以求盡可能還原參考資料中的效果,但通常最后都需要對性能進行評估并進行優化。用于實時渲染的毛發,可以在導入虛幻引擎之前,就在DCC應用中完成優化。優化時可以先從控制頂點的數量入手。如果毛發短而直,就可以大幅減少控制頂點,并且不會產生太多的視覺差異。如果毛發長而蓬亂,而且比較復雜,就要避免減少過多的控制
17、頂點,以免有損整體的結構。下一步就是優化密度和寬度。首先將密度減半,將寬度調整為兩倍,并根據需要重新評估。在選取人類毛發的平均寬度時,通??梢韵葟?.008厘米開始,而發際線處、鬢角處和散落的纖細發絲通常會使用更低的寬度值。視覺感知的密度和實際的密度之間存在一種平衡。較粗的發絲可以阻隔光線和直接可見的皮膚,從而實現更濃密的Groom外觀。通常來說,在降低密度的同時,最好通過提高寬度作為補償,直到在性能與真實性之間取得平衡。如果資產距離攝像機非常近,這種方法未必能夠奏效,因為寬度將看起來不夠真實。LOD可以在攝像機遠離時通過發絲剔除和加厚解決這一問題,在改善性能的同時,確保Groom的寬度與密度
18、能盡可能地貼近現實。如需進一步優化,你可以回歸傳統,選擇基于發片的方法,使用少量大型平整的板片提供大量單獨毛發的大致形狀和運動。虛幻引擎也為這些方法提供了可用的功能。導入流程要將Groom文件導入到虛幻引擎中,你必須先將它從DCC應用中導出為Alembic格式,隨后才能將其導入虛幻引擎,并成為Groom資產。虛幻引擎并不會根據引導曲線和插值規則重建Groom,而是將引導曲線和發絲一同導入,精準地還原制作的Groom。在導入流程中,導入者需要查找屬性和分組并將它們導入進新的Groom資產中,并且這些屬性和分組需要遵循“Alembic for Grooms規范”一文中所述的命名規范。實施該方案能將
19、寬度和顏色屬性以及模擬與插值毛發所需的導線屬性導入到虛幻引擎里。單個Alembic文件中的多個毛發分組可通過group_id支持。在這些屬性中,根UV屬性會獲取底層表面(如皮膚表面)的UV,能夠根據底層表面,在Groom中產生部分空間變化。如果Alembic文件只包含了曲線,但沒有遵照Alembic導出規范,Groom文件依然可以導入到虛幻引擎中,但將不包含自定義屬性。要了解關于導入流程的詳情,請參考虛幻引擎文檔中的毛發渲染主題。Groom資產編輯器Groom資產編輯器可以在選中Groom資產時使用,編輯器中的控制選項能夠在虛幻引擎中對Groom的上色、優化和其他方面予以協助。11基于實時渲染
20、的高真實度Groom:虛幻引擎中的毛發運用雖然Groom系統的主要設計目的是處理由發絲構成的Groom,但是出于可伸縮性,也支持發片和網格體的幾何形式。為了方便設置,所有幾何體表現種類都可以在單個資產(Groom資產)和組件(Groom組件)來管理所有這些幾何體表示。編輯器還提供了一個LOD面板,允許你配置每個LOD應該使用的幾何體呈現和刪減發絲的方式。Groom資產可以由多個分組構成(例如一個劉海分組、一個馬尾分組等),每個分組都可以有自己的LOD設置。要了解關于使用該功能的更多信息,請參考虛幻引擎文檔中的Groom資產編輯器用戶指南和毛發屬性參考。表面附著Groom通常會附著在綁定好的骨骼
21、網格體組件上。要將Groom附著在蒙皮表面上,就需要在層級中將Groom組件附著到骨骼網格體組件下,還需要提供一個綁定資產(請參考虛幻引擎文檔中的毛發屬性參考)。綁定資產存儲了毛發發絲在目標骨骼網格體上投射的信息。在附著過程中,我們會為每個發根以及與之最近的網格體三角形計算出重心坐標。當網格體在動畫期間發生形變時,毛發根部會始終被約束到骨骼網格體上。圖10:虛幻引擎中的Groom資產編輯器12基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用皮膚形變當皮膚表面形變時,附著在表面上的發絲可能會縮緊,或是移動到不自然的位置上。睫毛、眉毛或胡須等精細的Groom有時可能難以渲染出真實感,因為它們
22、都是由纖細的發絲在不平坦的皺縮皮膚表面上構成的。為了解決這些問題,Groom可以選用全局形變約束。即使皮膚嚴重形變,這一約束也能迫使毛發盡可能地保留原狀。一組徑向基函數(RBF)會在附著的骨骼網格體的多個點位進行預運算,然后在運行時應用,以維持原本的Groom位置。圖12:狐獴角色的毛發、導線和綁定圖11:發絲如何在皮膚形變期間“扎根”在網格體三角形上的圖解發絲三角ID+重心導線1導線1導線0導線013基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用光源近似毛發的著色方法旨在盡可能模擬光線照射在真實毛發上的復雜表現,同時不會超出實時渲染的能力范疇。在現實中,我們看見的毛發色彩會受到許多因
23、素的影響:毛發本身的色彩、光線照射的方式、光的折射與散射,以及其他發絲折射的光線對其產生的影響。下圖簡單展示了光線照射到毛發的發絲時發生的情況。發絲既有反光性,也有透光性。部分光線會被發絲直接反射,形成光澤和高光;其他光線則會被發絲吸收,隨即散射。被發絲吸收的光線有兩種散射方式:可以直接從發絲的另一側射出,也可以在發絲內反彈后射出。這兩種光線散射方式被稱為“纖維散射”,以表示毛發獨特而復雜的外觀。這個現象眾所周知,名為“雙向散射分布函數”(Bidirectional Scattering Distribution Function)的數學函數也對此進行了充分描述。另外,從纖維中逸出的光線可以散
24、射到其他纖維中,從而導致“纖維間散射”。這種效果更為復雜,因此計算起來耗時更久。在考慮光線影響毛發渲染的各種方式時包括陰影、環境光遮蔽、背光等散射光對數千根毛發發絲的作用會變得極為復雜。例如,人類只需要看一眼外表,就能輕易而舉地分辨出仿冒與真實的動物毛皮,這主要是由于光對毛皮的影響方式(而不是發絲的色彩)。如果我們要創造出栩栩如生的CG毛發,就必須考慮到所有這些光照效果。圖14:毛發發絲的橫截圖,以及在光線照射下的活動。圖13:普通狀態下的皮膚毛發(左側),沒有RBF約束條件時的皮膚形變(中間),帶有RBF約束條件的相同皮膚/毛發(右側)“光澤”皮膚反射光散射光光源光源投下的陰影呈現的毛發“色
25、彩”許多色彩變化 照亮其他毛發 投下陰影14基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用早期的CG毛發著色方式會嘗試模擬光線照射到毛發時的物理效果,雖然效果確實非常逼真,但對計算的要求巨大,渲染時間極長。然而,一些較快的“捷徑”運算已經被開發出來,其效果已經非常接近于真實的物理效果。虛幻引擎使用了眾多近似手段,使得實時渲染時也能得到逼真的毛發效果。以雙重散射(dual scattering)近似為例,該方法會將復雜的散射現象分解成兩個部分:全局散射會粗略/宏觀地評估光線穿過纖維/毛發的方式;局部散射會通過簡單的模型評估光線在單根纖維周圍的反彈。與計算每個光源在一系列毛發上產生的效果相
26、比,計算雙重散射效果所需的時間會大幅減少,所獲得的效果卻與其他運算密集型的方法相似。另一種能夠在近似表現毛發真實感時節省時間的方法是使用深度不透明貼圖(deep opacity maps)。這種方法會為每個光源創建專屬的陰影貼圖,將毛發吸收信息存儲在多個陰影貼圖圖層里。由于貼圖會跟隨散發毛發的物體的形狀,所以不需要太多的貼圖,也能實現多個不透明陰影貼圖所能取得的真實感,讓這種方法的運算變得更為快捷。更多有關虛幻引擎近似表現實時光照行為的技巧,可參考本白皮書的其他學習資料部分。圖15:頭發的CG渲染,結合了反射光(最明亮的區域)、散射光(中等亮度、呈現頭發色彩)和只有少量光線觸及的黑暗區域 圖1
27、6:不透明陰影貼圖(左側)和深度不透明貼圖(右側)的呈現 15基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用密度體積 在虛幻引擎近似表現光照行為的技巧中,另一種方法是在每一幀中創建虛擬密度體積。密度體積提供當前視口中的皮毛密度或“厚度”信息(見圖17),例如比較狐獴腿部中央毛發的“厚實”外觀(綠色)和腿部邊緣飄拂的毛簇(藍色)。這些反饋會為渲染系統提供必要的信息,以迅速地近似出光線在這類毛皮密度上產生的效果。密度體積會使用體素(小型的3D占位方塊),將發絲在密度體積中體素化。密度體積是毛發著色、環境光遮蔽和環境光照的默認機制,能夠獲得逼真的可信的背光、自陰影和照明效果。然而在虛幻引擎中
28、,美術師還可以選擇使用深度不透明貼圖,對每個光源進行設置。在為可見發絲計算完光照后,系統就會進入下一個步驟:渲染。渲染為了虛幻引擎中進行渲染,導入的毛發會被轉換成單獨的多段線。這些曲線會被重新劃分為小簇的發絲分組,以便在LOD選擇和剔除時使用。當實時系統渲染每個像素中的多根纖細發絲時,有可能會出現鋸齒問題。毛發的渲染可以使用多種方法,具體取決于性能和品質預算。對于實時渲染,虛幻引擎默認的主要可視性算法結合使用了MSAA(多重采樣抗鋸齒)可視性緩沖來提取最初可見的發絲,同時也使用了亞像素覆蓋緩沖。這一結合實現了性能與品質的平衡。圖17:密度體積、樣本和毛皮成果16基于實時渲染的高真實度Groom
29、:虛幻引擎中的毛發運用在制作動畫時,我們更愿意犧牲性能來換取質量,因此可以使用不同的方式,動態地構建出一列可見發絲。這可以得到更好的排序和半透效果。對于這兩種算法,我們都會在壓縮后輸出每個像素的可見發絲列表,以減少每個像素中的采樣數量。Groom會被分成小簇以運算LOD和剔除信息。在渲染Groom時,這些小簇可以根據屏幕覆蓋率和可見性/遮蔽性進行細粒度的LOD選擇。這樣我們就能根據屏幕上實際可見的內容,相應地更改渲染與性能開銷。這種方法對于大型動物的皮毛渲染尤其適用,因為Groom可能只有一部分離攝像機很近,而其他部分距離很遠。出于可擴展性,Groom系統支持不同的幾何表現形式,例如發片和網格
30、體。當Groom只覆蓋到幾個像素,或者為了在性能較低的平臺上運行時,可以切換為更簡單的渲染方式。纖細發絲的光影由于陰影貼圖或毛發體素分辨率不足,睫毛或胡須等纖細發絲在定向光源下投射的陰影可能無法保真。為了應對這一問題,在啟用光線追蹤時,可以直接使用毛發幾何體來投射陰影,讓纖細的結構能夠投射出更清晰銳利的陰影。但這么做必須謹慎,因為毛發幾何體越是復雜,這一選項的性能開銷就越是高昂。人的臉部其實覆蓋著被稱作“絨毛”的纖細發絲。和其他毛發一樣,絨毛會被所有的環境光源照亮。由于其本身顏色較淺,其光照中不可忽視的一部分來自于皮膚表面的反光。在虛幻引擎中,Groom可以選擇采用這種特殊的光照成分。模擬 對
31、頭部和身體移動、風吹、重力等因素做出反應時,真實的毛發會以特別的方式運動。毛發由于這些外力所產生的動畫通常是通過基于物理的模擬實現的,而這非常依賴運算。然而,為了在動畫中實現照片級的真實感,在制作這些受到外力和運動影響的CG毛發模擬時,就需要創作出栩栩如生的動畫。毛發數量繁多,并且物體碰撞和自我碰撞的運動都非常復雜,因此很難模擬。毛發的動力學依賴于復雜的相互依賴關系。就動物皮毛而言,除了毛發本身的模擬作用,有很大一部分毛發動態效果是由肌肉負責驅動的。圖18:配制毛發LOD的方法 LOD1LOD1LOD0LOD0LOD2LOD2曲線厚度曲線+頂點剔除漸進17基于實時渲染的高真實度Groom:虛幻
32、引擎中的毛發運用用于模擬的導線(不一定要與毛發導線相同)會驅動相關插值曲線的形狀和運動。導線的選擇可能比導線的數量更重要質量的重要性遠勝于數量。Groom中的Groom導線通常會提供某種結構,例如聚叢、方向變化、流動等。結構通常需要在模擬期間維持,所以Groom導線是模擬的良好起點。如果這些Groom導線無法提供足夠的分辨率,用戶可以使用Groom衍生的其他模擬導線來予以補充。如果你的主要關注點是性能,就可以減少數量以縮短運算時間。虛幻引擎中的毛發模擬是作為Niagara VFX系統的一部分實現的,出于性能原因,只能在GPU上使用。解算器以XPBD(基于位置的順應動力學模擬)為基礎。為了解算所
33、有約束條件,用戶必須提供子步驟的數量和解算器迭代,以及所有發絲、碰撞和本構模型參數。解算器會以重力作用下的原始網格體(閑置姿勢)為目標,以確保最終的造型盡可能地還原原本的造型。當創建物理資產并將其加入骨骼網格體時,模擬解算器會處理身體與物理資產圖元的碰撞。在計算自碰撞時,會基于一個平均速度場計算。該速度場是通過將粒子光柵化到一個規則的體素網格體而建立的。對于本構模型,最大的挑戰通常是尋找良好的毛發組構材質模型,使發絲能夠在較低的解算器迭代次數下,表現得栩栩如生。這些模型控制著發絲在模擬期間的擴展、彎折和扭曲。我們正在不斷測試新的組構材質模型,看看哪些能夠實現毛發的質量和性能最佳平衡??粕瓘椥?/p>
34、桿和角彈簧方式已經可以在Groom資產物理屬性中使用了。更多關于這些技巧的信息,可見本白皮書文末的其他學習資料部分。皮膚暗化在攝像機靠近人類毛發與膚色相差較大的Groom時,毛發發絲中最明顯的部分就是毛干的基底。由于人類的皮膚天生比較透明,人們會注意到皮膚底下的毛球,也就是“毛囊”。毛囊會使皮膚產生微弱但可見的暗化。為了模擬這一點,Groom可以生成毛囊紋理,并在皮膚著色器中使用(Groom資產可選擇該選項)。圖19:毛囊貼圖18基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用使用案例:用MetaHuman Creator制作人類毛發為了幫助大家進一步理解實時渲染毛發,我們在此展示一些虛
35、幻引擎中的使用案例,以及相應的實現細節。為了展現人類毛發的Groom,我們來看一些基于MetaHuman Creator創建的數字人類Groom示例。這些都可以下載。MetaHuman Creator是用于構建完整數字人類,包括面部與肢體綁定的全新工具。人物模型可以在虛幻引擎中創建動畫,并且帶有很多預定義的頭發和臉部毛發樣式。MetaHuman Creator中的毛發選項是在DCC應用中預先創建的、隨后導入虛幻引擎中的Groom。借助MetaHuman Creator中的控制選項,你可以通過混合匹配來創造毛發、眉毛、髯須和胡須的造型。在生成角色之前,你可以在MetaHuman Creator中
36、調整Groom的顏色。這里所提及的Groom都是使用Maya中的XGen插件制作的。斜劉海Groom 斜劉海Groom由前方的斜劉海和后方的自然卷發構成。觀看視頻19基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用Groom美術師:Marija Blakovi斜劉海Groom面部Groom20由于前方是劉海,后方是卷發,我們可以合理地將造型分別劃入不同的圖層(即分組)。圖層與理發師在理發是使用的工作流程類似,都是自下而上構建的。這一技巧有助于在向上構建造型的同時,保障毛發的精妙分層。通過觀摩參照物、觀察相似發型中的卷曲造型,我們可以提出多個原則,以幫助我們構建這種發型。卷曲通常是不完全的
37、,雖然毛發傾向于構成清晰明確的糾結螺旋,但依然是三開的,尤其是翩翩長發的上層圖層。卷曲的根部通常會失去形狀,逐漸地沿著發絲扭曲、相互糾纏在一起,形成有趣的形狀。發束會被分解成兩三個子發束圖層,每根發絲都會有隨機的偏移值。另外,在不同的子發束圖層中會設置不同的發束比例,以避免與主發束形狀雷同。這樣就能進一步分解形狀,讓發束有更多變化。高頻噪點可以分解筆直發絲的統一外觀,發絲尖端還會添加額外噪點,進一步打破發束。拓寬發束尖端和隨機化長度也能打造出更自然、更逼真的卷曲。最后,我們會添加兩到三個低頻噪點圖層,以加入完全雜亂蓬松的發絲圖層。這些圖層對于打造真實的外觀功不可沒。圖21:堆疊后的XGen修改
38、器,用于產生聚叢和噪點效果圖20:上色后的導線圖層21基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用短卷Groom22Groom美術師:Nikola Milosavljevi短卷Groom 短卷Groom是一種帶有濃密、糾纏的螺旋卷曲的短發發型。為了看起來更自然,卷曲必須具有豐富的變化,從各個角度都能清晰地看見許多不同的卷曲。前額的發際線也必須清晰可見。為了制作初始的導線,我們選擇了基于屬性的Groom,使用了粗略密度遮罩和雕刻的體積網格體,也就是XGen中的MeshCut修改器。這能讓我們迅速布置出毛發長度和Groom的綜合形狀。短卷Groom23基于實時渲染的高真實度Groom:虛
39、幻引擎中的毛發運用圖22:XGen中的密度貼圖圖23:人物頭部Groom的初始定義區域一定比例的毛發會作為導線而被導出,以便在新的樣條描述(Groom中的一個圖層或分組)中使用。24基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用圖24:用作引導毛發而導出的粗略Groom雕刻新的描述,再創建基礎聚叢貼圖,并分為三個不同的圖層來進一步控制彎卷厚度、形狀、彎曲數量等參數。使用表達式來隨機遮罩導出到新圖層上的部分卷曲導線。這些表達式會在基礎聚叢貼圖的ID上創建遮罩。彎卷會以程序化方式生成,在發根與發尖之間運用表達式來混合彎曲數量,并且可以略微控制混合在導線上的位置(靠近發根、發尖或中間某處)。
40、禁用統一控制頂點選項可以獲得更好的結果,彎卷中的形狀也會更精確分明。啟用統一控制頂點選項則會讓形狀更平均。修改器控制頂點數量參數同樣有著重要的作用。初始數值可以時80到100個控制頂點,卷曲的細節程度比較適宜,也不會占用過多的系統資源??刂祈旤c數量隨后會被優化到60至70個,以便導出。圖25:三種類型的卷發Groom圖層圖26:XGen中的控制頂點修改25基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用每個彎卷描述都由兩個聚叢修改器控制。一個修改器的聚叢強度較低,以吸引發絲靠向導線。另一個修改器則會負責卷曲。在此基礎之上,我們還使用了層疊噪點、卷曲和剪切修改器,以打破單調的外觀。描述的基
41、礎聚叢貼圖衍生的貼圖定義了聚叢強度。紋理被載入Mari紋理繪畫軟件中,投射到頭皮網格體上,并且應用了邊緣檢測過濾器。隨后使用HSL和對比度調整圖層,產生一張結構類似于濃縮單元或蛇皮的灰度圖。我們隨后會從Mari中導出灰度圖,在Photoshop中進一步修改,在每個單元的中央到外部邊緣創造出漸變效果。填充在卷曲無法填入頭皮的時候,我們有時就需要依靠填充毛發。填充描述的密度貼圖的創建方式和彎卷的聚叢強度貼圖相同,但是單元的邊框會調成白色,單元本身則是黑色。貼圖會將毛發生長限制于白色區域中,只在必要的地方增添密度。通常必須人工進行的繪畫就能以此實現自動化。貼圖還可以通過XGen的噪點功能另行調整。填
42、充毛發的彎卷效果比卷曲的彎卷效果更為松弛,噪音和彎卷修改器則會產生變化。圖27:左上角起順時針:聚叢貼圖、邊緣檢測過濾器、HSL和對比度貼圖,以及經Photoshop修改的最終聚叢貼圖圖28:填充貼圖26基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用使用案例:狐獴項目中的動物皮毛與羽毛對于皮毛和羽毛使用示例,我們會看看Weta Digital的實時動畫短片作品Meerkat中的狐獴和老鷹。這部影片講述了一只狐獴和一只老鷹之間令人捧腹的遭遇。狐獴擁有實時渲染的皮毛,而老鷹則長著實時渲染的羽毛。這兩個動物的Groom都是在Maya中使用Yeti插件制作的。著色器在創建時盡可能模擬模擬真實皮
43、毛和羽毛的生物與形態原則。如果要真實重現狐獴皮毛和老鷹羽毛上的花紋,就必須對生長模式、與色素沉積相關的蛋白質和色素釋放時間有著充分的了解。舉個例子,尾巴細長的狐獴(細尾狐獴)背部帶有的斑駁圖案就是特定的毛發成長圖案和定時黑色素沉積結合的作用,使毛發的發絲受到至少兩種灰黑色基因色素帶的影響。因此,著色器必須能夠控制身體周圍的毛發顏色,還需要控制發絲顏色的時間選擇。觀看短片27基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用圖29:狐獴的參考照片圖30:稀疏體素結構僅在需要時分配內存發束影片的兩個主角,狐獴和老鷹,有多次同屏出場。但因為它們這兩個動物體型差異較大,所以毛皮的光照和陰影都變得更
44、為復雜。如本白皮書的光源近似部分所述,Groom投射的陰影和光線在Groom中的傳播都需要依靠體素結構。體素的大小決定了光照和陰影的精準度。體素太大會導致“斑駁”的錯誤外觀,但體素太小又需要分配大量內存。為了應對后一個問題,我們需要依靠稀疏體素結構,使分配僅在需要時進行。分配是由GPU驅動的,并且基于的是Groom導入期間所生成的簇。這些發束的綁定信息定義了Groom占據的空間和需要分配內存的位置。除了節約內存之外,稀疏結構還能跳過空白區域,實現更快的光線追蹤。28基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用環境光遮蔽和天光需要運用這個結構來投射正確的遮蔽效果,在Groom中正確傳播
45、光線。虛幻引擎提供了多種計算天光貢獻的方法,以便在精準度和速度方面有所取舍。在狐獴(Meerkat)項目中,我們使用了最準確的版本,通過投射多道光線穿過毛皮,妥善地整合了天光在毛皮和羽毛材質上的貢獻,然后精準計算散射光線。這兩個角色的紋理都是直接使用Substance Painter繪制在角色皮膚上的。這些紋理都是包含了RBG遮罩的低分辨率貼圖,并會在著色器中通過遮罩控制色彩和圖案。這里有兩個主要遮罩一個定義了控制著身體色彩空間的區域,另一個定義了控制發絲與條紋計時的區域。紋理貼圖會根據皮膚的UV空間生成,能夠使用根UV屬性定義整根發絲的色彩。狐獴皮毛由于狐獴的動作很快,為了營造出準確的動態模
46、糊和抗鋸齒,就必須將上一幀的光照重新投射到當前幀中,因此精準的運動向量非常關鍵。為了實現這一點,此前的發絲位置會被緩存,運動向量的運算于是變得和位置差異運算一樣簡單。虛幻引擎中的皮毛實時性能非常關鍵,因此選擇合適的皮毛密度非常重要。狐獴的皮毛密度只有普通影片特效中的25%。降低密度并權衡取舍寬度有助于讓實時的毛發更逼真、更精細。狐獴身體的Groom是作為一個整體單獨設計的,但對于精細的臉部毛發,例如胡須、睫毛和其他獨特元素,我們都單獨創建了分組。圖31:老鷹的空間區域(左側)和定時區域(右側)遮罩圖32:狐獴的空間區域(左側)和定時區域(右側)遮罩29基于實時渲染的高真實度Groom:虛幻引擎
47、中的毛發運用圖33:虛幻引擎界面中的狐獴Groom就這只狐獴而言,胡須和睫毛都是手動布置的引導曲線,然后在Yeti節點網絡中將其直接轉換為發絲。圖34:繪制狐獴的引導皮毛30基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用老鷹羽毛羽毛的復雜本性使老鷹變成了一大獨特的挑戰。Yeti會使用羽毛圖元來構建羽毛,羽軸實際上等同于“發絲”,羽支則生長在羽軸上,隨后羽毛會在老鷹全身實例化。在老鷹飛向、行走與移動時,每根羽毛都會因為動畫而形變,這意味著多根羽毛都需要一個綁定。另外,在虛幻引擎中,發絲只能綁定在幾何體上。于是我們為每根羽軸創建一條實例幾何體,并且在Maya中完成綁定。羽支會作為毛皮導入到
48、虛幻引擎里,隨后綁定在幾何體羽軸上。老鷹羽毛需要手動放置,才能在確保結構和外觀的同時,滿足綁定的要求。對羽毛而言,羽軸和羽支的色素施放時間決定了羽毛上看似復雜的圖案的構成。羽毛著色器遵循的空間與計時區域原則與狐獴的毛發發絲相同。主要差別在于,羽軸旁羽支的朝向和位置極為復雜。羽毛上所見的圖案和羽毛幾何體密不可分,由于它們會對最終外觀產生深遠的影響,所以必須特別關注他們的構建。羽毛著色器原本是在多邊形平面上繪畫的色彩貼圖在Substance Painter中的投射。老鷹全身共有13種不同類型羽毛。這些貼圖隨后還會使用羽軸和羽支的UV坐標重新映射。不幸的是,這么做立即就會引發問題,羽毛的圖案很難產生
49、自然的變化,也難以通過迅速高效的方式控制色調和數值。一個更為程序化的方式則是在發絲中使用色素沉積原則,以產生更為有機的外觀。圖35:繪制羽支位置31基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用我們在導入流程的部分中談到,紋理貼圖是使用皮膚的UV空間生成的,并運用根UV屬性定義整根發絲的色彩。對狐獴皮毛來說,這么做非常自然。但對于羽毛來說,根UV參數只能定義單獨的整根羽毛。為了獲得特定的圖案,我們就需要更多毛發發絲的屬性:一個屬性會定義羽軸旁的羽支位置(0為根部,1為尖端),另一個屬性會議指明羽毛所屬的一側(內側與外側羽毛)。色彩斜坡回用于創建毛發發絲的色彩圖案/數值,以控制發絲上的條
50、紋??偨Y實時渲染毛發系統依然是個新鮮事物,還有許多發展的余地。在未來發布的毛發系統中,Epic Games的目標是聚焦質量與性能。對于毛發的著色和渲染,我們將通過提升參數化和光照響應來改進光源近似。我們還希望改進碰撞響應和材質,并進一步優化處理大型高密度Groom時的性能。我們預期會在虛幻引擎的未來版本中添加更多功能,讓前沿的實時渲染毛發系統能夠更進一步。圖36:最終實時渲染中的老鷹視圖32基于實時渲染的高真實度Groom:虛幻引擎中的毛發運用其它學習資料公式雙向反射分布函數(BRDF)徑向基函數(RBF)技術論文人類頭發纖維的光線散射虛幻引擎中基于物理的毛發著色雙重散射近似 深度不透明貼圖基于位置和方向的科瑟拉彈性桿卷發的藝術模擬 相關軟件MetaHuman Creator33關于本文作者 Gaelle MorandCharles de RousiersMichael Forot貢獻人員Shawn DunnNathan FarquharDarrin WehserMarija BlakoviNikola Milosavljevi編輯編輯:Michele Bousquet排版:Jung Kwak版權 2021 Epic Games版權所有34