目录
Sharder基本结构
// 当前Shader在材质面板下拉列表的路径和名字
Shader "Unlit/001"
{
//属性块
Properties{}
SubShader
{
//标签 可选 key = value
Tags {}
//Render设置 可选
//必须
Pass
{
Name "Default" //Pass通道名称
Tags{} //可以在每个Pass通道里面进行定义
//Render设置 可以在每个Pass通道里面进行定义
//CG语言所写的代码,主要是顶点/片元着色器
CGPROGRAM
//...
ENDCG
}
}
Fallback Off //当上面shader运行不了的时候会使用下面shader渲染
}
Properties
属性块
作用:声明变量会显示在Inspector面板中
在属性块中声明的变量,可以在材质面板中进行调整
变量名(显示名称,类型)=默认值
Properties
{
_Int("Int",Int) = 2//整形
_Float("Float",float) = 1.5//浮点型
_Range("Range",range(0.0,2.0))= 1.0//范围值
_Color("Color",Color) = (1,1,1,1)//颜色
_Vector("Vector",Vector) = (1,4,3,8)//向量
_MainTex("Texture", 2D) = "white" {}//贴图
_Cube("Cube",Cube) = "white"{}//天空盒
_3D("3D",3D) = "black"{}//3D贴图
}
扫描二维码关注公众号,回复:
17282040 查看本文章
SubShader
每个Unity Shader至少包含一个SubShader语义块。当游戏在不同平台上运行时unity会执行从上到下第一个可以运行的SubShader,若都无法运行则会调用Fallback里的shader
SubShader
{
//标签 可选 key = value
Tags {}
//Render设置 可选
//必须,可以有多个
Pass
{
Name "Default" //Pass通道名称
Tags{} //可以在每个Pass通道里面进行定义
//Render设置 可以在每个Pass通道里面进行定义
//CG语言所写的代码,主要是顶点片元着色器
CGPROGRAM
//...
ENDCG
}
}
Tags
SubShader使用tag来告诉他们期望如何以及何时将其渲染到渲染引擎
Tags
{
"Queue"="Transparent"//渲染顺序
"RenderType"="Opaque"//着色器替换功能
"DisableBatching" = "True"//是否进行合批
"ForceNoShadowCasting" = "True"//是否投射阴影
"IgnoreProjector"="True"//受不受Projector的影响,通常用于透明物体
"CanUseSpriteAltas" = "False"//是否用于图片的Shader,通常用于UI
"PreviewType"="Plane"//用作shader面板预览的类型
}
Render设置
ShaderLab提供了一系列渲染状态的指令,在 Pass 代码块中使用这些命令可为该 Pass 设置渲染状态,或者在 SubShader 代码块中使用这些命令可为该 SubShader 以及其中的所有 Pass 设置渲染状态。
常见的渲染状态设置选项
Cull | Cull off/back/front | 旋转渲染哪个面 |
ZTest | ZTest Always/Less Greater/LEqual/GEqual/Equal/NotEqual | 深度测试 |
Zwrite | Zwrite off/on | 深度写入 |
Blend | Blend SrcFactor DstFactor | 混合 |
LOD | LOD 100 | 不同情况下使用不同的LOD,达到性能提升 |
Pass
在 Pass 代码块中使用这些命令可为该 Pass 设置渲染状态,或者在 SubShader 代码块中使用这些命令可为该 SubShader 以及其中的所有 Pass 设置渲染状态。
Pass
{
Name "Default" //Pass通道名称
Tags{} //可以在每个Pass通道里面进行定义
//Render设置 可以在每个Pass通道里面进行定义
//CG语言所写的代码,主要是顶点片元着色器
CGPROGRAM
//...
ENDCG
}