MatCap:低成本PBR的原理與實(shí)現(xiàn)

MatCap是Material Capture的縮寫(xiě),意為“材質(zhì)捕獲”;?
Matcap Shader是一種在某些層面能替代甚至超越PBR的次時(shí)代渲染方案;?
它的效率極高、計(jì)算成本極低,顯示效果極佳,卻能完美運(yùn)行于不同的移動(dòng)平臺(tái),并兼容AR、VR設(shè)備,所以極具研究與實(shí)用價(jià)值;?
但Matcap也有很多局限性和缺點(diǎn),在今天的課程中,我就將給大家分享講解Matcap的實(shí)現(xiàn)原理和并實(shí)現(xiàn)matcap渲染,以及如何在以較低成本渲染的同時(shí),解決它的一些效果上的缺陷。
版權(quán)聲明
本文為“優(yōu)夢(mèng)創(chuàng)客”原創(chuàng)文章,您可以自由轉(zhuǎn)載,但必須加入完整的版權(quán)聲明
學(xué)習(xí)更多技術(shù)干貨,請(qǐng)加qq:1517069595或vx:alice17173(企業(yè)級(jí)性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項(xiàng)目實(shí)戰(zhàn)/每周直播/一對(duì)一指導(dǎo))
點(diǎn)贊、關(guān)注、分享可免費(fèi)獲得配套學(xué)習(xí)資源
詳細(xì)內(nèi)容可參考文末完整視頻
為什么要用MatCap

左邊:
每一個(gè)公式都對(duì)應(yīng)了一段Shader代碼,這里展示的是局部光照,而且這里并沒(méi)有把這些公式的計(jì)算過(guò)程展開(kāi),大家就已經(jīng)看到這么多公式了,展開(kāi)后對(duì)應(yīng)的渲染指令會(huì)更多,因此大家可以想象到這里的計(jì)算開(kāi)銷是比較大的。
這里還僅僅是采用了局部光照計(jì)算模型,如果我們采用更真實(shí)的基于物理的光照,也就是所謂的PBR,那么,計(jì)算的開(kāi)銷會(huì)更大!
右邊:
為什么要用MatCap?一句話說(shuō)就是:性能省、效果佳。
為什么性能省?是因?yàn)樗菑囊粡埣y理貼圖去采樣光照計(jì)算的結(jié)果
為什么效果佳?是因?yàn)檫@張貼圖直接來(lái)自于PBR光照渲染的結(jié)果,貼圖質(zhì)量高,渲染出來(lái)的光照質(zhì)量自然就高!
精確計(jì)算matcap節(jié)省的指令數(shù)那是另一個(gè)話題了,先說(shuō)結(jié)論:
大體上估算,一個(gè)較為完善的光照計(jì)算過(guò)程需要幾十條以上的圖形指令
而matcap只需要幾條,而且很多計(jì)算都可以在頂點(diǎn)階段完成,這樣就大大節(jié)省了性能
在我們學(xué)完了matcap原理后,相信大家也能理解這其中究竟省了多少渲染開(kāi)銷
MatCap原理
MatCap的基本原理比較簡(jiǎn)單:就是:
用一張MatCap貼圖作為渲染好的漫反射貼圖
用物體表面的法線對(duì)該貼圖進(jìn)行采樣
但是,說(shuō)起來(lái)簡(jiǎn)單,網(wǎng)上也有不少M(fèi)atCap實(shí)踐的文章,但是對(duì)于MatCap原理的介紹都囫圇吞棗,這里我們結(jié)合實(shí)戰(zhàn),給大家列舉一些MatCap容易被大家忽視的細(xì)節(jié),通過(guò)這些細(xì)節(jié),真正做到了解MatCap貼圖技術(shù)!
MatCap實(shí)戰(zhàn)
Step 1:建立正常物體表面貼圖

通常,一張貼圖可以表示物體表面細(xì)節(jié),如上圖所示,但是該圖不能表現(xiàn)物體的漫反射光照情況,因此我們把物體表面貼圖換成用于表示漫反射光照的自發(fā)光貼圖
Step 2:替換為MatCap貼圖

這張MatCap貼圖本來(lái)用于表現(xiàn)物體的邊緣光,但是我們注意到物體的中心位置也有邊緣光效果,因此這是錯(cuò)誤的!
換成球體可能更能發(fā)現(xiàn)問(wèn)題:MatCap貼圖的十字中心應(yīng)位于球體中部!

Step 3:為此我們用物體表面法線對(duì)物體進(jìn)行采樣

似乎更正確一點(diǎn)了,但是MatCap貼圖被重復(fù)了四次,因?yàn)榉ň€坐標(biāo)是介于【-1,-1】~【1,1】,相當(dāng)于把uv坐標(biāo)橫豎各重復(fù)了一次
Step 4:重新映射法線坐標(biāo)到【0,0】~【1,1】



上圖是從【-1,1】重映射到【0,1】


效果不太正確,從視角方向觀察到的MatCap貼圖應(yīng)當(dāng)是一致的!
Step 5:采用視圖空間法線
我們需要采用“視圖空間”法線進(jìn)行MatCap貼圖的采樣,具體原理較為復(fù)雜,可以參考Unity小白的TA之路


效果對(duì)了!都是邊緣發(fā)光:


那么問(wèn)題來(lái)了:法線跟MatCap貼圖是如何對(duì)應(yīng)的呢?如何制作一張正確的MatCap貼圖?
這里用文字描述會(huì)不太容易理解,建議配合視頻進(jìn)行學(xué)習(xí)(視頻地址見(jiàn)文末)


答案就在圖里!
拓展
用MatCap進(jìn)行卡通渲染

結(jié)合固有色貼圖獲得角色細(xì)節(jié)(有些額外細(xì)節(jié),可以觀看視頻)

替換材質(zhì)和MatCap Shader算法可以獲得更豐富的質(zhì)感:
文末掃碼領(lǐng)取MatCap材質(zhì)

MatCap的缺陷

MatCap Shader代碼實(shí)現(xiàn)
Shader Graph通常只適合用來(lái)做效果原型,在這里我們把它轉(zhuǎn)換為Shader代碼
文末加好友進(jìn)群學(xué)習(xí)如何手寫(xiě)Shader代碼,以及URP Shader

關(guān)于代碼的思考
同學(xué)們可以在文末跟帖討論:

MatCap進(jìn)階
這里只做總結(jié),具體技術(shù)詳解請(qǐng)見(jiàn)文末視頻(手打酸了,打不動(dòng)字了~~)
也可以加文末好友進(jìn)TA專屬訓(xùn)練營(yíng)






面試和作品要點(diǎn)解析
Matcap相比于PBR的性能優(yōu)化
Matcap各類問(wèn)題的解決思路
雷蒙德老師會(huì)針對(duì)游戲公司近年來(lái)的作品和招聘要求,給各位同學(xué)一對(duì)一指導(dǎo)作品創(chuàng)作,幫助各位同學(xué)創(chuàng)作與眾不同的作品效果~
寫(xiě)在最后
學(xué)習(xí)更多技術(shù)干貨,請(qǐng)加qq:1517069595或vx:alice17173(企業(yè)級(jí)性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項(xiàng)目實(shí)戰(zhàn)/每周直播/一對(duì)一指導(dǎo))
點(diǎn)贊、關(guān)注、分享可免費(fèi)獲得配套學(xué)習(xí)資源
詳細(xì)內(nèi)容可參考下方完整視頻
