【问题标题】:Occlusion algorithms collection遮挡算法集合
【发布时间】:2010-10-15 23:13:07
【问题描述】:

在 CAD 和游戏行业中,遮挡算法是必不可少的。我认为它们在两个行业中是不同的。我的问题是:

  1. 这两个行业分别应用了什么样的遮挡算法?
  2. 又有什么区别?

我正在做CAD软件开发,我们采用的遮挡算法是——将物体标识符设置为它的颜色(一个整数),然后渲染场景,最后读取像素找出可见物体。性能不是很好,所以我想在这里得到一些好的想法。谢谢。


在阅读了回答者之后,我想澄清一下遮挡算法这里的意思是“遮挡剔除” - 在将它们发送到管道之前找出可见的表面或实体。

通过 google,我在gamasutra 找到了一个算法。还有其他好的想法或发现吗?谢谢。

【问题讨论】:

标签: algorithm graphics occlusion


【解决方案1】:

在游戏中,遮挡是使用两个 3D 库之一在幕后完成的:DirectX 或 OpenGL。具体来说,遮挡是使用Z buffer 完成的。每个点都有一个 Z 分量,距离较近的点会遮挡较远的点。

遮挡算法通常由实现 DirectX 或 OpenGL 功能的专用 3D 图形处理芯片在硬件中完成。使用 DirectX 或 OpenGL 的游戏程序将在 3D 空间中绘制对象,并让 OpenGL/DirectX 库在考虑投影和遮挡的情况下渲染场景。

【讨论】:

    【解决方案2】:

    到目前为止,大多数答案都只讨论图像顺序遮挡,这让我很困惑。 我不完全确定 CAD,但在游戏中,遮挡从更高的层次开始,使用 BSP 树、八叉树和/或门户渲染来快速确定出现在视锥体中的对象。

    【讨论】:

    • +1。 DirectX/OpenGL 已经很好地绘制了你看到的东西(通过 Z 缓冲区)。如果您希望限制渲染内容的数量以获得更好的性能,您必须研究其中一种算法。
    • 是的;但除了基于像素的遮挡之外,D3D 和 OpenGL 都可以做场景图“魔术”。剪裁和剔除不足以证明将所有已知的多边形发送给渲染设备,因为剪裁在某种程度上是线性缩放的。
    【解决方案3】:

    您应该搜索的词是hidden surface removal

    实时渲染通常利用一种简单的隐藏表面去除方法:背面剔除。每个多边形都有一个“表面法线”点,该点在距表面一定距离处预先计算。通过检查表面法线相对于相机的角度,您会知道表面是背对着的,因此不需要渲染。

    这里有一些互动flash-based demos and explanations

    【讨论】:

    • 这个过程是必要的,但还不够。任何凹面物体仍然需要以正确的顺序渲染表面,如果一个物体出现在另一个物体的前面,那么简单的背面剔除就没有帮助。
    • 我命名为背面剔除是因为已经提到了 Z 缓冲。如果我再写的话,那么我主要是重申我链接的维基百科页面。
    【解决方案4】:

    硬件像素 Z 缓冲是迄今为止最简单的技术,但是在高密度对象场景中,您仍然可以尝试多次渲染同一个像素,这在某些情况下可能会成为性能问题。 - 你当然需要确保你没有为数千个不可见的对象映射和纹理。

    我目前正在我的一个项目中考虑这个问题,我发现这激发了一些想法: http://www.cs.tau.ac.il/~dcor/Graphics/adv-slides/short-image-based-culling.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 2011-06-27
      • 2014-09-22
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多