现代游戏和其他3D应用程序的跨性别

Cru*_*row 2 opengl directx

我已经学习了一段时间的OpenGL和3D图形,我遇到了众所周知的问题:透明度,半透明度和绘制顺序依赖性.

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

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

问题是:如何在现代游戏中实施透明度?我的意思是,在它们中有明确的反对物体:窗户,眼镜等.我想学习这个问题的最佳实践 - 这是如何在"大联盟"中完成的,但我还没有找到任何关于此的论文学科.

dat*_*olf 5

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

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

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

  • 不透明传递,其中所有实体对象首先按纹理/着色器排序,接近远秒
  • 透明通道,其中所有半透明对象被严格地从远处到近处排序.

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