官方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),但开启深度测试,和深度缓冲的值进行比较,如果当前透明物体离相机更近则进行颜色混合(透明度混合公式)。
因此普通的实现
本文介绍了Metal2中利用Imageblock实现顺序无关透明渲染(OIT)的原理和方法,包括加权平均值算法、深度剥离算法。详细解析了如何在fragment shader中利用Imageblock进行OIT的多层剥离,并通过解决半透明物体交叉渲染错误,展示不同层数的OIT效果。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



