Banner

WBOIT

一、研究背景与核心问题

在计算机图形学里,半透明对象渲染一直是个老大难

  • 传统方法:先排序片元(按深度远到近),再逐个做 α 混合。但这要求正确排序,代价高且在复杂场景(如粒子系统、毛发)会失效。
  • 理想方案:OIT(Order-Independent Transparency),核心思想是消除对渲染顺序的依赖。
    • 精确 OIT:用 per-pixel linked list 或 A-buffer 存储所有片元,再排序 & 混合,内存/性能消耗大。
    • 近似 OIT:追求“足够好”,但性能开销要可控。

WBOIT「McGuire、Bavoil(2013,NVIDIA)」 就是这种近似方案里最经典的一个,它的核心思想是:每个像素不保存片元列表,而是用加权和的方式直接近似累积颜色与透明度

深度混合的顺序无关半透明渲染

  1. 部分覆盖(Partial Coverage)的应用场景:许多渲染现象需通过部分覆盖建模,包括火焰、烟雾、毛发、云层、带过滤轮廓的物体、非折射玻璃及力场、魔法等特效。其核心是像素被多个表面部分覆盖时,最终颜色依赖表面深度顺序。
  2. 传统渲染的局限:经典的Porter-Duff OVER合成算子(“从后到前alpha混合”)需明确表面深度顺序,实现时需存储/排序图元或片段,存在时间与内存成本,部分场景还需特殊硬件支持实时渲染。
  3. 无序透明(OIT)的需求:为避免排序成本,需开发“无序透明”方法,即不依赖表面顺序的合成算子,同时满足低硬件依赖、低内存占用、无表面穿插“跳变”(popping) artifact等需求。

二、核心概念与基础方法

1. 部分覆盖的数学建模

  • 用标量覆盖度「不透明度」和预乘颜色 描述表面,表示完全覆盖,表示无覆盖。
  • 预乘颜色的优势:支持零覆盖表面通过发射光贡献场景亮度(如“上帝射线”);避免MIP映射或双线性过滤时区域的颜色渗透。
  • OVER算子公式(从后到前迭代合成):
    单个前景表面1与背景表面0合成:
    多个表面合成:

OVER算子依赖“表面覆盖区域统计独立”假设,并非所有场景的“真值解”,但仍是行业标准参考。

2. 无序透明(OIT)方法分类

论文聚焦第四类“混合式无序透明”(Blended OIT),因其简洁性适配低配置平台,前三类方法仅简要提及:

  • 转换为二进制覆盖度,每像素存储多采样。
  • 仅存储最近的部分表面。
  • 建立深度上的连续密度模型。
  • 混合式OIT:重新定义可交换的合成算子,无需特殊硬件,仅需常规渲染到纹理和混合,内存占用小(3-5个标量/纹理),无表面穿插跳变。

三、其他混合式OIT方法

1. Meshkin方法(2007)

  • 首个可交换的混合式OIT算子,核心是“加权和”:
  • 实现逻辑:先渲染不透明表面,复制颜色缓冲到纹理;关闭深度写入,启用“GL_ONE, GL_ONE”混合,通过片段着色器计算并累加。
  • 局限:(\alpha)较大或颜色差异显著时,亮度和背景覆盖度与OVER算子偏差大,甚至超出原颜色色域。

2. Bavoil & Myers方法(2008)

  • 改进Meshkin算子,通过“加权平均”优化覆盖度和颜色近似:
  • 实现逻辑:需两个纹理(accumTexture存储累加值,countTexture存储表面数量),先累加透明表面信息,再通过“GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA”混合计算最终颜色。
  • 局限:引入的“完全不可见表面”会干扰结果,改变高覆盖度表面的颜色。

四、论文提出的新混合式OIT方法

深度加权

  • 基础方法的局限:颜色仅由覆盖度主导,忽略深度顺序(如前景白色烟雾与背景深色烟雾混合,结果与深度无关,不符合视觉直觉)。

  • 核心改进:解决Bavoil & Myers的“零覆盖表面干扰”问题,保证背景覆盖度与OVER算子完全一致,同时优化颜色表示。

  • 实现优势:单遍几何渲染,无需多重采样,仅需常规混合(OpenGL/WebGL/GLES均支持)。

  • 改进思路:为颜色和覆盖度添加“深度权重”,近表面权重更高,模拟真实遮挡关系。

  • 深度加权算子公式:

其中是背景的净可见度,与OIT真值解一致。

  • 权重函数设计原则

    • 单调性:随相机距离增大而单调递减(为相机空间值,远离相机时为负)。
    • 覆盖度关联:权重需随减小而降低,避免近表面低覆盖度物体干扰远表面高覆盖度物体。
    • 数值稳定:通过 clamping 避免16位浮点数溢出/下溢(如)。
  • 推荐通用权重函数(适配场景):

    1. 为OpenGL的gl_FragCoord.z值)。

五、WBOIT 的实现细节

  • 基础新方法实现(Listing 3):需两个纹理(accumTexture累加,revealageTexture跟踪背景可见度),分“累加透明表面”和“计算最终颜色”两步
  • 低配置平台适配(Listing 4):针对无“每渲染目标独立混合”的设备(如DX9主机),重构纹理存储,用单个混合函数实现。
  • 优化技巧:粒子系统/毛发可按“系统级”粗排序,内部无需排序;单色透明表面可打包纹理减少带宽;体积渲染需先归一化覆盖度再上采样,避免边缘过暗。

数学公式:
对像素内的所有片元 ,其颜色为 ,透明度为 ,深度为 ,WBOIT 累积规则是:

最终结果:

其中权重 通常选为与深度相关的衰减函数,例如:

图3. 样本权重函数的双对数图。将曲线的拐点向右上方推移,有助于避免中距离物体出现轮廓化现象,但代价是难以区分距离相机非常近或非常远的不同透明表面。

这样深度越靠前的片元权重越高,视觉效果近似“前面的片元更遮挡后面的片元”。


六、优缺点

优点

  • 不需要 per-pixel linked list 或复杂排序,性能好,适合实时渲染。
  • 结构简单,只需要 2 张 RT。
  • 在大多数情况下(粒子、毛发、烟雾)效果足够好。

方法局限

  • 大深度范围+密集异色透明表面:难以同时区分“簇内”和“簇间”表面,虽仍优于传统方法,但精度受影响。
  • 深度平移非不变性:整体场景沿深度轴移动可能改变颜色,但过渡平滑,且前景精度优先。
  • 隐含假设:依赖“表面覆盖区域独立”“颜色相似或深度均匀分布”“近表面颜色精度优先”,违反时可能出现偏差。

七、结论与应用价值

  1. 核心优势:新方法(尤其是深度加权版)无需排序,保证背景覆盖度正确,颜色精度优于传统混合式OIT;仅需常规GPU混合,内存占用低,适配移动端、主机等受限平台。
  2. 典型应用:粒子系统、毛发、烟雾、雾效等场景,避免表面穿插的“跳变” artifact,提供平滑视觉过渡。
  3. 行业意义:为实时渲染(如游戏、VR)提供高效的无序透明解决方案,平衡精度、性能与硬件兼容性。

WBOIT 是一种 “用数学加权混合代替几何排序” 的近似透明度算法,能在实时渲染中以低成本获得大部分场景的“足够正确”的半透明效果。


八、相关改进

  • MSAA + WBOIT:提升边缘质量。
  • 深度感知权重函数:可以选择指数衰减、倒数衰减,调节前后片元贡献。
  • 结合 TAA:改善噪声与稳定性。