shader 各个参数详解

Shader "Custom/BasicDiffuse" {
    Properties {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200
        
        CGPROGRAM
        #pragma surface surf Lambert
 
        sampler2D _MainTex;
 
        struct Input {
            float2 uv_MainTex;
        };
 
        void surf (Input IN, inout SurfaceOutput o) {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
} }

Properties里面包含的是shader的属性。以_MainTex为例, _MainTex表示变量名,Albedo(RGB)是在编辑器里显示的名称,2D是它的类型,表示它是一个纹理,white是默认值。

表面着色器的属性类型:
Range (min, max)
创建 Float 属性,以滑动条的形式便于在最大值和最小值之间进行调节创建色块,

Color

可以在 Inspector 面板上通过拾色器获取颜色值 = (float,float,float,float)
2D

创建纹理属性,允许直接拖曳一个纹理
Rect

创建一个非 2 次方的纹理属性,作为 2D 元素

Cube

在 Inspector 面板上创建一个立方贴图属性,允许用户直接拖曳立方贴图作为着色器属性

Float

在 Inspector 面板上创建一个非滑动条的 float 属性

Vector

创建一个拥有 4个float值的属性,可以用于标记方向或颜色 


SubShader是子着色器,一个着色器中可以包含多个SubShader。子着色器这是代码的主体,计算着色的时候,平台会按顺序选择一个可以使用的子着色器进行执行,如果所有的子着色器都无法使用,则会执行最后FallBack里指定的着色器。

我们来看SubShader的主体:

Tags(标签)标记了着色器的一些特性。

常用的Tag有:

RenderType:渲染类型,常用就是Opaque(不透明)和Transparent(透明)。

IgnoreProjector:是否忽略投影器,True or False。

ForceNoShadowCasting:是否强制无阴影,True or False。

Queue:渲染队列,内置值

Background=1000,Geometry=2000,AlphaTest=2450,Transparent=3000,Overlay=4000,但是并不限于这些值,你可以填写自己的值,或者写成"Queue"="Transparent+10"也是可以的。

LOD是Level of Details的缩写,表示着色器的细节层级,高于Unity的最大LOD(Quality Settings里设置)的shader将不可用

CGPROGRAM,它与ENDCG对应,表明在二者范围内是一段Cg(C for graphics)代码。

#pragma surface surf Lambert

我们使用的是一个表面着色器,方法名称是surf,光照模型是Lambert。

sampler2D _MainTex;

sampler2D对应于Properties里面的2D,是2D贴图的数据结构。而_MainTex也对应于Properties里面的_MainTex,保存了编辑器(或者代码)里设置的贴图。二者必须是同名,才能将贴图数据链接起来。

loat2表示这是一个二维的浮点型坐标。

其他的内置类型还包括:

half:半精度浮点型,范围[-60000,60000]

fixed:低精度定点型,范围[-2,2]

int:整型

bool:布尔型

sample*d:纹理类型

uv_MainTex表示_MainTex的纹理坐标,这是一种命名约定。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值