ShaderLab: Pass

Pass过程导致一个物体的几何被渲染一次。


语法:

Pass { [Name and Tags] [RenderSetup] }

基本的Pass命令包含了一系列的渲染步骤命令。


Name and tags

一个Pass过程可以定义它的名字和任意数量的标签,名字/值字符串传达了Pass给渲染引擎的意图。


Render State Setup

一个Pass过程设置显卡的各种各样的状态,例如是否开启透明度混合(alpha blending),是否使用深度测试(depth testing)等等。

命令格式如下:


Cull:

Cull Back | Front | Off

多边形的剔除模式(查阅Cull and Depth page)


ZTest:

ZTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always)

设置深度缓冲区测试模式(查阅Cull and Depth page)


ZWrite:

ZWrite On | Off

设置深度缓冲区写入模式(查阅 Cull and Depth page)


Blend:

Blend sourceBlendMode destBlendMode

Blend sourceBlendMode destBlendMode, alphaSourceBlendMode alphaDestBlendMode

BlendOp colorOp

BlendOp colorOp, alphaOp

AlphaToMask On | Off

设置透明度混合,透明度操作,透明度覆盖模式(查阅Blending page)


ColorMask:

ColorMask RGB | A | 0 | any combination of R, G, B, A

设置颜色通道写入遮罩,写入颜色遮罩0关闭全部颜色通道的渲染。默认模式是写入全部通道(RGBA),

但是对于某些特别的效果你也许需要留下特定的未改变的通道,或者完全关闭颜色写入。


Offset:

Offset OffsetFactor, OffsetUnits

设置Z缓冲区深度偏移。(查阅Cull and Depth page)


Legacy Fixed Function Shader Commands: 废弃的命令

一些命令是用于编写过时的fixed function style Shader。这是因为考虑到了被弃用的函数功能,

编写surface shader 或者 shader program 允许了更多的灵活性。不管怎样,因为每一个用fixed function style编写的简单的shader

会变得更加简单,所以这里有一些命令。在使用fixed function shader时会忽视它们。


Fixed Function Lighting and Material:


Lighting On | Off

Material { Material Block }

SeparateSpecular On | Off

Color Color-value

ColorMaterial AmbientAndDiffuse | Emission

所有这些控制fixed function per-vertex lighting,开启时,建立材质颜色,开启specular highlights,

提供默认颜色如果顶点灯光关闭的话,并且控制网格顶点颜色如何影响光照。(查阅Material page)


Fixed Function Fog:

Fog { Fog Block }

设置fixed function fog参数(查阅Fog page)


Fixed Function AlphaTest:

AlphaTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always) CutoffValue

开启fixed function alpha testing(查阅Alpha Testing page)


Fixed Function Texture Combiners:

在渲染状态建立之后,通过SetTexture命令,你能指定一些贴图并且他们应用的合并模式。

SetTexture textureProperty { combine options }


Details:

Shader的Pass过程与Unity的渲染管道有以下几种方式的交互:

例如:一个Pass可以通过标签来指定它只能被用于defered shading。

确定的Pass也可以被同一个物体执行多次,例如在forward rendering中,这个"ForwardAdd"Pass会被执行多次,

取决于有多少灯光影响这个物体。