Unity ShaderLab开发实战(一)基础标签和关键字

       注:此系列为<<Unity3d ShaderLab开发实战详解的读书笔记>>,作者郭浩瑜,人民邮电出版社,在这里感谢作者。

       Unity使用自定义shaderLab来组织shader的内容。

        SubShader:之所以用subshader,是为了能让开发者针对不同性能的显卡编写不同的shader,因为现实中并不是每个人都用相同的显卡。由于显卡千差万别,为了能让用户编写的游戏最大化地在各种各样的GPU上运行,尽可能地呈现最好的效果,就用subshader来组织具体的实现。Unity在运行时会针对实际的运行环境,从上到下选出最优的subshader实现来呈现开发者的作晶。

        Tags:给subshader添加标签(Tags(}块),其实就是一系列指示牌,这些标签可以告诉Unity渲染引擎或者其他用户如何认证这个subshader。eg:Tags {"Queuell="Ceometry" "RenderType"="opaque" "IgnoreProjeCtor"="True"}

        Queue就是队列的意思,在这里就是渲染队列的意思,表示希望Unity渲染引擎在什么时候渲染自己。Queue有6个可选值,它们是Background、Geometry、AlphaTest、Transparent和0verlay,分别对应数字1000、2000、⒉50、3000和4000。

       RenderType标签,其常用的内置值有Opaque、Transparent、TransparentCutout、Background和Overlay。这个标签在替代渲染做Post effects时很重要,Unity内置的Image Effects就要根据它来决定如何替代渲染。除此之外,如果你想得到场景的—张ZDepth和Nomals的快照,一个正确的RenderType是必不可少的。

       IgnoreProjector比较简单,值为True时,表示当前物体忽略Projector的影响。

       Pass:subshader包装了一个渲染方案,而这个方案是由—个个Pass块来执行的。subshader可以包括多个Pass块,每—个Pass块都包含了渲染—个几何体的具体代码。

        Pass块的Name一般用来引用此Pass。这种引用意味着你可以定义一个Pass块,然后在其他shader的Pass块中多次引用它。这是—种减少重复劳动的技巧。命名时必须使用大写,eg:

       FallBack:如果用户所有的subshadcr都失败了,为了在用户的计算机上呈现设定的机制,—般会使用FallBack。

       既能使用CLSL来写shader的逻辑代码,也能便用Cg/HLSL来写。如果使用GLSL,则这些代码必须位于CLSLPROGRAM和ENDCLSL关键字之间;如果使用Cg/HLSL,则这些代码必须位于CGPROGRAM和ENDCG之间。

猜你喜欢

转载自blog.csdn.net/jfy307596479/article/details/84797466