ShaderLab: SubShader Tags

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ShaderLab: SubShader Tags相关的知识,希望对你有一定的参考价值。

参考技术A         subshader通过tags告诉渲染引擎什么时间什么方式来渲染他们。

        指定TagName1有一个Value1值,TagName2有一个Value2值,如果你愿意的话可以有多个tags。

        tags是基础的键值对,在subshader内的tags决定一个subshader的渲染顺序和其他参数。请注意以下的tags只能被Unity在subshader中识别而不是pass中识别。

        除了被Unity识别的内置tags外,你也可以使用你自己的tags并且通过使用Material.GetTag方法来查询它们。

        你可以使用Queue tag来决定你的对象被绘制的顺序。shader决定了其对象属于什么渲染队列,这样所有透明的shader确保它们在不透明的物体之后绘制等等。

        有四个预先定义好的渲染队列,但是在预先定义好的队列中间还可以有很多其他队列。预先定义好的队列是:

        ·Background-此渲染队列在其他所有渲染队列之前渲染。你通常可以给真的需要在背景中的对象使用它。

        ·Geometry(默认)-它用于大多数的对象,不透明的几何体使用这个队列。

        ·AlphaTest-经受过alpha测试的几何体使用这个队列。它是从Geometry队列中分离出来的队列。因为在所有实体被绘制之后再来渲染经过alpha测试的对象会更有效率。

        ·Transparent-这个渲染队列在Geometry和AlphaTest队列之后渲染,以从后到前的顺序。任何alpha混合(即不写入深度buffer的着色器)都应该放在这里(玻璃,粒子效果)。

        ·Overlay-这个渲染队列表示叠加效果,任何最后渲染的对象都应该放到这里(比如镜头光晕)。

        一个例子来说明怎样在transparent队列中来渲染一个东西。

        为了特殊的用途也可以使用在中间的队列。在内部每个队列通过整数索引来表示, Background是1000,Geometry是2000,AlphaTest是2450,Transparent是3000,Overlay是4000。如果一个shader使用了一个像这样的队列:

        这将使对象在所有不透明物体之后,透明物体之前渲染,因为渲染队列索引将是2001 (geometry加1)。这在当你想使某些对象总是在一些物体之间渲染时非常有用。比如在大多数情况下透明的水应该在不透明物体之后但是在透明物体之前绘制。

        渲染队列上升到2500(Geometry+500)被认为是不透明的,并且优化对象的渲染顺序来获取最佳性能。更高的渲染队列被认为是“透明物体”并通过距离开排序,从远到近来渲染。天空盒在所有不透明物体和所有透明物体之间绘制。

        RenderType tag将shader分类为一些预定义的组,例如是一个不透明的shader,或是一个经过了alpha测试的shader等等。这用于shader的替换使用(链接见原网页),并且在一些情况下产生相机的深度纹理(链接见原网页)。

        一些shader(大多数是做本地空间顶点变形的),当Draw Call Batching(链接见原网页)被使用时不起作用,这是因为batching将所有几何体变换到了世界空间,所以本地空间丢失了。

        DisableBatching tag可以用于防止上面情况。这里可以有三个值:“True”(总是为此shader禁用batching),“False”(不禁用batching;这是默认设置),以及“LODFading”(当LOD淡入激活时禁用batching;主要用于树)。

        如果ForceNoShadowCasting tag被设定并且值是true,那么使用这个subshader渲染的对象将永远不会投下影子。这大多数用于当你在透明物体上使用shader替换,并且你将不会从其他subshader上继承一个影子pass。

        如果IgnoreProjector tag被设定并且值是true,那么使用这个shader的对象将不会被被投影效果影响。这大多数用于半透明的物体,因为没有一个比较好的给他们投影的方法。

        如果这个shader是应用于sprite的,那么设置CanUseSpriteAtlas tag的值为false,那么这些sprite被打入图集中的时候此shader将不会工作(请参阅Sprite打包,链接见原网页)。

        PreviewType表示材质的监视面板预览画面来怎样显示材质。默认材质被显示成球形,但是PreviewType也可以被设置为“平板”(将显示为2D)或者“天空盒”(将显示为天空盒)。

        pass也可以具有tags,请看pass tags(链接见原网页)。

以上是关于ShaderLab: SubShader Tags的主要内容,如果未能解决你的问题,请参考以下文章

Shaders: ShaderLab & Fixed Function shaders

ShaderLab学习小结漫反射+高光+点光源

ShaderLab学习小结简单的半透明shader

ShaderLab学习小结简单产生阴影

ShaderLab学习小结(十八)cubemap

ShaderLab学习小结最简化的顶点片断Shader