RenderType默认种类
Opaque: 用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。 |
Transparent:用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。 |
TransparentCutout: 蒙皮透明着色器(Transparent Cutout,两个通道的植被着色器)。 |
Background: Skybox shaders. 天空盒着色器。 |
Overlay: GUITexture, Halo, Flare shaders. 光晕着色器、闪光着色器。 |
TreeOpaque: terrain engine tree bark. 地形引擎中的树皮。 |
TreeTransparentCutout: terrain engine tree leaves. 地形引擎中的树叶。 |
TreeBillboard: terrain engine billboarded trees. 地形引擎中的广告牌树。 |
Grass: terrain engine grass. 地形引擎中的草。 |
GrassBillboard: terrain engine billboarded grass. 地形引擎何中的广告牌草。 |
除了这些默认种类外,当然我们可以设置自己的种类(即TagValue)用以着色器替换。
相关的Camera函数:
RenderWithShader(Shader rpShader,string myTagKey) | 当帧替换 |
SetReplacementShader(Shader rpShader,string myTagKey) | 一直替换 |
ResetReplacementShader() | 取消一直替换 |
rpShader是替换品,myTagKey填TagKey,一般是"RenderType"。
rpShader是肯定包含这个TagKey的,并且可能有多个SubShader来针对不同的TagValue作替换。
首先会检查相机照到的所有物体shader中的subShader是否有"RenderType"的这样一个TagKey(如果TagKey是填的"RenderType"的话),没有则不渲染。
然后有TagKey的物体shader则检查对应的TagValue值,看这个值在rpShader中是否有具备同样的TagValue值的subshader,有则替换成rpShader中的subShader,没有则不渲染。
Queue种类
字段 | 顺序 | 要点 |
Background | 1000 | 这个渲染队列通常用来渲染那些需要绘制在背景上的物体。值得注意的是: 天空盒是在2500的顺序渲染的,而且会写z(最远距离,仅仅会掩盖那些没有写z的像素) 也就是说天空盒材质的shader的queue顺序等于多少都没有意义,因为始终是在2500顺序渲染的 |
Geometry | 2000 | 不透明物体使用这个队列。值得注意的是: 同一顺序中的渲染顺序是根据距离摄像机位置决定的,由近及远。 |
Alphatest | 2450 | 需要透明度测试的物体用这个队列。Unity5中它从Geometry队列中被单独分出来,以提高效率。值得注意的是: 1.可以借鉴此思路,预算复杂的shader可以放在靠后位置渲染。 2.还有一点是,AlphaTest有别于Transparent的一个地方时,AlphaTest可以部分写z。 3.AlphaTest都用fragmentShader中写clip来实现,别用pass前写alphatest的方式,这种写法好像已经失效 |
Transparent | 3000 | 透明物体使用这个队列,这类shader通常开启透明度混合,并关闭深度写入。值得注意的是: 同一顺序中的渲染顺序是根据距离摄像机位置决定的,由远及近,有别于geometry队列。 但这个顺序不是很准确,透明物体的渲染顺序有强需求的还是设置多个顺序来渲染,这一点也有别于geometry队列,因为不透明物体不考虑渲染顺序也能得到正确结果(因为zwrite),但不透明物体则不同。 |
Overlay | 4000 | 最后渲染的物体都应该使用该队列,如flare等。 |
其他SubShader标签
DisableBatching | 强制禁用批处理 |
ForceNoShadowCasting | 控制使用该subShader的物体是否投射阴影 |
IgnoreProjector | 控制使用该subShader的物体是否受projector影响,通常用于半透明物体 |
CanUseSpriteAtlas | 当该subshader用于精灵(sprites)时,将该标签设置为false |
PreviewType | 指明材质面板如何预览该材质。默认情况下,显示为一个球形。"Plane" "SkyBox"等 |
LightMode——Pass标签
Always | 博客未完成 |
ForwardBase | 博客未完成 |
ForwardAdd | 博客未完成 |
Deferred | 博客未完成 |
ShadowCaster | 博客未完成 |
-
LightMode也被称之为渲染路径
-
(PrepassBase/PrepassFinal Vertex/VertexLMRGBM/VertexLM) 这些为遗留的渲染路径
RequireOptions——Pass标签
(指定当满足某些条件时才渲染该pass),未看见过用法