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

首先需要记住的是:

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

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

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

注意:Alpha Test,Alpha to 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透明物体显示问题相关推荐

  1. unity 3d物体显示和2dUI显示相结合

    1 利用摄像机深度 2 利用rendertexture 将3d物体渲染到texture上面

  2. Three.js 透明物体不能正常显示(闪烁)/渲染顺序的控制问题

    Three.js的渲染机制 three的渲染器是基于webGL的.它的渲染机制是根据物体离照相机的距离来控制和进行渲染的.对于透明的物体,则是按照从最远到最近的顺序进行渲染.也就是说,它根据物体的空间 ...

  3. [Unity]3D物体透明化方法透明材质球

    Default-Skybox,Shader:Skybox/Procedural 使用透明材质 1.使用自带的天空盒材质 新建3D物体,自带是初始材质 将其替换成如上图所示的Default-Skybox ...

  4. 关于PNG导入Unity透明通道不显示为黑色的曲线救国方法

    有很多PS导出的PNG图片导入Unity中时,透明通道显示总是会有一些不可预知的问题,大体原因是由于编码的问题. 今日我做的图片导入Unity 中时,透明区域为白色,导致不能用于Shader,在上网查 ...

  5. unity透明通道加颜色_Unity SRP 6.透明

    翻译汇总文章: HipHopBoy:Unity SRP 系列翻译汇总​zhuanlan.zhihu.com 原文链接: https://catlikecoding.com/unity/tutorial ...

  6. 基于Transformer对透明物体进行分割

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...

  7. 准确估计透明物体的 3D 姿态:机器人收集 + Keypose 算法

    文 / 软件工程师 Kurt Konolige,Google 机器人团队 计算机视觉应用领域的核心问题是 3D 物体的位置与方向的估计,这与对象感知有关(如增强现实和机器人操作).在这类应用中,需要知 ...

  8. 【U3D】人物触发物体显示界面(游戏开始/游戏结束/碰撞金币等)

    触发器的主要用法: void OnTriggerEnter() void OnTriggerEnter(Collider other) {if (other.gameObject.tag ==&quo ...

  9. unity让物体具有高光_具有随机高光的蜂窝导航

    unity让物体具有高光 A few months ago I created a CSS "diamond" mesh navigation; this time, I thou ...

  10. Unity 实现物体破碎效果(转)

    感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...

最新文章

  1. windows服务搭建及命令总结
  2. redis RedisTemplate实现分布式锁
  3. Spark _01初识
  4. 梳理了一下前端面试必考知识点
  5. jenkins配置记录(2)--代码发布流程
  6. Java孩子父母类_父母和子女复选框
  7. game module 停止运行_详解流量复制解决方案--NGINX的ngx_http_mirror_module模块实现
  8. SpringAOP 通知(adivce)- methodIntercepor
  9. laravel插入数据时报 502 Bad Gateway
  10. 机械精度设计与检测|尺寸精度
  11. 北京圣思园java视频教程全套_北京圣思园Java8新特性及实战视频教程完整版
  12. sax解析xml详解
  13. Shader特效之图片波动炫光效果
  14. java使用axis2调用webservice接口实例
  15. 以太网芯片mac/phy的关系
  16. 密码学读书笔记系列(三):《商用密码应用与安全性评估》
  17. 《他乡的童年》观后感——英国教育
  18. 无线通信技术(习题课)
  19. Automotive SPICE 简介
  20. 逃避不一定躲得过,面对不一定最难过

热门文章

  1. (转)浅说深度学习:核心概念
  2. HPC+AI融合发展的挑战和应对方法探讨
  3. 【运动学】基于matlab嫦娥奔月仿真【含Matlab源码 1238期】
  4. 【通信】基于matlab GUI短波通信系统仿真【含Matlab源码 647期】
  5. 【火灾检测】基于matlab GUI火灾检测【含Matlab源码 249期】
  6. SPSS统计检验中的边缘显著及其转化处理【SPSS 063期】
  7. 马斯克神经网络转换器_通过转换数据来减少人工神经网络的复杂性
  8. 自然语言理解gpt_GPT-3:自然语言处理的创造潜力
  9. update mysql.user set password_修改mysql密码
  10. linux内核 semaphore,Linux内核参数信号量semaphore设置