·Background -最早被调用的渲染,用来渲染天空盒或者背景
·Geometry -这是默认,用来渲染非透明物体(普通情况下,场景中的绝大多数物体应该是非透明的)
·AlphaTest -用来渲染经过Alpha Test的像素,单独为AlphaTest设定一个Queue是出于对效率的考虑
·Transparent -以从后往前的顺序渲染透明物体
·Overlay -用来渲染叠加的效果,是渲染的最后阶段(比如镜头光晕等特效)
这些预定义的本质上是一组定义整数,Background = 1000,Geometry = 2000, AlphaTest = 2450,Transparent = 3000,最后Overlay = 4000。在我们实际设置Queue时,不仅能使用上面的几个预定义,我们也可以指定自己的Queue,写成类这样:"Queue"="Transparent100",表示一个在Transparent之后100的Queue上进行调用。通过调整Queue,我们可以确保某些物体一定在另一些物体之前或者之后渲染,这个技巧有时候很有用处。
LOD
LOD很简单,它是Level of Detail的缩写,在这里例子里我们指定了其为200(其实这是Unity的内建Diffuse着色器的设定)。这个数决定了我们能用什么样的Shader。在Unity的Quality Settings中我们可以设定允许的最大LOD,当设定的LOD小于SubShader所指定的LOD时,这个SubShader将不可用。Unity内建Shader定义了一组LOD的数,我们在实现自己的Shader的时候可以将其作为参考来设定自己的LOD数,这样在之后调整根据设备图形性能来调整画质时可以进行比较精确的控制。
·VertexLit及其系列= 100
·Decal, Reflective VertexLit = 150
·Diffuse = 200
·Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit = 250
·Bumped, Specular = 300
·Bumped Specular = 400
·Parallax = 500
·Parallax Specular = 600
Shader本体
前面杂项说完了,终于可以开始看看最主要的部分了,也就是将输入转变为输出的代码部分。为了方便看,请容许我把上面的SubShader的主题部分抄写一遍
还是逐行来看,首先是CGPROGRAM。这是一个开始标记,表明从这里开始是一段CG程序(我们在写Unity的Shader时用的是Cg/HLSL语言)。最后一行的ENDCG与CGPROGRAM是对应的,表明CG程序到此结束。
接下来是是一个编译指令:#pragma suce surf Lambert,它声明了我们要写一个表面Shader,并指定了光照模型。它的写法是这样的
#pragma suce suceFunction lightModel [optionalparams]
·suce -声明的是一个表面着色器
·suceFunction -着色器代码的方法的名字
·lightModel -使用的光照模型。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-48390-4.html
感觉中国现在是钱头外交
美国来展现下霸主地位