【Metal2剖析(三):OIT顺序无关透明渲染[Imageblock]】

本文介绍了Metal2中利用Imageblock实现顺序无关透明渲染(OIT)的原理和方法,包括加权平均值算法、深度剥离算法。详细解析了如何在fragment shader中利用Imageblock进行OIT的多层剥离,并通过解决半透明物体交叉渲染错误,展示不同层数的OIT效果。

官方Demo下载地址:https://developer.apple.com/sample-code/metal/Order-Independent-Transparency-with-Imageblocks.zip

一、关键词

  • Alpha Test
  • Alpha Blending
  • OIT(Order Independent Transparency)
  • 加权平均值透明混合算法(Weighted Average)
  • 深度剥离算法(Depth Peeling)
  • 双向深度剥离(Dual Depth Peeling)
  • Imageblocks
  • Tile Shading

二、普通透明度算法

深度测试

场景中对于不透明的物体,我们是不需要考虑他们的渲染顺序的,因为有深度测试(Depth Test),最后只有离相机最近的通过深度测试的片段会保留,因此最终可以得到正确的结果;

透明度测试

透明度测试比较暴力,设置一个阈值对片段直接进行clip剔除,即alpha值太小的片段直接舍弃,否则按照不透明进行处理(深度测试)。也就是透明度测试的物体要么完全透明(不显示),要么不透明。一般配合Alpha贴图,设置CutOff阈值参数,进行clip剔除;

透明度混合

透明度混合就是普通的实现半透明效果的方法了。透明度混合下会关闭深度写入(ZWrite),但开启深度测试,和深度缓冲的值进行比较,如果当前透明物体离相机更近则进行颜色混合(透明度混合公式)。

因此普通的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_厚厚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值