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),未看见过用法
本文详细解析了Unity中的渲染队列与着色器类型,包括RenderType默认种类如Opaque、Transparent等,以及Queue种类如Background、Geometry、Transparent的特性与应用。深入探讨了如何通过TagKey和TagValue进行着色器替换,以及如何利用Camera函数控制渲染流程。
2520

被折叠的 条评论
为什么被折叠?



