Unity 的shader 属性

526 阅读2分钟

Properties语义块包含了一系列属性(property),这些属性将会出现在材质面板中。

Properties属性

属性定义:


Properties{
    _Color("ColorInspector",Color) = (1,1,1,1)
}

变量名:_Color

Inspector的面板上显示名称:ColorInspector

类型:Color

默认值:(1,1,1,1)

属性类型

有如下几种

Properties{
    _Color("Color",Color) = (1,1,1,1)//颜色
    _Vector("Vector",Vector) =  (3,2,3,1)//向量
    _Int("Int",Int) = 234//int类型
    _Float("Float",Float) = 1.2
    _Range("Range",Range(2,8)) = 6//范围值
    _2D("Texture",2D) = "red"{}//贴图
    _Cube("Cube",Cube) = "white"{}//天空盒
    _3D("Texure",3D) = "black"{}//3D贴图
}

Color:颜色

颜色属性是个四维分量,也就是由四个数值来组成的,每个数值代表着颜色的一个通道。四个数值依次为RGBA(红,绿,蓝,透明)。

RGB的取值是0-255(2的8次方个值域),在Shader中范围变为0-1,例如(1,1,1,1)显示为白色。

Properties{
  _Color("Color",Color) = (1,1,1,1)//颜色
}

image.png

Vector:向量

Properties{
    _Vector("Vector",Vector) = (3,2,3,1)
}

image.png

整型Int

Properties{
    _Int("Int",Int) = 234//int类型
}

image.png

浮点数Float

Properties{
      _Float("Float",Float) = 3.14
}

image.png

Range范围

Properties{
     _Range("Range",Range(2,8)) = 6//范围值
}

image.png

可拖动滑动条滑动

2D纹理

Properties{
      _MainTex("Main Tex",2D) = "white"{}//纹理贴图
}

image.png

默认值

2D纹理的默认值有以下几种:white、black、gray或者bump

如果不设置默认值,即=""{},则其实与="gray"{}相同;法线贴图设置为bump,意思是如果未使用法线贴图,则使用物体默认自带的法线。

Properties{
      _MainTex("Main Tex",2D) = "bump"{}//法线贴图
}

Shader内部会自动调用Unity内部准备的一张小图片,white就是纯白色,black就是纯黑色,gray就是灰色图,bump就是法线图。

Cube, 立方体纹理

Properties{
     _Cube("Cube",Cube) = "white"{}//天空盒
}

image.png

3D, 3D贴图

Properties{
       _3D("Texure",3D) = "black"{}//3D贴图
}

image.png

完整代码

custome/01 shader"{
     Properties{
        _Color("Color",Color) = (1,1,1,1)//颜色
        _Vector("Vector",Vector) =  (3,2,3,1)//向量
        _Int("Int",Int) = 234//int类型
        _Float("Float",Float) = 1.2
        _Range("Range",Range(2,8)) = 6//范围值
        _2D("Texture",2D) = "red"{}//贴图
        _Cube("Cube",Cube) = "white"{}//天空盒
        _3D("Texure",3D) = "black"{}//3D贴图
    }
        SubShader{
            Pass{
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                
                float4 vert(float4 v:POSITION):SV_POSITION{
                  return UnityObjectToClipPos(v);//模型空间转为裁剪空间
                }

                fixed4 frag():SV_Target{
                    return fixed4 (1,1,1,1);
                }
                ENDCG
                }
        }
          FallBack  "Diffuse"
    
    }