Tags

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),未看见过用法

猜你喜欢

转载自blog.csdn.net/JohnBlu/article/details/83009035