溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ShaderLab學(xué)習(xí)小結(jié)(一)最簡(jiǎn)化的頂點(diǎn)片斷Shader

發(fā)布時(shí)間:2020-06-06 20:49:12 來源:網(wǎng)絡(luò) 閱讀:1933 作者:lreach 欄目:游戲開發(fā)

我會(huì)把這段時(shí)間學(xué)的shader知識(shí),一篇篇的寫出來,并不高深,我是初學(xué)者,而且還在學(xué)習(xí)中,就是做個(gè)總結(jié)以及備忘。如果能夠?qū)δ阌袔椭?,那再好不過,如果發(fā)現(xiàn)我寫的內(nèi)容有不正確的地方,也請(qǐng)多多指教。
運(yùn)行環(huán)境:
Win10 x64
Unity 5.5.4

Shader "Custom/SimpleShader"  //Shader最外層,""中定義Shader名
{
    SubShader{    //必要組成部分
        pass{           //通道
                CGPROGRAM      //CG程序開頭
                    #pragma vertex vert    //定義頂點(diǎn)級(jí)程序
                    #pragma fragment frag   //定義片斷級(jí)程序
                    #include "unitycg.cginc"   //引用unitycg文件,unity自定的結(jié)構(gòu)體和函數(shù)等
                    struct v2f{                           //自定義結(jié)構(gòu)體,作為vert函數(shù)的返回值
                        float4 pos:POSITION;  //位置,最基本的屬性,屏幕上正確顯示此物體的形狀和位置
                    };
                    v2f vert(appdata_base v)       //頂點(diǎn)級(jí)程序,appdata_base定義在unitycg.cginc中
                    {
                        v2f o;
                            o.pos=mul(UNITY_MATRIX_MVP, v.vertex);    //將原始的物體坐標(biāo)系坐標(biāo)轉(zhuǎn)化至投影坐標(biāo)系坐標(biāo)
                            return o;
                    }
                    fixed4 frag(v2f IN):COLOR
                    {
                        fixed4 col=fixed4(1,1,1,1);  //定義顏色為純白rgba
                            return col;
                    }
                    ENDCG      //CG程序結(jié)尾
            }
    }
}

ShaderLab學(xué)習(xí)小結(jié)(一)最簡(jiǎn)化的頂點(diǎn)片斷Shader
如上圖,使用這個(gè)最簡(jiǎn)Shader材質(zhì)的Cube只是顯示純白色,和光照什么的沒有任何關(guān)系,也沒有陰影。
在頂點(diǎn)程序vert中,轉(zhuǎn)換物體坐標(biāo)至投影坐標(biāo)系,使物體在顯示屏上能正確顯示(形狀及位置)
將定義好的v2f輸出,在片斷程序frag中輸入來自頂點(diǎn)程序的v2f,定義一個(gè)顏色,并輸出。
最終Cube具有正確的形狀和位置,只顯示純白色。

在頂點(diǎn)程序vert中,mul函數(shù)是cg函數(shù),作用是矩陣變換。如本例
mul(UNITY_MATRIX_MVP, v.vertex);
將物體原始的自身物體坐標(biāo)系坐標(biāo),四維向量v.vertex用UNITY_MATRIX_MVP轉(zhuǎn)化至投影(屏幕)坐標(biāo)系。
UNITY_MATRIX_MVP是內(nèi)建矩陣,直接使用。
appdata_base定義在unitycg.cginc中,通過#include "unitycg.cginc"已經(jīng)將文件引用。

struct:結(jié)構(gòu)體
float4:float類型的四維向量 (x,y,z,w)或(r,g,b,a)
fixed4:fixed類型的四維向量 (x,y,z,w)或(r,g,b,a),精度不高,但用于顏色足夠了
fixed4 frag(v2f IN):COLOR,其中:COLOR是語義定義,說明這個(gè)程序輸出的是顏色,不定義會(huì)報(bào)錯(cuò)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI