透明物体渲染

为什么渲染顺序很重要?
A是半透明物体,B是不透明物体,A更靠近摄像机。
如果先渲染A,那么在渲染B的时候,B就无法通过深度测试,导致B的片元被舍弃。
在这里插入图片描述
解决方法:先渲染完所有不透明物体后,再渲染透明物体
在这里插入图片描述

为什么要关闭深度写入?
A和B都是半透明物体,Unity在渲染半透明物体时,会基于物体中心对两个物体进行排序,来实现半透明物体的从后往前渲染的目的。下图A和B使用的是同一个Shader,并且没有关闭深度写入。B的中心点比A更靠近摄像机,因此渲染顺序是A->B。当A渲染后,B被A遮挡的部分没有通过深度测试而被舍弃了。
在这里插入图片描述
在shader中关闭深度写入后
在这里插入图片描述

关闭深度写入后导致的问题
关闭深度写入后,可以修复两个物体的混合问题,但当模型网格之间有互相交叉的结构时,关闭深度写入就会出现问题,如下图。这是因为关闭深度写入后,我们就无法进行像素级的深度排序,只剩下物体级别的深度排序。
在这里插入图片描述

我们重新开启深度写入
在这里插入图片描述

发现有些地方前面会完全挡住后面,而有些地方能正确混合。这是因为渲染时没有按照从后到前的渲染顺序。
解决办法:
1、按《UnityShader入门》的说法,可以分解网格,从而得到一个“质量优等”的网格,但很多情况下这往往不切实际。
2、使用两个Pass渲染模型,第一个Pass开启深度写入但不输出颜色,第二个Pass进行正常的透明度混合。
在这里插入图片描述

这种方法的缺点是多了一个Pass通道消耗性能,并且模型内部之间不会有任何真正的半透明效果。优点是模型仍然可以和背景混合。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值