Skip to content

顺序无关的透明度渲染(Order‑Independent Transparency, OIT)

概述

在传统的渲染流水线中,透明物体必须按照从远到近的顺序绘制
否则会由于混合(Blending)顺序不一致而导致透明重叠错误。
然而,在复杂场景或深度排序困难(如体积粒子、水面重叠、半透明模型互穿)的情况下,
这种方式会显著增加 CPU 开销甚至无法正确排序。

为了解决这一问题,Zephyr3D 提供了 顺序无关透明度渲染(Order‑Independent Transparency, OIT) 技术。
OIT 允许透明片元在无需显式排序的情况下正确混合,从而在性能与质量之间取得平衡。

我们的引擎支持以下两种 OIT 技术:

  1. Weighted Blended OIT —— 基于加权平均的高性能透明度混合方案;
  2. Per‑Pixel Linked List OIT(ABuffer OIT) —— 精确排序的像素级链表方案。

Weighted Blended OIT

原理简介

Weighted Blended OIT 是一种基于权重的透明度混合技术。
它在片元着色阶段为每个片元计算颜色与透明度的加权值,
随后在后期合成阶段对所有片元的结果进行加权平均,从而得到视觉上合理的透明效果。

该方法不需要构建链表或进行排序,因此性能极高,
非常适合实时渲染、动态场景与资源受限的平台(如移动端或 WebGL 环境)。

优缺点

优点:

  • 算法简单,性能优异;
  • 可在复杂场景中保持较高的视觉质量;
  • 支持多种后处理效果(Bloom、TAA 等)联合使用。

缺点:

  • 属于近似算法,无法在所有情况下实现完全正确的排序;
  • 当透明层重叠极多时,可能产生轻微的色偏或混合误差。

支持平台

支持 WebGL / WebGL2 / WebGPU 设备。

用法示例

javascript
// 为相机启用 Weighted Blended OIT 渲染透明物体  
camera.oit = new WeightedBlendedOIT();

这种方法适用于大多数带有透明效果的物体(例如玻璃、水、植被、粒子等)。

提示
在启用 Weighted Blended OIT 时,无需进行透明物体的排序处理。


Per‑Pixel Linked List OIT(ABuffer OIT)

原理简介

Per‑Pixel Linked List OIT(又称 ABuffer OIT)是一种基于链表存储的高精度透明度算法。
在渲染阶段,它为每个像素构建一个链表结构,链表中记录所有命中的透明片元的颜色与深度信息。
随后在合成阶段对这些片元按深度顺序进行精确混合,由此获得完全正确的透明叠加结果。

优缺点

优点:

  • 渲染结果与传统从远到近排序完全一致;
  • 可在极其复杂的透明场景下保持正确并精确的视觉表现;
  • 对光照、后期以及反射系统兼容性极佳。

缺点:

  • 需要更多显存和 GPU 计算资源;
  • 不适合在低端设备或性能敏感应用中使用。

支持平台

仅支持 WebGPU 设备。

用法示例

javascript
// 为相机启用 Per‑Pixel Linked List OIT(ABuffer OIT)渲染透明物体  
// 构造函数参数用于设定支持的最大透明层级数量,默认值为 16  
camera.oit = new ABufferOIT(20);

建议
在每像素透明层级较多(如体积特效、水雾、玻璃幕墙等)时,
可适当提升层级数量(如 24 或 32)以获得更佳质量;
但数值过大会显著提升内存与性能开销。


资源管理与释放

当camera被释放时会自行释放其持有的OIT资源


性能与使用建议

技术类型精度性能表现适用平台典型场景建议
Weighted Blended OIT近似极佳(高帧率)WebGL / WebGL2 / WebGPU一般透明物体、水面、玻璃、粒子默认推荐使用
Per‑Pixel Linked List OIT精确较高(显存开销大)WebGPU层叠复杂、透明度深的场景对质量要求极高时使用

推荐实践:

  1. 优先使用 Weighted Blended OIT,在性能与效果间取得最佳平衡。
  2. 若平台支持 WebGPU,且场景包含大量重叠透明层,可启用 ABuffer OIT
  3. 若与 几何体实例化 结合使用透明对象,请务必启用 OIT 以避免排序误差。
  4. 可与 TAABloomSSR 等后处理协同使用,增强最终视觉质量。

总结

顺序无关透明度渲染(OIT)是现代实时渲染中不可或缺的关键技术。
它消除了透明物体渲染对前后顺序的依赖,使渲染系统可在保持高帧率的同时获得正确的透明组合效果。

  • Weighted Blended OIT:性能优先,近似混合,适合大多数透明场景;
  • ABuffer(Per‑Pixel Linked List)OIT:质量优先,像素精确混合,用于复杂或高端项目;
  • 合理选用与资源释放可保证透明渲染既稳定又高效。

通过 OIT,Zephyr3D 的透明度渲染在 精度、性能与易用性 之间达成理想平衡。

Released under the MIT License.