遊戲角色寫實頭髮製作
本系列以UE4引擎為例,介紹遊戲角色寫實頭髮的製作。首先介紹貼圖製作技法。
UE4的hair shading model採用PBR計算,所以只需要4張Mask貼圖通道,不再需要美術手繪顏色資訊。這四張貼圖通道分別是Alpha, Depth, ID, Root,作用分別是:
- Alpha通道用作透貼
- Depth通道用作提取頭髮先後遮擋關係資訊
- ID通道用來區分不同的髮絲屬性
- Root通道用來計算髮根到髮梢的漸變效果
所有的貼圖通道都是通過工具生成,工具包括Maya, Xgen, XNormal, 以及自己用Python開發的兩個Maya Tool。具體步驟如下:
- Maya裡新建所需的XGen Hair Description,數量依據具體效果確定。每個Description生成造型疏密不同的髮束。
Xgen Hair
·Pipeline中有部分工作,現有的工具無法完成,需要自己開發兩個Python工具。第一個工具是Mesh生成工具。因為XGen匯出的Curve不能渲染,必須通過工具轉換成所需要的可渲染烘培髮絲幾何模型。第二個工具是隨機選擇工具。為了生成ID Map,髮絲的幾何模型必須隨機分成N組,每一組指定不同的ID。
Python工具和隨機選擇效果
Python工具生成的髮絲Mesh
- 準備好XNormal所需的Bake Texture。Bake Texture的目的是生成Alpha,Root,ID。Bake Texture分別是
- Alpha:一張白色貼圖。
- Root:一張黑色到白色的漸變貼圖
- ID:根據分組準備N張不同灰度的純色貼圖。
漸變和ID純色貼圖
- 最後一步,XNormal烘培輸出貼圖。
- 把分好組的髮絲幾何模型分別High Definition Meshes.
- 匯出兩個Plane作為Low Definition Meshes和External Cage File.
- 指定白色貼圖到Base texture to bake, 烘焙Alpha通道.
Alpha Map
- 指定漸變貼圖到Base texture to bake, 烘焙Root通道.
Root Map
- XNormal裡烘培height map作為Depth通道.
Depth Map
- 指定不同灰度的純色貼圖到Base texture to bake, 烘焙ID通道.
ID Map
材質
寫實頭髮材質部分,也就是講下Shading Model實現.
Kajiya-Kay[1989]關於頭髮的Shading Model沿用至今,已經快30年。Kajiya模型的優點是:
- 演算法簡單,便於理解,計算量小
- Primary Specular的價效比高,效果明顯,方便美術使用
但Kajiya模型又被稱作Painter's Illusion, 難以獲取真實的頭髮材質效果,其不足在於:
- Kajiya的模型過於簡單,只簡單模擬了Primary Speucular, 沒有處理Light Transport的其他情況,比如光線在頭髮纖維內的傳播過程。
- Kajiya假設頭髮纖維是光滑的圓柱體,而電子顯微鏡下顯示頭髮纖維是由表面粗糙的鱗片層疊形成的不規則幾何體,鱗片之下還有色素髓質。鱗片和髓質對光線的傳播,染色和衰減吸收作用,都沒有在Kajiya模型裡體現。
頭髮纖維表面結構
頭髮纖維橫截面
因為以上的問題,導致Kajiya Model是non-physically based。 經驗值引數導致光照能量不守恆。弊端是在Artist在特定的光照情況調出來的頭髮效果,光照發生變化之後,可能會出現明顯的瑕疵,很多時候需要Artist把頭髮的顏色預先畫在貼圖上。
針對Kajiya模型的不足,Marschner[2003]提出了一個新的模型,其特點:
- Light Transport更完善,不僅有Primary Specular(R mode) , 還包括光線在頭髮纖維髓質內折射後再次出射Transmission(TT mode), 光線在頭髮纖維髓質內多次反射後再次出射Secondary Specular(TRT mode),TRRT, GLINT等
R TRT Mode
TT Mode
- Marschner模型考慮到頭髮纖維的微觀結構,纖維外層的鱗片會對R, TT, TRT的路徑產生影響,光線在纖維內部的傳播也會受到菲尼爾,染色,吸收衰減的影響。另外,頭髮纖維的橫截面是橢圓,這個結構的設定可以通過微分方程的奇點計算出頭髮Glint效果。
Marschner Hair Model
Glint
這個模型基本模擬了所有較明顯的頭髮光照效果,因此在CG和遊戲領域被廣泛採用。
下面以Marschner. 2002. Light Scattering from Human Hair Fibers的論文以及UE4.20的實現來詳細介紹Marschner Hair Model的近似解析解。
假設我們要求解的頭髮纖維散射函式為 S(φi,θi,φr,θr)。通過幾何推導和實測資料驗證,S有三個特性:
- 光線在頭髮纖維中不管經歷多少次反射和折射,入射角和出射角的經度是一樣的。
- R, TT, TRT mode分佈在圓錐面上,圓錐面的母線和中軸線的夾角等於入射經線角(即入射光線和法線平面投影之間的夾角)。但受到頭髮纖維鱗片的作用,R會向髮根傾斜一定的角度,TT, TRT會向髮梢傾斜一定角度。
- S函式中經度角θ和方位角φ的依賴關係可以通過多項式分解提取出獨立的M(θ)和N(φ)
因此得到解析解的形式:
S(φi,θi,φr,θr) = ∑pM(θh) * N(φ)* A(p), p∈{R, TT, TRT, TRRT, GLINT........}
M為θ分佈函式,N為φ分佈函式,A = Absorption * Fresnel
(UE4裡只考慮前三項的影響,且只處理圓形橫截面)
- M項。如果頭髮纖維是光滑的,那麼M項應該是δ distribution。而實際上頭髮纖維的鱗片外層是粗糙的,所以這裡用了gaussian distribution。其中gaussian distribution的標準差對應的是纖維粗糙度,期望值對應鱗片外層會對光線產生的偏移。Digital Weta在後來的實驗中發現M項如果能部分依賴φ, 能更準確的計算backlit。由於對φ的依賴計算複雜,UE4只在最明顯的R mode使用了這個辦法, TT, TRT仍然使用gaussian distribution。
Mode
- N項。R的反射分佈使用Kajiya推導的解析解N = 1/4 * cos(φ/2)。Pixar. 2013. A Data-Driven Light Scattering Model for Hair發現柯西分佈和logistic分佈比高斯分佈更利於取樣計算,所以UE4裡嘗試用logistic分佈估算N項: Ntt = exp(-3.65 * cosφ - 3.98), Ntrt=exp(17 * cosφ - 16.78)
Scattering Geometry (a)
Scatttering Geometry (b)
R,TT,TRT Cone
- A項。Fresnel是Schlick近似求解。R只有一次Fresnel計算, TT有兩次, TRT是三次。Absorption的關鍵是計算入射光線到纖維中心的距離(Scattering Geometry b)根據光線在頭髮纖維橫截面的傳播過程可以推匯出等式:φ(p, h)=2pγt - 2γi + pπ 。φ是入射光線和出射光線的方位角之差。求導以後可以到得TT, TRT的h解。TT的解有一個, TRT的解有一個或者三個。其中htt = sign(φ)cos(φ/2)/√(1 + a*a - 2 * a *sign(φ)sign(φ/2)),htrt沒有解析解。UE4對htt, htrt做了簡化。htt≈(1 + a * (0.6 - 0.8 * cosφ)) * cos(φ/2). 而TRT的lobe只用一個,用√3/2估算。通過h的值便可以得到光線在纖維內部的路徑,從而得出absorption項,當然也是近似值。Ttt = pow(color, 0.5 *√(1 - h*h*a*a) /2 *cos(θd)), Ttrt=pow(color, 0.8/cos(θd))
最後還有scattering diffuse. 這一項的physically based計算非常複雜,UE4對這部分做了最簡單的處理,參考了Kajiaya的diffuse term,同時用經驗值和視線矯正過的NoL做了線性插值。UE4 Hair Shading Model作者也認為這部分的優化空間很大。Marschner.2008.Efficient Multiple Scattering in Hair Using Spherical Harmonics是一個很好的參考改進方案。
左:Kajiya 中: Marschner 右: 實拍效果
造型設計
頭髮的造型設計本來是純美術的工作,但是因為操作方式太繁瑣的原因,導致角色美術師普遍不喜歡製作頭髮部分。這一塊可以根據角色美術師常用的建模習慣,在DCC軟體內構建一個快捷環境,視訊是筆者開發的類似功能展示,可以提升角色頭髮造型設計的效率。
插片製作 A Non-Destructive Method
接上篇,用Xgen打型輸出的Primitive無法參與實時渲染,最終還是要轉成面片的形式。以第三方外掛Ornatrix為例,介紹一種Non-Destructive插片製作頭髮技法。頭髮插片一般分3層: 打底層,中間過渡層,最外層。下面介紹下最外層頭髮面片生成的流程基本設定。
所謂Non-Destructive是指製作流程中的每個環節都是單獨模組化,對輸入和輸出的任何修改操作,都不會對其他環節造成破壞。而且每個環節對應一個節點,操作直觀簡單,還可以反覆疊加,創作更復雜的效果。
Ornatrix提供有SDK和Python介面,TA更可以在其基礎上開發流程工具,進一步提升效率,大大縮短頭髮製作的時間週期。
附:騰訊光子工作室群技術美術組招聘 Shading Tech Artist(含實習生,長期有效)
作者:大星星
專欄地址:https://zhuanlan.zhihu.com/p/43000575
相關文章
- 遊戲角色製作行業標準? 快來看看吧遊戲行業
- Unity製作特寫鏡頭Unity
- 製作遊戲人物頭部的21個小技巧遊戲
- 3D遊戲角色模型建模| ZBrush製作3D獸人3D遊戲模型ZBrush
- 小遊戲的製作遊戲
- “侍道”系列新傳:當寫實風格武士動作遊戲遇到無厘頭遊戲
- 遊戲巨頭齊聚 Unite Shanghai 2019,揭祕爆款遊戲製作精彩亮點!遊戲AI
- 製作遊戲的遊戲:創作樂趣的樂趣遊戲
- 使用Unity製作遊戲AIUnity遊戲AI
- 遊戲雜談:大製作遊戲和小製作遊戲,在開發思路方式上的差別遊戲
- 如何低成本製作遊戲音效遊戲
- 為什麼遊戲廠商熱衷於製作不實遊戲廣告遊戲
- 教你從頭寫遊戲伺服器框架遊戲伺服器框架
- Python製作太空射擊小遊戲!Python遊戲
- 如何用Python製作自己的遊戲Python遊戲
- 製作遊戲載入進度條遊戲
- 遊戲角色設計思路遊戲
- 巨人網路製作人聊遊戲長留: 提高遊戲長留是遊戲製作終極追求遊戲
- UE4藍圖AI角色製作(三)AI
- 底層搭建:踏入動作遊戲的製作階段遊戲
- GAMEHACK 2021 紀實:關於中國遊戲製作的百態GAM遊戲
- 遊戲特效有哪些製作的分類遊戲特效
- Microsoft + Perforce:遊戲製作的全新構想ROS遊戲
- 為角色外表注入“靈魂”的動畫製作動畫
- 微信吸粉小遊戲怎麼製作?中秋節微信公眾號吸粉小遊戲製作教程遊戲
- 《最終幻想7:重製版》遊戲音訊製作分享遊戲音訊
- 遊戲音樂的認識與製作三遊戲
- 製作3D小汽車遊戲(上)3D遊戲
- 製作3D小汽車遊戲(下)3D遊戲
- 從多維度塑造角色,讓遊戲角色“活”起來遊戲
- 寫實角色合理性設計
- 用虛幻引擎製作逼真毛髮:獲取白皮書!
- 使用 GAN 生成新的遊戲角色遊戲
- FANTASIAN for Mac(RPG角色扮演遊戲)Mac遊戲
- 萬彩動畫大師教程 | 如何製作角色表情動畫
- three.js 製作邏輯轉體遊戲(上)JS遊戲
- three.js 製作邏輯轉體遊戲(下)JS遊戲
- 我對SLG遊戲製作的一些思考遊戲