# 基础结构
1 | Shader "shaderName"{ |
# 常见属性
属性类型 默认值的定义语法 例子 :------------: :------------: :------------: Int number _Int (“Int”,Int) = 2 Float number _Float (“Float”,Float) = 1.5 Range (min,max) number _Range (“Range”,Range (0.0,5.0)) =3.0 Color (number,number,number,number) _Color ( “Color”,Color) = (1,1,1,1) Vector (number,number,number,number) _Vector (“Vector”,Vector) = (2,3,6,1) 2D “defaulttexture” {} _2D (“2D”,2D)="" {} Cube “defaulttexture” {} _Cube (“Cube”,Cube) = “white” {} 3D “defaulttexture” {} _3D (“3D”, 3D) = “black” {}
Unity 会挨个扫描所有的 Subshader, 直到第一个可以使用的为止
# SubShader 结构
1 | SubShader{ |
pass 应该尽量少一点
# 状态设置
SubShader 提供了一系列渲染状态的设置指令,这些指令可以设置各种显卡的状态,如是否开启混合 / 深度测试等。
Cull
Cull Back | Front | Off
设置剔除模式:剔除背面 / 正面 / 关闭剔除
ZTest
ZTest Less Greater | LEqual | GEqual | Equal | NotEqual |Always
设置深度测试时使用的函数
ZWriter
Zwriter On | Off
开启 / 关闭深度写入
Blend
Blend SrcFactor DstFactor
开启并设置混合模式
# SubShader 的标签
SubShader 的标签是一个键值对 (Key/Value Pair), 键与值都是字符串类型。这些键值对是 SubShader 和渲染引擎之间沟通的桥梁。它用来告诉 Unity 渲染引擎,我们希望怎样以及何时渲染这个对象。
1 | Tags{"TagName1" = "Value1" "TagName2" = "Value2"} |
# 语义
POSITION: 模型顶点坐标信息
SV_POSITION: 输出裁剪空间中的顶点坐标
SV_Target: 把用户的输出颜色存储到一个渲染目标内
TEXCORD0: 纹理信息
NORMAL: 法线信息
TANGENT: 暂时不知道
COLOR0: 颜色信息 上面的信息都是由 Mesh Render
组件提供的.
# 顶点着色器与片元着色器的通信
作为参数传进去就可以了
# Unity 内置的文件和变量
内置的包含文件 (include file)
后缀名是: `.cginc