Shader学习第五篇:Unity下Shader属性

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)//颜色
}

在这里插入图片描述

Vector:向量

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

在这里插入图片描述

整型Int

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

在这里插入图片描述

浮点数Float

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

在这里插入图片描述

Range范围

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

在这里插入图片描述

可拖动滑动条滑动

2D纹理

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

在这里插入图片描述

默认值

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"{}//天空盒
}

在这里插入图片描述

3D, 3D贴图

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

在这里插入图片描述

Cg/HLSL中的数据类型

讲完上面的属性,不得分享数据类型,因为只有上面定义的属性,我们的代码依然无法使用上面的属性定义,需要下面数据类型、名称一一对应才行
对应的定义如下:
属性定义

 Properties{
        _Color("Color",Color) = (1,1,1,1)//颜色
        _Vector("Vector",Vector) =  (3,2,3,1)//向量
        _Int("Int",Int) = 5//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贴图
    }

数据类型定义

                 float4 _Color;
                int _Int;
                //float _Int;这里用float定义_Int也可以
                float _Float;
                float _Range;
                sampler2D _2D;
                samplerCUBE _Cube;
                sampler3D _3D;

关于float、half、fixed这里说下

  • float:高精度浮点值,通常用32位存储
  • half:中等精度浮点值,通常用16位存储,范围-60000~+60000
  • fixed:最低精度浮点值,通常用11位存储,范围-2.0~+2.0,通常用于常规的颜色与贴图,以及低精度间的一些运算变量等。

在PC平台上,Shader中写的是half还是fixed,统统都会被当作float来处理。half与fixed仅在一些移动设备上有效。
比较常用的写法是,除了位置和坐标用float以外,其他用half。
fixed精度实际上只在一些较旧的移动平台上有用,在大多数现代的GPU上,它们内部把fixed和half当成同等精度来对待。

完整代码

Shader "My/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 _Color;
                int _Int;
                //float _Int;这里用float定义_Int也可以
                float _Float;
                float _Range;
                sampler2D _2D;
                samplerCUBE _Cube;
                sampler3D _3D;
                float4 vert(float4 v:POSITION):SV_POSITION{
                  return UnityObjectToClipPos(v);
                }

                fixed4 frag():SV_Target{
                    return fixed4 (_Int,1,1,1);
                }
                ENDCG
                }
        }
          FallBack  "Diffuse"
    
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小~小

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值