开启深度写入的半透明效果

当同一个Mesh自己遮挡住自己,导致模型半透明效果显示混乱,如下图:

通过Frame Debugger看到渲染顺序如下:

产生这种情况的原因首先要搞清楚:

1.首先了解一下在场景中既有不透明物体,也有透明物体,渲染顺序是通过设置Pass的渲染队列实现不透明物体首先渲染,透明物体后渲染。不透明:"Queue" = "Geometry" 透明:"Queue" = "Transparent" 

2.后面的背景跟地面渲染完后,前面的半透明物体由于Mesh相互遮挡,在同一个像素点上,如果有两个半透明点A和B,A在前,B在后,如果先渲染A,A的深度与深度缓存相比较,进行混合,但是A的深度值不会写入到深度缓冲中,所以B在渲染时也会与深度缓冲中的深度值进行比较,发现也需要混合,所以看起来B在A前面,产生混乱。

3.同一个Mesh的渲染顺序是由内部三角形的顺序决定的,所以如果相互遮挡的情况下,如果能够从后向前渲染,或者能够进行深度写入就能够解决这个问题。

半透明物体可以尝试开启两个Pass进行解决:

第一个Pass开启深度写入,不输出颜色,目的仅仅是把深度信息写入到深度缓存中

第二个Pass进行正常的透明度混合。

加了一个只渲染深度的Pass后,渲染流程如下:

这样,在不透明物体渲染完成后,深度缓存中会有深度值,颜色缓冲中会有颜色值,然后半透明物体第一个Pass进行深度写入,记录下各个像素点的深度值。第二个Pass进行颜色Draw Mesh的时候,如果两个遮挡点A、B,A在B前,如果A先渲染,A的深度值与深度缓冲中的进行比较,因为在A对应像素点上A距离摄像机最近,深度值等于深度缓冲中的,会与颜色缓冲中的颜色值进行混合。当B后渲染,与深度缓冲中深度值进行比较,发现没有深度缓冲中的值小,被舍弃,所以不会渲染,所以会呈现正确的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值