OpenGL Alpha混合和对象独立透明度

时间:2013-05-27 13:30:32

标签: opengl

我正在尝试使用以下天真技术实现对象无关透明度(OIT):

  1. 对不透明和透明的对象进行排序。

  2. 使用深度写入渲染不透明。

  3. 禁用深度写入,启用Alpha混合并渲染透明对象。

  4. 如果我只有完全不透明和透明的物体,它可以正常工作。但是有些物体具有透明的alpha纹理(我的所有网格都是平面的)并且需要Alpha混合,其他是透明的情况怎么样。什么是例程在这种情况下? 目前,如果我首先使用深度写入和alpha混合渲染透明,然后使用Alpha通道纹理渲染对象(深度注释,混合)会发生的事情是最后一个渲染平面的部分与第一个相交飞机被剔除。这张照片描绘了我的目标:

    enter image description here

    两架飞机都有一定的透明度,仍然保持深度排序。 我知道我可以使用更复杂的OIT方法,如this。但是有可能在不进入片段链接列表的情况下这样做吗?

1 个答案:

答案 0 :(得分:3)

基于光栅化的渲染器本质上不能很好地处理透明度。光栅化器通过渲染对象,然后渲染另一个对象来工作。它不知道之前呈现的内容或之后呈现的内容。它的工作是采用3D形状并将其转换为颜色区域。

如果有一种简单的技术可以实现与订单无关的透明度,那么您现在已经听说过它,因为每个人都会使用它。没有。每种通用的OIT技术都很复杂,并且具有一些与之相关的性能缺点。

是否有可能为两个平面的非常特定情况找到一种方法?是。您能否对具有任意透明度的任意场景推广该方法?否。