【问题标题】:Transperency in modern games and other 3D applications现代游戏和其他 3D 应用程序的透明度
【发布时间】:2014-04-27 08:45:55
【问题描述】:

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

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

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

问题是:如何在现代游戏中实现透明度?我的意思是,其中肯定有透明的物体:窗户、眼镜等。我想了解这方面的最佳实践 - 如何在“大联盟”中做到这一点,但我没有还没有找到任何关于这个主题的论文。

【问题讨论】:

  • 我最近写了一些透明度渲染方法的总结,作为对类似问题的回答。见stackoverflow.com/questions/23280692/…
  • @RetoKoradi 谢谢。关于 GL_SAMPLE_ALPHA_TO_COVERAGE 的信息非常有用。

标签: opengl directx


【解决方案1】:

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

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

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

  • 不透明通道,其中所有实体对象首先按纹理/着色器排序,其次是近到远
  • 透明通道,其中所有半透明对象都按照从远到近严格排序。

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

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 2015-04-07
    • 1970-01-01
    • 2021-12-25
    • 2016-12-27
    • 1970-01-01
    • 2011-07-31
    • 2010-11-03
    • 2012-04-09
    相关资源
    最近更新 更多