Shader筆記-屬性的設置

寫在前面,終于開始學習這神奇的東東。

OpenGL與DirectX都是渲染的一個工具。shader可以認為一種渲染命令,由OpenGL或者DirectX解析。

使用的Shader Lab語言來編寫shader

分為兩種類型shader表面著色器和頂點/片元著色器

下面是所有Shader的屬性類型設置及一些標志的使用方法,同時也可以看到整個shader的基本結構如此。

Shader"BanMing/FirstShader"{//這里設置shader在material的選項的位置,這里的名字可以跟文件不同
    Properties{
        //公共屬性可調節的
        //屬性名(“外部顯示屬性名”,類型)=初始化值
        _Color("Color",Color)=(1,1,1,1)
        _Vector("Vector",Vector)=(0,0,0,0)
        _Int("Int",Int)=1
        _Float("Float",Float)=1.5
        _Range("Range",Range(1,11))=7
        _Texture("Texture", 2D) = "white" { }
        _Cube("Cube",Cube) = "white" {}//天空盒子
        _3D("3D",3D) = "white" {}

        //下拉菜單
        [KeywordEnum(None, Add, Multiply)] _Overlay("Overlay mode", Float) = 0

        //選擇
        [Toggle] _Invert("Invert color?", Float) = 0

        [Toggle(ENABLE_FANCY)] _Fancy("Fancy?", Float) = 0

        [Enum(MyEnum)] _Blend("Blend mode", Float) = 1

        [Enum(One,1,SrcAlpha,5] _Blend2("Blend mode subset", Float) = 1

            [HideInInspector]
        _Color("Main Color", Color) = (1,0.5,0.5,1)
        _WaveScale("Wave scale", Range(0.02,0.15)) = 0.07 // sliders

    }
    //可以很多個,可以在不同的顯卡上運行
    SubShader{
        //必須有一個Pass塊 其中是編寫方法
        Pass{
        //這里必須需要注明使用什么語言編寫
        CGPROGRAM
        //這里定義屬性,4個值的屬性就使用float4,1個的就使用float,貼圖就是使用sampler2D
        float4 _Color;
        float4 _Vector;
        float _Int;
        float Range;
        sampler2D _Texture;
        samplerCube _Cube;
        sampler3D _3D;
        //用float的地方都可以使用fixed與half代替,他們的區別就是范圍。
        //float 32位 一般用于位置信息存儲
        //half 16位 -6萬~6萬
       //fixed 11位 -2~2 一般用于顏色信息存儲
        ENDCG
        }
    }
    //當上面的所有shader效果當前顯卡都不支持,就選擇下面這個
    fallback "Diffuse"
}

Properties { Property [Property ...] }

定義屬性塊,其中可包含多個屬性,其定義如下:

name ("display name", Range (min, max)) =number

定義浮點數屬性,在檢視器中可通過一個標注最大最小值的滑條來修改。

name ("display name", Color) =(number,number,number,number)

定義顏色屬性

name ("display name", 2D) = "name" {options }

定義2D紋理屬性

name ("display name", Rect) = "name"{ options }

定義長方形(非2次方)紋理屬性

name ("display name", Cube) = "name"{ options }

定義立方貼圖紋理屬性

name ("display name", Float) = number

定義浮點數屬性

name ("display name", Vector) =(number,number,number,number)

定義一個四元素的容器(相當于Vector4)屬性

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容