版權(quán)聲明:本文為魁梧的摳腳大漢博主原創(chuàng)文章,遵循?CC 4.0 BY-SA?版權(quán)協(xié)議羽圃,轉(zhuǎn)載請附上原文出處鏈接和本聲明碳锈。
原文鏈接:https://blog.csdn.net/qq_16756235/article/details/80107917
第一卷已經(jīng)大概描述了一下什么是材質(zhì)寓搬,下面我們來對材質(zhì)作進(jìn)一步探索≡优恚現(xiàn)在的游戲工業(yè)大致有兩個走向,一個是真實(shí)向如刺客信條起源等木蹬。一個是風(fēng)格化向至耻,如塞爾達(dá),二之國等。特別是歐美等大作尘颓,都是喜歡寫實(shí)風(fēng)格是尖,但是其實(shí)不管是那種方向,其實(shí)都感覺你中有我我中有你泥耀。就拿神秘海域4來說,其實(shí)他寫實(shí)的背后也做了不少風(fēng)格化處理蛔添,這一點(diǎn)很好論證痰催,你拿刺客信條的畫面和神秘海域的做對比就能輕易發(fā)現(xiàn),各個寫實(shí)類游戲都有自己的風(fēng)格化的東西在里面迎瞧。一提到寫實(shí)我們會常常聽到PBR夸溶。所以到底什么是PBR呢?
PBR顧名思義凶硅,基于物理的渲染缝裁,可以更加準(zhǔn)確地表示光和表面的相互作用。PBR其實(shí)是一套渲染方案足绅,它不是一個材質(zhì)球捷绑,不是幾張貼圖,不是SubstancePainterG饴琛4馕邸!我們在做PBR材質(zhì)的時候首量,需要讓我們的貼圖是基于物理的壮吩,我們的shader是基于物理的,我們的燈光是基于物理的加缘,我們的攝像機(jī)需要是基于物理的等等鸭叙。如果只是shader的計(jì)算是基于物理的,那只能叫PBS拣宏。下面我們就來梳理一下PBR材質(zhì)制作過程沈贝。
很多美術(shù)被很多錯誤的理論所誤導(dǎo),比如有些人會去根據(jù)經(jīng)驗(yàn)蚀浆,金屬的metalic是多少缀程,布料的Rouph是多少。這些其實(shí)會變化的市俊,不同的引擎杨凑,不同的計(jì)算公式,這些值多多少少都會有變化摆昧,那么如何才能做出正確的效果呢撩满,最好的辦法就是在你們項(xiàng)目所在的環(huán)境下去實(shí)驗(yàn),找出正確的那幾個值。
我們可以做一個整列伺帘,這樣就一目了然了昭躺。
不同的項(xiàng)目不同的計(jì)算公式,這些值多多少少都會有所變化伪嫁,我們可以去挨個實(shí)驗(yàn)领炫,找出非金屬,高光塑料皮革张咳,亞光塑料皮革帝洪,高光金屬,亞光金屬的值脚猾,然后把這個值記錄下來葱峡,以后就按照這個值去做。當(dāng)然會有偏移龙助,偏移造成的主要原因是臟跡掛痕造成的砰奕。
其實(shí)現(xiàn)在業(yè)界流行的這套PBR材質(zhì)模型能夠描述游戲內(nèi)90%的材質(zhì)效果,如金屬石頭提鸟,沙子泥土等等军援,但是這并不意味著有了這個我們能做一切事情了倡缠,有些比較特別的材質(zhì)如寶石伊群,頭發(fā)贰盗,皮膚党瓮,眼睛氨距,絨布揭糕,皮毛赚导,羽毛等可能現(xiàn)在的這套比較流行的PBR材質(zhì)模型就不適用了尚粘。而且PBR材質(zhì)模型也有很多種蝗蛙,更多詳情可以去網(wǎng)上搜搜PhysicbasedRendring相關(guān)文章蝇庭。游戲內(nèi)使用的基于物理的渲染大部分也都是擬合的。為什么頭發(fā)布料不適用PBR那套模型公式呢捡硅?因?yàn)樵砭筒灰粯酉凇O肓私庠淼脑捴挥腥タ锤鞔笳撐牧耍赗TR3里有對這些公式模型的詳細(xì)描述壮韭。
第一:BaseColor
既然是基于物理的渲染北发,貼圖自然也要基于物理。BaseColor一般儲存為sRGB喷屋,線性空間中的顏色值琳拨。線性空間和gama空間的關(guān)系必須要搞清楚。一般顏色的計(jì)算這些都是線性空間下的屯曹。在制作PBR材質(zhì)的時候狱庇,Basecolor的亮度很有講究惊畏。非金屬的基本上應(yīng)該服從正太分布,然后金屬集中在240左右附近
可以把PS的圖像模式改成LAB模式密任,然后窗口打開直方圖來檢測BaseColor的制作是否合法颜启。
BaseColor一般應(yīng)該是一致的,平臺的浪讳,沒有過亮或過暗的缰盏,BaseColor應(yīng)該只包含純顏色信息不應(yīng)該有光影信息。顏色代表了非金屬材料的反射率淹遵,除了遮擋外乳规,應(yīng)該沒有光照信息,黑色值不應(yīng)該低于30 sRGB或50sRGB(如果材質(zhì)顏色低于的話合呐,你以為你是黑洞啊)笙以,亮度值不應(yīng)高于240 sRGB
第二:Normal
法線貼圖烘焙的時候主要是注意坐標(biāo)空間淌实,左右手坐標(biāo)系。杜絕手動PS這些操作猖腕。除非你有特異功能可以人眼光線追蹤拆祈。
第三:Metalic和Rouphness
金屬度和光滑度這一點(diǎn)上需要特別注意,因?yàn)镻BR模型其實(shí)是擬合的(也可以說是帶有一定trick的)倘感。所以其實(shí)并無法表現(xiàn)所有零到一各個數(shù)值的完美效果放坏,我們只能取其中一小段來使用會比較完美。這個取值范圍會根據(jù)不同的PBR模型不同的環(huán)境而變化老玛。具體值需要自己取實(shí)驗(yàn)淤年。
第四:貼圖使用
在貼圖的制作過程中,可能我們并不會刻意地去關(guān)心什么貼圖應(yīng)該繪制什么東西蜡豹◆锪福可能這個問題會有點(diǎn)奇怪,但是仔細(xì)想想镜廉,美術(shù)在貼圖制作過程中一般都是怎么好看怎么來弄诲,也不會刻意去關(guān)心到底貼圖里面應(yīng)該畫什么。舉個例子娇唯,布料的紋路到底應(yīng)該怎么表現(xiàn)呢齐遵?畫在Diffuse上?那那種有高光的布條怎么辦塔插?美術(shù)可能會說梗摇,這個好辦,在光滑度或者金屬度上也畫上去坝拥怼留美!但是問題就來了彰檬,貼圖就那么幾張。假設(shè)貼圖上能保存的我們?nèi)庋勰芸吹降募y理信息的總量是10單位谎砾,那么我們想盡可能多地表達(dá)我們的信息逢倍,那么就會涉及到儲存空間不夠用的問題。所以合理地分配什么信息儲存在什么貼圖上景图,可以有效地使我們貼圖的利用率更高较雕。比如水漬使用光滑度去表現(xiàn)就可以了,沒必要使用Diffuse或者別的挚币。這樣還能避免過噪和貼圖壓縮帶來的信息損失亮蒋。
在游戲開發(fā)過程中其實(shí)會常常遇見一個問題,模型到底應(yīng)該如何拆分妆毕?怎么建模怎么布線這些我就不多說了慎玖,這些都是角色師應(yīng)該知道的。我們站在材質(zhì)的角度上想這個問題笛粘。一個材質(zhì)至少是一次DrawCall趁怔,如果角色材質(zhì)過多,會導(dǎo)致DrawCall過多薪前,當(dāng)然DrawCall的多少和游戲運(yùn)行效率不是必然關(guān)系润努。那么我們應(yīng)該如何拆分模型呢?
可以確定的是示括,在其他外在因素一定的情況下铺浇,如果游戲瓶頸在Drawcall上的話,材質(zhì)數(shù)量越少越好垛膝。當(dāng)材質(zhì)計(jì)算很復(fù)雜的情況下鳍侣,可以把模型拆開使用兩個材質(zhì),可能效率反而還有所提升吼拥。單單就從效果上說的話拱她,如果引擎架構(gòu)是像Unreal那種分材質(zhì)模型或者光照模型的話,那么模型拆分就是根據(jù)光照模型的數(shù)量種類來拆扔罪,如果是像unity那種不分這些概念的話秉沼,那么就可以按照復(fù)雜度等因素來拆,其實(shí)這個還是一個比較靈活多變的概念矿酵,這里只是一個聲明行的論述唬复,希望引起大家的關(guān)注罷了。
有些人可能會疑問了全肮,這不是材質(zhì)么敞咧,跟動畫和物理模擬有關(guān)系么。其實(shí)是有一定關(guān)系的辜腺,我們需要知道一些相關(guān)的東西休建。比如我們制作布料材質(zhì)乍恐,我們需要去設(shè)定布料模擬狀態(tài)下布料的運(yùn)動狀態(tài)的物理硬度這些。布料的表現(xiàn)测砂,布料的物理模擬至少占了一半的比重茵烈。比如我們要做草的材質(zhì),這時候是需要考慮草的擺動因素的砌些,如果草的擺動通過操控頂點(diǎn)著色器來實(shí)現(xiàn)的話呜投。
至此我們大概描述了一下材質(zhì)的一些東西。后面我們就會開始實(shí)際動手制作研究材質(zhì)了存璃。