shader基本语法
1.
Shader名字
"ShaderLab Tutorials/TestShader"
{
// ...
}
2014-0720-1707-17-42.png
Shader的名字会直接决定shader在material里出现的路径
2.
SubShader(渲染方案)
一个Shader有多个SubShader。一个SubShader可理解为一个Shader的一个渲染方案。即SubShader是为了针对不同的显卡而编写的。每个Shader至少1个SubShader、理论可以无限多个,但往往两三个就足够。
SubShader和显卡的兼容性判断,和SubShader的标签、Pass的标签和显卡支持的“Unity渲染路径”有关。这些都会在下面逐一提到。
3.
SubShader的Tag
Shader "ShaderLab Tutorials/TestShader" {
SubShader
{
Tags { "Queue"="Geometry+10" "RenderType"="Opaque" }
//...
}
}
SubShader内部可以有标签(Tags)的定义。Tag指定了这个SubShader的渲染顺序(时机),以及其他的一些设置。
(1)Queue:决定渲染顺序,(在同一Z深度下比较,优先比较z深度),越小越早渲染。
1、background 1000,,背景如天空盒子,
2,geometry2000,大部分不透明物体,
3,alphatest 2450,进行透明测试的队列
4,transpare,3000,透明物体,
5,overlay,4000,最后被渲染的,
(2)RenderType,(估计是使用此subshader的条件)
Unity可以运行时替换符合特定RenderType的所有Shader。Camera.RenderWithShader或者Camera.SetReplacementShader配合使用
1,Opaque 大部分不透明物体。
2,Transpa大部分透明物体。
3,backgroudn
4,overlay,
(3)”ForceNoShadowCasting“,值为”true”时,表示不接受阴影。
(4)”IgnoreProjector“,值为”true”时,表示不接受Projector组件的投影。
4.
Pass(越多要求性能越高,从上到下一个执行到另一个)
Shader "ShaderLab Tutorials/TestShader" {
SubShader {
Pass
{
//...
}
}
}
一个SubShader(渲染方案)是由一个个Pass块来执行的。每个Pass都会消耗对应的一个DrawCall。在满足渲染效果的情况下尽可能地减少Pass的数量。
每个通道的定义可以是1个regular Pass, 或 Use Pass 或 Grab Pass.
5.
pass中的Tag
Shader "ShaderLab Tutorials/TestShader" {
SubShader {
Pass
{
Tags{