资源描述:
《unity3d shader开发(三)pass(culling & depth testing)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、剔除是一种通过避免渲染背对观察者的几何体面来提高性能的优化措施。所有几何体都包含正面和反面。剔除基于大多数对象都是封闭的事实;如果你有一个立方体,你不会看到背离你的那一面(总是只有一面在你的前方),因此我们不需要绘制出背面。因此也被称做背面剔除。 该文章出自【狗刨学习网】 另一个使得渲染看起来正确的是深度测试。深度测试确保只有场景内的对象的最靠近的表面参与绘制。Syntax语法Cull Back
2、Front
3、Off控制几何体的那一面会被剔除(不绘制) Back 不绘制背离观察者的几何体面。 Front 不绘制面向观察者的几何体面,用于由内自外的旋转对象
4、 Off 显示所有面。用于特殊效果。ZWrite On
5、Off 控制是否将来之对象的像素写入深度缓冲(默认开启),如果你正绘制纯色物体,将此项打开。如果你正绘制半透明效果,关闭深度缓冲,更多细节如下ZTest Less
6、Greater
7、LEqual
8、GEqual
9、Equal
10、NotEqual
11、Always 深度测试如何执行。缺省是LEqual(绘制和存在的对象一致或是在其中的对象;隐藏他们背后的对象)Offset Factor , Units 允许你定义用两个参数深度偏移。因子和单位。Factor缩放Z的最大斜率,几何体的X和Y也一样,units缩放可计
12、算的深度缓冲值。这允许你迫使一个几何体绘制在另一个的上层,尽管他们实际上是在同一个位置。例如偏移0,-1使得靠近摄像机的几何体忽略几何体的斜率,而偏移-1,-1则会几何体在一个几乎擦过的角度被观察使看起来更近些。示例 这个对象只会渲染对象的背面。1.Shader"ShowInsides"{2. SubShader{3. Pass{4. Material{5. Diffuse(0,1,1,1)6. }7. LightingOn8. CullFront9. }10. }11.}复制
13、代码 我把太阳光正对着摄像机,Cube正对摄像机 尽量应用到一个立方体上,并注意当你围绕几何体旋转时,几何体是如何看起来变糟糕的。这是因为你只看见了立方体的内部部分。玻璃剔除 控制剔除比背面调试更有用。如果你有透明物体,你经常会想要显示一个对象的背面。如果你不做任何剔除,你会发现有时常有一部分背面会覆盖在前面的一部分上。 下面是一个用于凸物体(球,立方体,车窗)的简单着色器。1.Shader"SimpleGlass"{2. Properties{3. _Color("MainColor",Color)=(1,1,1
14、,0)4. _SpecColor("SpecColor",Color)=(1,1,1,1)5. _Emission("EmmisiveColor",Color)=(0,0,0,0)6. _Shininess("Shininess",Range(0.01,1))=0.77. _MainTex("Base(RGB)",2D)="white"{}8. }9.10. SubShader{11. //Weusethematerialinmanypassesbydefiningtheminthesubshader.12. //我
15、们通过把定义放在子着色器中以便可以在许多通道中访问材质13. //Anythingdefinedherebecomesdefaultvaluesforallcontainedpasses.14. //任何定义在这里的值都会变成所有内含的通道的默认值15. Material{16. Diffuse[_Color]17. Ambient[_Color]18. Shininess[_Shininess]19. Specular[_SpecColor]20. Emission[_Emiss
16、ion]21. }1. LightingOn2. SeparateSpecularOn3.4. //Setupalphablending5. //开启透明度混合6. BlendSrcAlphaOneMinusSrcAlpha7.8. //Renderthebackfacingpartsoftheobject.9. //渲染对象的背面部分10. //Iftheobjectisconvex,th