关于shader的渲染顺序

* "Queue"标签。定义渲染顺序。预制的值为

* "Background"。值为1000。比如用于天空盒。

* "Geometry"。值为2000。大部分物体在这个队列。不透明的物体也在这里。这个队列内部的物体的渲染顺序会有进一步的优化(应该是从近到远,early-z test可以剔除不需经过FS处理的片元)。其他队列的物体都是按空间位置的从远到近进行渲染。

* "AlphaTest"。值为2450。已进行AlphaTest的物体在这个队列。

* "Transparent"。值为3000。透明物体。

* "Overlay"。值为4000。比如镜头光晕。

* 用户可以定义任意值,比如"Queue"="Geometry+10”

* "RenderType"标签。Unity可以运行时替换符合特定RenderType的所有Shader。Camera.RenderWithShader或Camera.SetReplacementShader配合使用。Unity内置的RenderType包括:

* "Opaque":绝大部分不透明的物体都使用这个;

* "Transparent":绝大部分透明的物体、包括粒子特效都使用这个;

* "Background":天空盒都使用这个;

* "Overlay":GUI、镜头光晕都使用这个;

* 用户也可以定义任意自己的RenderType这个标签所取的值。

* 应注意,Camera.RenderWithShader或Camera.SetReplacementShader不要求标签只能是RenderType,RenderType只是Unity内部用于Replace的一个标签而已,你也可以自定义自己全新的标签用于Replace。

比如,你为自己的ShaderA.SubShaderA1(会被Unity选取到的SubShader,常为Shader文件中的第一个SubShader)增加Tag为"Distort"="On",然后将"Distort"作为参数replacementTag传给函数。此时,作为replacementShader实参的ShaderB.SubShaderB1中若有也有一模一样的"Distort"="On",则此SubShaderB1将代替SubShaderA1用于本次渲染。

* 具体可参考Rendering with Replaced Shaders

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Basic Shaderlab unity 使用一个叫做 shaderlab 的语言用来包装和组织整个shader...
    goteet阅读 8,371评论 0 12
  • Why Bothers? 为什么已经有ShaderForge这种可视化Shader编辑器、为什么Asset Sto...
    DonaldW阅读 76,373评论 16 183
  • 我们可以放心地讲,Unity对于很多人来说已经使游戏开发变得更加容易。但其中毫无疑问仍然有很长的路要走的就是Sha...
    SwordMaster阅读 5,323评论 0 1
  • 一.Tags(标签)通过使用tags来告诉渲染引擎在什么时候该如何渲染他们所期望的效果。注意的是,SubShade...
    karma085阅读 10,711评论 1 4
  • 一直盼望的国庆节,却不停的下起了雨,所以一直在家宅,已经5号了,实在不愿把美好的节日宅掉了,于是冒着雨和远道而来的...
    双河岭阅读 3,240评论 0 3