材質不夠渲染湊——九流美術的自我救贖之路
最近呢作為一個非常菜非常萌新的美術,本人嘗試自學了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
相關文章
- css菜雞的自我救贖CSS
- 一個拖延症患者的自我救贖!
- 一個頹廢男人的自我救贖
- 逸仙電商自我救贖,曙光若現?
- 自我救贖 → 利用 IDEA 和 Spring Boot 搭建 SSMIdeaSpring BootSSM
- 智慧電視“套娃式”收費背後的自我救贖
- 一位拖延症患者程式設計師的自我救贖!程式設計師
- 疫情之下,民宿行業的生死掙扎與自我救贖行業
- 【職場往事】卷不動的當下,功能測試該何去何從??完成自我的救贖
- 天辰的救贖(JS)第一章(救贖之地)JS
- 速度不夠,管道來湊——Redis管道技術Redis
- Stupid && 祖傳Fortran程式碼救贖之路(編譯Dll)編譯
- 《極樂迪斯科》IGN 評測 9.6 分:在探案救人的過程中自我救贖
- RTX光線追蹤帶給使命召喚的畫質救贖
- 《愛麗絲:瘋狂迴歸》:創傷後應激障礙者的自我救贖
- GitHub 熱點速覽 Vol.27:程式設計師的自我救贖——GitHub 摸魚Github程式設計師
- 「技美之路 第07篇」圖形 2.2 模型與材質基礎模型
- 程式碼故事:漢德的救贖
- Steam好評率47%到74%,2019爭議最大國產獨立遊戲的自我救贖遊戲
- ProBuilder快速原型開發技術 ---不規則模型與材質UI原型模型
- Unity Shader之雙面材質和多Pass渲染Unity
- 正確的塔與殘暴的美——攀登惡行與救贖的《幽靈行者》
- 園子的困境:技術社群的自我革新之路
- 《推理學院》玩家創作故事:救贖
- 聯想開啟物聯網救贖
- 材質
- 零宣發拿下98%好評率,三上真司用一款“音遊+”完成自我救贖
- 達觀資料:資料不夠?GAN來湊!
- 上帝和 Istio 打架時,程式設計師如何自我救贖? —— 記一次 Envoy Filter 修正任性HTTP Header程式設計師FilterHTTPHeader
- 騰訊關聯公司入股暗星科技,後者為《救贖之路》遊戲開發商遊戲開發
- 修改材質
- 後疫情時代,酒店行業的掙扎與救贖!行業
- 《極品飛車 熱度》:挽救系列口碑的救贖之作
- 《柳葉刀》子刊:睡眠不夠,運動來……湊不了!
- 技術不夠,外掛來湊,小心遠控木馬“上身”爆發隱私危機
- 天辰的救贖(JS)第四章(組合元素)JS
- 松田洋祐式的“救贖”,Square Enix找到了自己的靈魂
- 天辰的救贖(JS)第三章(胖虎的指引)JS