现代游戏和其他3D应用程序的透明度

时间:2014-04-27 08:45:56

标签: opengl directx

我一直在学习OpenGL和3D图形,我遇到了众所周知的问题:透明度,半透明度和绘制顺序依赖性。

我知道不同的alpha混合算法:减法,这是最好的,但需要正确的排序;加法或乘法,与顺序无关,但结果不佳;禁用z缓冲技术;等等。

所以,我学到的主要结论是:没有神奇的方法来做透明度

问题是:现代游戏如何实现透明度?我的意思是,其中有绝对的反对物品:窗户,眼镜等。我想在这个问题上学习最佳实践 - 这是如何在“大联盟”中完成的,但我没有'找到关于这个主题的论文。

1 个答案:

答案 0 :(得分:5)

  

问题是:现代游戏中的透明度是如何实现的?

以最符合游戏图形需求的方式。是的,这是一个广泛的答案,但在过去15年中情况并没有发生太大的变化。

大多数3D游戏仍会执行通常的2次渲染过程:

  • 不透明的传递,其中所有实体对象首先按纹理/着色器排序,接近第二个
  • 透明通道,其中所有半透明对象的绘制严格按远处排序。

按距离排序很便宜,Quicksort和Mergesort效率很高。但真正糟糕的表现是需要在透明传递中严格绘制到远近,因为这会破坏任何纹理/着色器排序。切换纹理和/或着色器会产生非常明显的性能损失。