【學(xué)習(xí)筆記】3D風(fēng)格化角色渲染 (卡通渲染/三渲二/NPR)


????只對原理進行簡單科普總結(jié),僅代表個人、當(dāng)時的觀點。第一次寫專欄,沒什么排版經(jīng)驗,有點亂,見諒??
????經(jīng)過這段時間四處查找資料,發(fā)現(xiàn)日式三渲二玩得好的大佬和做MMD的大佬有很大一部分重合。原理都差不多,只是在游戲引擎中和在建模動畫軟件中實現(xiàn)的方式有些不同。前者優(yōu)化較好擅長實時渲染,后者質(zhì)量更高適合離線渲染。(其實只要技術(shù)夠牛,做出來的效果都會很棒)

目錄
????效果演示
????三渲二游戲角色貼圖拆包
????技術(shù)簡析
????? ? 一、臉部漫反射——階梯狀的動態(tài)陰影
????????????1.基于有向距離場(SDF)實現(xiàn)的面部陰影
????????????????2.包裹體法線
????????????3.模型拓撲+法線修改
????????二、身體漫反射——動態(tài)陰影、靜態(tài)陰影
????????????1.ramp降低色階
????????????2.冷暖色調(diào)分離
????????三、描邊
????????????????1.基于法線和視角計算得到的描邊
????????????????2.基于幾何方法生成的描邊
????????????????????????a.將物體改用正面剔除再渲染一遍
????????????????????????b.將頂點沿法向膨脹一定距離
????????????????????????c.物體背面的三角面每一條邊沿法向移動一段距離
????????????????3. 基于圖像后處理的描邊
????????????????4.本村線(處理衣物褶皺等內(nèi)描邊)
????????四、高光
????????????????1.特定形狀的高光
????????????????2.頭發(fā)的高光(天使環(huán))
????????????????????????a.基于各向異性
????????????????????????b.基于UV
????????五、邊緣光——菲涅爾
????????六、其他效果
????????????????1.明暗交界線
????????????????2.陰影顏色統(tǒng)一
????????????????3.皮膚次表面散射
????????????????4.為實現(xiàn)畫面效果,面對鏡頭產(chǎn)生畸變

效果演示
下面是加三渲二shader前后的對比圖(請忽視裙子背面渲染錯誤? 幾個月以前的圖了,很難修)


下面是身體漫反射的對比圖


下面是調(diào)節(jié)描邊粗細的對比圖(使用的是基于模型面法線和視角計算得到的描邊)



三渲二游戲角色貼圖拆包
以原神為例,看一下角色的貼圖有哪幾種:
Albedo 基本色
metal 金屬
ramp 色塊漸變
lightmap 皮膚、陰影、高光?????
? ????R——高光強弱??????G——陰影權(quán)重??????B——高光范圍
????在研究一位up主利用blender還原原神渲染的工程時,發(fā)現(xiàn)工程中只有【Albedo 基本色】和【lightmap 皮膚、陰影、高光】兩張貼圖同樣較完美地實現(xiàn)了效果,但使用了大量且繁雜的節(jié)點。實際在游戲中應(yīng)該為了節(jié)省算力,用現(xiàn)有的貼圖代替了渲染運算。

技術(shù)簡析
下面重點介紹各種主要效果和實現(xiàn)思路:
(我也是剛接觸的菜鳥學(xué)生,不少知識都比較缺乏,因此講得很簡略,建議逛知乎,一些在職的TA大佬寫了很多文章,講的都非常好)
一、臉部漫反射——階梯狀的動態(tài)陰影
????如果沒有這一步,角色面部如劉海、下巴、顴骨、鼻子的陰影會非常僵硬的投射在臉上,非常難看。如下圖:

????下面講幾種調(diào)整面部陰影的方法:
1.基于有向距離場(SDF)實現(xiàn)的面部陰影

????簡單來說就是用多張黑白圖生成一張閾值圖,通過修改閾值來控制陰影形狀(上圖)
也是原神中采用的方法。
????參考文獻:https://zhuanlan.zhihu.com/p/361716315【卡通渲染之基于SDF生成面部陰影貼圖的效果實現(xiàn)(URP)】
2.包裹體法線

????主要使用球包裹體或結(jié)構(gòu)簡單的包裹體法線去映射到面部法線上,使面部顯示出對應(yīng)包裹體的陰影形狀。
????這種方式操作簡單,效果也簡單就是包裹體的陰影,支持的場景比較有限。以面部模型為基礎(chǔ)簡化的包裹體也很難有理想的效果,所以應(yīng)用上不算廣泛。(我自己做著玩就用這種,畢竟簡單方便,而且菜狗也弄不好另外兩種,技術(shù)力人手都跟不上)
3.模型拓撲+法線修改

????罪惡王冠中分享的方法,法線修改的plus版,是應(yīng)用比較廣泛的修正方式。即把模型拓撲也改成對應(yīng)陰影形狀的拓撲,在此基礎(chǔ)上調(diào)整法線,從而得到拓撲結(jié)構(gòu)中的陰影形狀。
????拓撲的方式可以調(diào)整出理想的形狀,不過法線的調(diào)整是非常繁瑣與耗時的,并且這種方式會導(dǎo)致陰影產(chǎn)生跳變,即在兩種陰影形態(tài)之間會快速切換。
????參考文獻:https://zhuanlan.zhihu.com/p/411188212【二次元角色卡通渲染—面部篇】
????這一部分基本是這篇文章的概括,想詳細了解可以去原文那里,大佬很牛,寫得非常詳細,值得收藏仔細研究。
二、身體漫反射——動態(tài)陰影、靜態(tài)陰影
1.ramp降低色階

????即用一張ramp貼圖的uv映射到光照模型(如半蘭伯特)中,來控制漫反射的顏色。可以做出好看的光影漸變效果。ramp貼圖可由美術(shù)制作并調(diào)整,實現(xiàn)指定的效果。
????參考文獻:https://zhuanlan.zhihu.com/p/248998437【技你太美_UE4_Ramp生成器_仿原神皮膚shader】
2.冷暖色調(diào)分離

三、描邊
1.基于法線和視角計算得到的描邊

????這部分的計算依賴于我們的一個直覺觀察:當(dāng)我們的視線和某個表面相切時,這個表面上的像素點往往就是模型的邊緣,基于這個觀察,我們可以用dot(viewDir, normal)^{k} 來估計一個像素的“邊緣程度”,當(dāng)然,這個值也可以用來作為紋理坐標去采樣一張預(yù)定義的“輪廓紋理”。
2.基于幾何方法生成的描邊
????這類方法的特點是描邊本身是一個單獨的幾何體,通過特殊的方法繪制出描邊。
????a.將物體改用正面剔除再渲染一遍

????首先在繪制結(jié)束正常的模型后,將需要描邊的物體改用正面剔除再繪制一遍,在VS中將頂點沿著法線方向膨脹一定距離,然后在FS中將模型用純色輸出。
????b.將頂點沿法向膨脹一定距離

????Triangle Shell(三角面背面擴張法)是過程式的幾何描邊中最廣為使用的算法。其算法核心是將頂點沿著法線方向移動一段距離,并且為了讓擴張的背面不會因法線的方向過多地向Z軸的負方向移動(相機方向),從而蓋住原本的物體的正面,我們需要手動設(shè)置在轉(zhuǎn)換到觀察空間下的法線的Z值
????c.物體背面的三角面每一條邊沿法向移動一段距離

????Triangle fattening法是將物體背面的三角面的每一條邊沿著法線方向移動一段距離。但由于三角形角度的不同,可能造成某一個角附近的描邊特別厚,正如左上圖。
????總結(jié):原理簡單,容易實現(xiàn),而且對于大多數(shù)物體來說都能有著不錯的描邊效果,但因為有兩個Pass,需要對Mesh進行兩次繪制,性能上有一定的開銷。
3. 基于圖像后處理的描邊
????這類方法的實現(xiàn)可以說更接近于“邊緣”這一概念的本質(zhì)定義,什么是“邊緣”呢?邊緣就是在深度或者法線上不連續(xù)的位置。因此為了獲取邊緣,我們只需要在圖片上找到深度或者法線不連續(xù)的位置即可,因此,我們需要將深度信息和法線信息以貼圖的形式傳入,運用邊緣檢測算法去尋找這些像素。這類方法的優(yōu)點是描邊的線寬一致,缺點是需要額外的法線和深度信息,當(dāng)然,由于近年來流行的延遲渲染框架,法線和深度本來就是G-Buffer的一部分,因此往往不需要額外繪制法線和深度的信息。

????采用sobel算子對法線、深度圖進行處理再合成(如無主之地系列)
4.本村線(處理衣物褶皺等內(nèi)描邊)
????除了常見的外描邊以外,有時為了表現(xiàn)衣服上的褶皺等折痕,美術(shù)會做一張紋理貼圖來儲存褶皺的形狀。在游戲《罪惡裝備》里,就使用了這類貼圖。

????本村線貼圖有一個很顯眼的特點:所有的線橫平豎直。這是因為如果有斜向的線段,在UV采樣中會產(chǎn)生鋸齒。

????所以,使用本村線的UV是經(jīng)過美術(shù)特殊處理的,對于美術(shù)來說相比普通的展UV會多費一些功夫。

四、高光
1.特定形狀的高光
(這部分筆記很亂,怕有錯漏,待補充)
2.頭發(fā)的高光(天使環(huán))

????a.基于各向異性
????????① Kajiya-Kay 模型
????????????在Kajiya-Kay模型中,頭發(fā)的高光不再是使用簡單的法線向量和半角向量的內(nèi)積值,而是使用了頭發(fā)的切線方向來代替法線方向。


????????②Marschner 模型
????真實頭發(fā)的光路是更加復(fù)雜,光路傳播包含三部分:R,、TRT 、TT
????Marschner 模型更進一步,采用兩種高光(一組低頻和一組高頻),使得模擬的效果更為真實。

????b.基于UV
各向異性的計算相對復(fù)雜,可控性較差,有時就直接畫在UV上。

五、邊緣光——菲涅爾


六、其他效果
1.明暗交界線


很多動漫和游戲中為了強調(diào)明暗交界、兼顧美觀,會在兩種色塊之間添加一條偏紅的分界線。實現(xiàn)方法有ramp圖和函數(shù)計算等。
2.陰影顏色統(tǒng)一

如上圖,暗面分為“陰”與“影”兩部分,物體偏暗的被光面稱為“陰”,投射在其他物體上的影子為“影”。若陰與影顏色一致,色調(diào)會更加干凈。光感更好、更加卡通。
3.皮膚次表面散射

次表面散射(Sub-Surface-Scattering)簡稱SSS,用來描述光線穿過透明/半透明表面時發(fā)生散射的照明現(xiàn)象,是指光從表面進入物體經(jīng)過內(nèi)部散射,然后又通過物體表面的其他頂點出射的光線傳遞過程。
用人話來說,就是把手指放在手電筒前,光線透過手指射出的光不是皮膚的黃色,而是內(nèi)部血液的紅色。
在渲染中為皮膚添加特定的SSS將會體現(xiàn)出一些紅潤效果,更加真實(也更澀了)。
4.為實現(xiàn)畫面效果,面對鏡頭產(chǎn)生畸變


顯然,很多動漫中的比例與形狀并不嚴格符合透視原理(上圖)。
有時為了夸張而對肢體進行一定程度的形變(高分少女、jojo等);有時為了面部美觀而對五官進行扭曲(各種非正面角度的面部鏡頭,特別是側(cè)顏),不但不會翻車,反而更加好看。
但游戲的實時渲染中鏡頭角度有不可預(yù)測性,如果做不好很可能會引起恐怖谷效應(yīng)(印斯茅斯面容.jpg),因此更多用于CG中或視角變化較少的游戲中。

把這些技術(shù)列出來做成一個目錄而已,不少東西還有待研究
感覺說了很多,實際上啥也沒深入??
大概是給外行科普用的吧
