您好,登錄后才能下訂單哦!
Matcap Shader中的動態(tài)光照及機位與反射是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
傳統(tǒng)Matcap無法響應(yīng)光源與相機位置變化——也就是無法使用動態(tài)的光照、機位和反射
如下圖中,相機旋轉(zhuǎn),但無論從哪個方向看,模型都是受到同樣光照的——不會逆光!
順便說一句,今天我們要做的事情不需要代碼喲~~
提到圖片采樣模擬光照,Matcap之外有種更具名氣的方法,就是Cubemap(如下圖所示)
Cubemap的優(yōu)點是顯而易見的,能響應(yīng)旋轉(zhuǎn),因此是計算靜態(tài)反射的首選方法
所以有小伙伴提議用Cubemap代替Matcap,這是個很好的思路,值得贊揚
但Cubemap也有它自己的缺陷:
只能響應(yīng)相機變化,無法響應(yīng)光照變化
Cubemap繪制困難,相比之下,Matcap的繪制極為簡單和直觀
同分辨率時清晰度低于Matcap,高清晰度時占用內(nèi)存更大
若實時生成,成本極高(例如Realtime Reflection Probe)
所以我們接下來還是討論如何用Matcap解決光照和旋轉(zhuǎn)的問題,至于反射,還會用到Cubemap,但Cubemap采樣不會在Matcap Shader中計算
沒錯,很簡單的方法,我們利用RenderTexture實時渲染一張Matcap采樣圖就好了!
球體可以使用任何其他Shader,例如官方Standard Shader
存圖的相機通過CullingMask只渲染球體
大家可能會想,為什么不全用Standard Shader呢,用相機渲染RenderTexture效率不是更低了么?
其實不然,原因如下:
在正式項目中,一幀里需要渲染的物體數(shù)量會很多(例如100個),假如有兩個實時光,如果全用Standard Shader,不考慮Instancing,那Draw Call至少200以上,而且單次渲染的壓力會比Matcap大很多;而使用RenderTexture的方法,只需要1次Standard+100次Matcap,效率明顯高很多
如果需要多材質(zhì),可參考《Matcap Shader 詳解【4】 - 多材質(zhì)與混合材質(zhì)》,渲染兩三張Matcap,可以組合出場景中各種需要的材質(zhì)表現(xiàn)。而且多個Matcap也可以通過一個DC來渲染,不復(fù)雜,所以就不展開說明了~
RenderTexture的相機只用于渲染一個球體,所以效率還是很高的,遠(yuǎn)遠(yuǎn)超過RealTime Reflection Probe。
下面我們來看一下實現(xiàn)的效果(雙光源,除了主光源,還有一個反光):
如圖,當(dāng)相機旋轉(zhuǎn)的時候,Scene視圖右下角可以看到,Matcap圖會實時更新,所以Game視圖中繞到角色背后會有逆光效果
可與文章開頭的動圖對比
如圖,動態(tài)調(diào)整光照的旋轉(zhuǎn)方向(Scene視圖中),將實時反映到渲染結(jié)果上
Matcap的確可以利用Cubemap來實現(xiàn)反射,但是為了進一步提升效率,Cubemap沒有必要在Matcap中采樣,而是直接渲染到RenderTexture里就好
如下圖所示,Scene右下角可見,動態(tài)Matcap既有良好的反射結(jié)果,又有動態(tài)變化的明暗,而且想怎么轉(zhuǎn)就怎么轉(zhuǎn),結(jié)果可見Game視圖
注:此處使用的Cubemap就是文章開始給出的例圖,直接用在了光照設(shè)置中的環(huán)境反射上。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。