顺序无关的透明度渲染(Order‑Independent Transparency, OIT)
概述
在传统的渲染流水线中,透明物体必须按照从远到近的顺序绘制,
否则会由于混合(Blending)顺序不一致而导致透明重叠错误。
然而,在复杂场景或深度排序困难(如体积粒子、水面重叠、半透明模型互穿)的情况下,
这种方式会显著增加 CPU 开销甚至无法正确排序。
为了解决这一问题,Zephyr3D 提供了 顺序无关透明度渲染(Order‑Independent Transparency, OIT) 技术。
OIT 允许透明片元在无需显式排序的情况下正确混合,从而在性能与质量之间取得平衡。
我们的引擎支持以下两种 OIT 技术:
- Weighted Blended OIT —— 基于加权平均的高性能透明度混合方案;
- Per‑Pixel Linked List OIT(ABuffer OIT) —— 精确排序的像素级链表方案。
Weighted Blended OIT
原理简介
Weighted Blended OIT 是一种基于权重的透明度混合技术。
它在片元着色阶段为每个片元计算颜色与透明度的加权值,
随后在后期合成阶段对所有片元的结果进行加权平均,从而得到视觉上合理的透明效果。
该方法不需要构建链表或进行排序,因此性能极高,
非常适合实时渲染、动态场景与资源受限的平台(如移动端或 WebGL 环境)。
优缺点
优点:
- 算法简单,性能优异;
- 可在复杂场景中保持较高的视觉质量;
- 支持多种后处理效果(Bloom、TAA 等)联合使用。
缺点:
- 属于近似算法,无法在所有情况下实现完全正确的排序;
- 当透明层重叠极多时,可能产生轻微的色偏或混合误差。
支持平台
支持 WebGL / WebGL2 / WebGPU 设备。
用法示例
// 为相机启用 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 设备。
用法示例
// 为相机启用 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 | 层叠复杂、透明度深的场景 | 对质量要求极高时使用 |
推荐实践:
- 优先使用 Weighted Blended OIT,在性能与效果间取得最佳平衡。
- 若平台支持 WebGPU,且场景包含大量重叠透明层,可启用 ABuffer OIT。
- 若与 几何体实例化 结合使用透明对象,请务必启用 OIT 以避免排序误差。
- 可与 TAA、Bloom、SSR 等后处理协同使用,增强最终视觉质量。
总结
顺序无关透明度渲染(OIT)是现代实时渲染中不可或缺的关键技术。
它消除了透明物体渲染对前后顺序的依赖,使渲染系统可在保持高帧率的同时获得正确的透明组合效果。
- Weighted Blended OIT:性能优先,近似混合,适合大多数透明场景;
- ABuffer(Per‑Pixel Linked List)OIT:质量优先,像素精确混合,用于复杂或高端项目;
- 合理选用与资源释放可保证透明渲染既稳定又高效。
通过 OIT,Zephyr3D 的透明度渲染在 精度、性能与易用性 之间达成理想平衡。