顺序无关Blending
顺序有关的半透明渲染方法有以下两个主要问题:
- 我们需要在提交Draw Call前对需要绘制的半透明物体排序,常按照它们重心距镜头的距离排序。这种如果有两个半透明物体有交叉部分,那么渲染出的结果就不对。
- 在实际渲染前排序通常会带来额外的性能消耗。
OIT, Order Indepentent Transparency, 翻译成中文叫顺序无关渲染(半透明物体)。
OIT中一个很著名的算法叫做Deep Peeling算法,中文叫深度剥离算法。这个算法主要是用来解决顺序有关绘制中的物体交叉问题,通过按照z轴从近到远“层层剥离”式绘制半透明物体来正确渲染有重叠(相交)部分的两个或多个半透明物体。
这个算法的实现需要两个独立的Z-Buffer和多遍Pass绘制。每一遍Pass会比较这次绘制的结果和上一次绘制的结果的Z-Value,如果深度值相同,说明这次绘制的像素在上一次渲染已经存在,或者说,在Z轴上是属于“同一层”的像素。在这种情况下,通过丢弃此次渲染结果能够达到“剥离上一层”的效果,最后将各层渲染结果混合起来得到最终图像。