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)属性

你可能感兴趣的:(Shader笔记-属性的设置)