本系列文章由@淺墨_毛星云 出品,)
Unity內(nèi)置的矩陣UNITY_MATRIX_IT_MV,是UNITY_MATRIX_MV的逆轉(zhuǎn)置矩陣,其作用正是將法線從模型空間轉(zhuǎn)換到觀察空間。于是頂點(diǎn)著色器vert中的這兩句代碼就很容易理解了:
//MatCap坐標(biāo)準(zhǔn)備:將法線從模型空間轉(zhuǎn)換到觀察空間,存儲(chǔ)于TEXCOORD1的后兩個(gè)紋理坐標(biāo)zwoutput.diffuseUVAndMatCapCoords.z =dot(normalize(UNITY_MATRIX_IT_MV[0].xyz), normalize(input.normal));output.diffuseUVAndMatCapCoords.w= dot(normalize(UNITY_MATRIX_IT_MV[1].xyz), normalize(input.normal));而得到的視圖空間的法線,區(qū)域是[-1,1],要轉(zhuǎn)換到提取紋理UV的區(qū)域[0,1],就需要乘以0.5并加上0.5,那么頂點(diǎn)著色器vert中接下來(lái)的的這句代碼也就可以理解了:
//歸一化的法線值區(qū)間[-1,1]轉(zhuǎn)換到適用于紋理的區(qū)間[0,1]output.diffuseUVAndMatCapCoords.zw= output.diffuseUVAndMatCapCoords.zw * 0.5 + 0.5;稍后,在片元著色器frag中,用在頂點(diǎn)著色器vert中準(zhǔn)備好的法線轉(zhuǎn)換成的UV值,提取出MatCap的光照細(xì)節(jié)即可:
//從提供的MatCap紋理中,提取出對(duì)應(yīng)光照信息float3matCapColor = tex2D(_MatCap, input.diffuseUVAndMatCapCoords.zw).rgb;此Car Paint Shader其他實(shí)現(xiàn),主要就是一些基本的Shader知識(shí)點(diǎn)的配合,如頂點(diǎn)坐標(biāo)轉(zhuǎn)換,反射,漫反射,細(xì)節(jié)紋理的計(jì)算,都是比較基礎(chǔ)的內(nèi)容,這里就不再贅述,直接看Shader源碼即可。
最后看幾張截圖,然后就是相關(guān)Shader與MatCap資源的下載:
五、Shader源碼與MatCap資源下載
從Github下載:
【Github】Shader源碼與相關(guān)MatCap資源下載
參考與延伸
[1] http://wiki.unity3d.com/index.php/MatCap
[2] https://www.assetstore.unity3d.com/en/#!/content/8221
[3] http://blog.csdn.net/cubesky/article/details/38682975
[4] https://www.assetstore.unity3d.com/en/#!/content/76361
[5] http://www.cnblogs.com/flytrace/p/3379816.html
[6] http://www.cnblogs.com/flytrace/p/3395911.html
[7] http://digitalrune.github.io/DigitalRune-Documentation/html/9a8c8b37-b996-477a-aeab-5d92714be3ca.htm
[8] https://forum.unity3d.com/threads/_object2world-or-unity_matrix_it_mv.112446/
[9]http://www.lighthouse3d.com/tutorials/glsl-12-tutorial/the-normal-matrix
With Best Wishes.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注