【Unity】透明物体显示问题

摘要:
总结一下Shader开启透明渲染后的一些显示问题的解决方案,考虑Zwrite,Ztest,Queue这三个属性的设置问题。其次是,UnityShader中需要注意的三个属性。对于半透明物体,这样的设置在一般的情况下是没有问题的,但是在某些情况下会出现问题。Zwrite开启之后,图形渲染将按照深度测试的结果来进行,不会因为渲染顺序不一致而导致前面的物体被后面的物体覆盖的问题。半透明物体关闭了Zwrite,这时候渲染队列对于正确的显示就十分重要了。

总结一下Shader开启透明渲染后的一些显示问题的解决方案,考虑Zwrite,Ztest,Queue这三个属性的设置问题。

首先需要记住的是:

对于不透明物体,渲染的正确顺序是从前往后;

对于半透明物体。渲染的顺序是从后往前。

这样才能实现正确的渲染输出。

注意:Alpha Test,Alphato Coverage不在讨论之列。这里涉及到的是使用Alpha Blend的物体。

其次是,Unity Shader中需要注意的三个属性。

Zwirte:是否开启深度缓存,默认为On。

Ztest:深度测试的模式,默认为Lequal(小于等于)。

Queue:渲染队列,默认为Geometry。

常规来说:

对于不透明物体,默认的设置为Zwrite On,Ztest Lequal,Queue=“Geometry”。

对于半透明物体,默认的设置为Zwrite Off,Ztest Lequal,Queue=“Transparent”。

对于半透明物体,这样的设置在一般的情况下是没有问题的,但是在某些情况下会出现问题。

先解释一下相关的概念:

Queue:最好理解,也就是物体的在渲染队列中的顺序。

Zwrite On:会开启深度缓存和深度测试,即在绘制物体表面上的一个像素时,会对像素的深度值和深度缓存中对应点的值进行比较,如果该像素的深度值小于或等于(Ztest Lequal)深度缓存中的值,就用该像素的颜色和深度替换掉原有的像素。

Zwrite开启之后,图形渲染将按照深度测试的结果来进行,不会因为渲染顺序不一致而导致前面的物体被后面的物体覆盖的问题。

半透明物体关闭了Zwrite,这时候渲染队列对于正确的显示就十分重要了。必须严格的按照后面的先渲染,前面的后渲染的顺序,否则会出现不正确的遮挡关系。

那么回到上面的问题,什么情况下半透明物体的默认设置表现不正确?

举个简单的例子,十字交叉的面片草渲染,通常情况下会使用Alpha Test的Shader。但是Alpha Test并不支持抗锯齿,所以有时候考虑到锯齿问题OR性能问题使用Alpha Blend。

如果使用默认设置,那么会观察到交叉的重叠效果不正确。这是因为Zwrite Off,两个面片按照先后顺序分别渲染,导致错误的重叠效果。

相反,如果开启了Zwrite,则会发现,由于开启了深度缓存测试,前面的透明像素成功的替换掉后面的不透明像素。导致前面面片的透明像素没有与后面的不透明像素混合,而是直接显示了背景像素。

对于UI之上有模型使用半透明材质,导致与场景进行半透明混合而不是与UI进行半透明混合的解决方案则是:使用脚本调整模型的Sorting Order,使其略大于UI组件Canvas的Sorting Order即可。

除了Shader层面的解决方式,半透明还可以通过修改顶点ID的方式来进行渲染顺序的修改,这里的具体方式不详细说明。

免责声明:文章转载自《【Unity】透明物体显示问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java解决大文件断点续传Trie树(前缀树)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

深度图像的获取原理

RGB-D(深度图像)   深度图像 = 普通的RGB三通道彩色图像 + Depth Map   在3D计算机图形中,Depth Map(深度图)是包含与视点的场景对象的表面的距离有关的信息的图像或图像通道。其中,Depth Map 类似于灰度图像,只是它的每个像素值是传感器距离物体的实际距离。通常RGB图像和Depth图像是配准的,因而像素点之间具有一...

Unity3d Shader

Unity3d Shader 预览Surface Shader主要用来实现光照相关处理,可能更简洁。Vertex and Fragment Shader如果不与光照交互, 则可以用这个shader,更录活fixed function shaders固定shader主要用于老旧卡ShaderLab不管写哪种shader,最终通过shaderLab实现,其组织结...

Unity目录结构设置

摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的settings File->Build Settings File->Build Settings-...

UnityShader快速上手指南(一)

简介 引言 其实网上有很多shader教程,但是大概看了下,也不知是网上各位大神已经脱离了代码层面的高度还是啥原因。貌似没有找到从代码方面作为入门讲解的,导致了shader对于苦逼程序员入门有一定要求,鄙人不才,来写个比较低级的从代码入门的shader教程吧。 写在前面的话 了解过unityshader的人都知道,unityshader分三种,固定管线、...

(转)Unity内建图标列表

用法 Gizmos.DrawIcon(transform.position, "PointLight Gizmo"); UnityEditor.EditorGUIUtility.FindTexture("PointLight Gizmo"); Unity Editor Built-in Icons Icons what can load usingE...

Word字体与像素的对应关系

英文字体的1磅(pt),相当于1/72 英寸(inch),约等于1/2.8mm。12PT的字打印出来约为4.2mm。网页中12px的字才相当于12像素。 虽然 四号=(14/72)*96=18.6px 更接近 19px,但是因为 18px 是点阵,所以系统还是优先显示点阵字号的。换句话说:四号=18px中文字号VS英文字号(磅)VS像素值的对应关系:八号=...