材質不夠渲染湊——九流美術的自我救贖之路

遊資網發表於2019-11-12
材質不夠渲染湊——九流美術的自我救贖之路

最近呢作為一個非常菜非常萌新的美術,本人嘗試自學了Substance Designer材質製作以及一些基本的打光技巧,但是一些文章和教程提到的所謂“光感”“體積感”“通透感”“層次感”之類的玄學詞彙不僅沒有找到詳盡科學的解釋,也沒提供一個理想的公式化的解決方案,所以這令本來就沒入門的我更是頭痛,然而,在進行渲染管線開發的時候,能夠留意到確實有一些可以量化的操作,來大幅度提升渲染效果,掩蓋住一些美術製作的短板,這篇文章就詳細介紹一下這類高效穩定對萌新友好的操作。

故事從材質製作開始,這一部分是確實沒什麼辦法的硬碰硬環節,所以只能硬著頭皮上,但是還是有一些奇妙的小技巧:

材質不夠渲染湊——九流美術的自我救贖之路

第一個技巧就是在無光照的情況下進行材質預覽,純灰色的反射和白色的鏡頭光可以很直觀的感受到材質的物理屬性,沒有了諸如環境反射,燈光顏色之類干擾的因素,這裡從燈罩的菲涅爾衰減度不難看出它是一個粗糙度在0.6-0.7左右的金屬,以及少量的鐵鏽,對於這種圓滑的曲面,使用較為粗糙的金屬可以有效減少場景中Bling Bling的元素,因為場景中閃爍的物件太多會讓看客第一眼注意到這裡,這並不是我們想要的。陶瓷,金屬水壺沒什麼可說的,值得一提的是這裡的木頭,木頭的紋路雖然已經盡本人所能了,但是依然製作的非常差勁,不過這問題並不大,因為這裡在木頭的Albedo上我們是使用了掃描材質的顏色,然後放置到暗處,讓高度法線等物理資訊對實際效果影響變得不那麼大。

材質不夠渲染湊——九流美術的自我救贖之路

地面材質的製作同樣無比粗糙,但還是那句話:問題不大。用一個Cell Map作為分割,首先在視覺效果複雜度上就要高於一塊完整的地面,同時使用Flood Fill節點隨機大量的色彩,即使配色再醜只要複雜度上去了看起來好像就沒那麼醜了。等一下我們還會用貼花對地面進行進一步處理,增加地面材質複雜程度。

接下來就是渲染部分,渲染部分可以做的Trick可就豐富得多了,第一個Trick是最原始的直接光照的顏色選擇,用高對比度的冷暖色調,可以很大程度的減少場景細節,所以我們這裡對月光和燈光分別使用了:(100, 166, 255)和(250, 187, 98)這兩個顏色,其中前者的藍色飽和度想必沿海地區的月光要略微偏紫色一點,飽和度也稍高一點,後者則是普通的燈光中偏紅顏色,這兩者都比照片裡的顏色飽和度稍高一點,但是又沒高太多,應該可以表現出一個不錯的效果。

第二個Trick是對於材質的一個微調,眾所周知,金屬度PBR工作流的高光實現非常簡單:lerp(0.04, albedo, metallic),而這個0.04純粹是魔法常量,這在SD中基本沒辦法修改,而現實中許多有微孔的物體,是會吸收一些高光的,這就導致大多數時候值會低於0.04,個別時候會高於0.04,大概是0.05左右,這裡我們只考慮低的。譬如木頭,粗糙的木頭有許多表面孔洞,即使是打磨過的桌子也不例外,因此我們將場景中的木頭的高光度降低到0.027,這麼做也是為了進一步掩蓋紋理的醜陋

第三個Trick是對貼花的使用,之前也講過,為了增加材質複雜度,MPipeline提供了一套非常強大的Forward Decal,而Forward Path的超強優勢這裡就體現出來了,那就是可以使用物體本身的高度圖進行混合,實現磚縫內汙垢的效果:

材質不夠渲染湊——九流美術的自我救贖之路
可以看到,磚縫內外有比較明顯的濃度差距

由於Tile based culling的原因,Decal運算效率較高,我們也在場景中擺上了大大小小的Decal,繼續掩蓋材質製作的不足。

到這裡時基本可以開始烘焙了,第一次烘焙對於光照的強度沒有什麼把握,經過兩次嘗試後烘出一個高精度的光照效果:

材質不夠渲染湊——九流美術的自我救贖之路
由於使用的是第三方的烘焙器GPU Bakery,因此圖片顯示的精度和實際精度不一致,實際精度高很多

GPU Bakery中對於直接光的陰影偏移是使用了球面隨機的,之前本人給某專案實現軟陰影烘焙時也實現了類似的效果,其演算法大致如此:

材質不夠渲染湊——九流美術的自我救贖之路

知道了演算法原理後,我們就可以在桌子上使用量角器計算出一個合適的軟陰影角度,也就比較容易一步到位調整出效果了。

到此光照的烘焙結果就比較滿意,接下來我們就開始進行後處理階段的Trick。

後處理階段比較值得處理的是霧和景深。我們之前文章中講過基於物理的霧效的實現,物理體積霧有Albedo,Emission, Transparency這三個特性,分別代表光線穿過霧時顯示的顏色,霧本身自發光的顏色(照明彈燃燒彈等效果)。這個場景想要表現冷暖對比感,那麼就有“暖霧+冷後效”和“冷霧+暖後效”兩種辦法,這兩種本人都有所嘗試,之後選擇了第二種方法,之所以要這麼選擇是因為這個場景的鏡頭始終在室內,這也就意味著近處會是暖色為主而遠處會是冷色為主,那麼遠處的霧就會比近處濃,如果使用暖霧,那麼遠處的暖色濃霧+冷色月光將會讓畫面色彩失調,所以這裡從畫面遠近分佈的情況決定使用冷色霧的方案。

材質不夠渲染湊——九流美術的自我救贖之路

那麼問題又來了,剛才月光不是烘焙的嗎?那怎麼實現體積霧呢?這當然有很好的解決方法,我們使用一個低精度的Cascade Shadowmap只渲染體積霧不渲染物體就可以了。所以這裡直接在管線中插入一個Bool變數決定是否要在Geometry Pass階段計算太陽光就萬事大吉了:

材質不夠渲染湊——九流美術的自我救贖之路

這樣就有了室內燈光和月光都有霧的投影的效果了,增加了畫面的平衡性:

材質不夠渲染湊——九流美術的自我救贖之路

對於景深調整,許多美術並沒有使用物理的引數,而是純憑感覺調,這毫無疑問是不正確的,因此我們需要點選螢幕的一個點就獲得這個點到攝像機的線性投影距離。好在計算這個對於MPipeline來說並不困難,由於管線中每個渲染步驟都是以Scriptable Object的形式儲存並例項化的,因此指令碼可以直接獲得某個渲染步驟,所以這裡我們直接獲得GeometryEvent,也就是負責渲染不透明物體的事件,並把讀深度的工作插入到所有不透明物體渲染之後:

材質不夠渲染湊——九流美術的自我救贖之路

Compute Shader中啟動一個1x1x1的Kernel把某個點的距離輸送到Buffer中:

材質不夠渲染湊——九流美術的自我救贖之路

接下來,把滑鼠放到你想聚焦的那個點上,按下空格,就可以得到這個點到攝像機的線性投影距離了,使用這個距離作為景深的Focal length非常合適,所以我們渲染的效果可以做到非常精準的景深表現:

材質不夠渲染湊——九流美術的自我救贖之路

材質不夠渲染湊——九流美術的自我救贖之路

總結:

在場景材質和打光方面,目前很少看到公式化,量化的規則統計與整理,所以本人一直處於一種叫天天不應叫地地不靈的狀態,一問就是“體積感”“層次感”這些莫名其妙的詞彙,確實讓本人深感頭痛。所以在本篇文章中,我們使用了一些把材質色彩和現實進行比對,公式化和計算化的燈光效果表現,以及對基於物理的霧效,後處理景深的使用等等。希望這篇文章能夠起到拋磚引玉的效果,接下來能夠看到更多工程化的場景製作技巧,以結束本人這種無頭蒼蠅式的學習研究,謝謝。


作者:MaxwellGeng
專欄地址:https://zhuanlan.zhihu.com/p/83671923

相關文章