Unity中的四种Unity Shader模版
1. Standard Surface Shader
产生一个包含标准光照模型的表面着色器模版
2. Unlit Shader
不包含光照(但有雾的效果的基本的顶点/片元着色器)
3. Image Effect Shader
为实现各种屏幕后处理效果提供一个基本模版
4. Compute Shader
Unity Shader 最重要的任务还是指定各种着色器所需要的代码
Shader Lab 定义了要显示一个材质所需要的所有东西 不仅仅是着色器代码
1. Shader "Custom/Myshader" 第一行 用shader语义来指定该unity shader的名字
2. Properties 属性块 这些属性会出现在材质面板上 为了方便调整各种材质属性
Properties{
Name ("display name", Propertytype) = DefaultValue
}
名字通常由一个下划线开始 如 _MainTex
所有属性类型的表示方式
- SubShader 定义了一系列Pass 和 可选状态 和标签 设置
每个Pass定义了一次完整的渲染流程
常见状态名称
Cull - Cull Back | Front | Off 设置剔除模式;剔除背面/正面/关闭
ZTest - ZTest Less Greater | LEqual | GEqual | Equal | NotEqual | Always 设置深度测试时的函数
ZWrites - ZWrite On |Off 开启/关闭深度写入
Blend - Blend SrcFactor DstFactor 开启并设置混合模式
SubShader 的标签(Tags)是一个键值对 — 是SubShader和渲染引擎之间的沟通桥梁
Tags {“TagName1” = “Value1”
“TagName2” = “Value2”}
4. Pass 语义块
可以定义Pass的名称 可以使用ShaderLab的UserPass的命令来使用其他Unity Shader中的Pass
UsePass "MyShader/MYPASSNAME" - 这里使用的Pass要大写
Pass中也可以定义渲染设置 但是这不同于 SubShader中定义的渲染设置(SubShader中定义的渲染设置会应用于所有的Pass)
- FallBack/FallOff
顶点/片元着色器的代码是写在Pass语义块内的,需要定义在CGPROGRAM和ENGDCG中
表面着色器的代码写在SubShader中的
固定函数着色器需要完全使用ShaderLab的语法,即使用ShaderLab的渲染设置命令来编写
Unity Shader 提供了一种让开发者同时控制和渲染流水线中多个阶段的一种方式,不仅仅提供Shader 代码