【问题标题】:What is the fastest engine for drawing large numbers of semitransparent trianges?绘制大量半透明三角形的最快引擎是什么?
【发布时间】:2016-08-18 08:12:40
【问题描述】:

我喜欢计算机绘图。

我想知道具有以下功能的最快引擎是什么:

使用 4 个颜色通道 rgba 绘制三角形,并允许绘制点光源和定向光源。

纹理将是一个很酷的附加功能,但我再次寻找最快的引擎,而不是最实用的引擎。相机动画和物体动画将是必不可少的。

最后,这个问题确实有 2 个答案,1 个用于一般开发,1 个用于 Web,但如果您只能与其中一个或另一个交谈,您的贡献将不胜感激!

【问题讨论】:

    标签: web graphics 3d gpu


    【解决方案1】:

    您最好的选择可能是OpenGL。在 Web 的情况下,您可以使用 WebGL,而在原生桌面或移动开发的情况下,您可以直接使用 OpenGL。

    【讨论】:

    • 好吧,所以我有一些使用 3js 的 webgl 的经验,请参阅 krewn.github.io 不幸的是,它仅适用于 chrome...至于 OpenGL 与 WebGL 有什么关系/和区别?跨度>
    • 关系是它们基于相同的API。不同之处在于 OpenGL 适用于桌面,而 WebGL 适用于浏览器。 WebGL 的一个问题是它并非在所有地方都受支持,用户可能必须在浏览器中明确启用它。
    • 对于网络,我什么都不知道。对于桌面,还有其他替代方案,例如 DirectX、Vulkan 和 Metal。我相信 Vulkan 和 Metal 也可以在某些移动设备上使用。我不确定 DirectX。
    • 是的,Windows 手机使用 DirectX 图形基础架构 (DXGI) API msdn.microsoft.com/en-us/library/windows/apps/…
    • OpenGL 只支持特定顺序的半透明三角形。如果三角形没有排序,那么它就会变得一团糟,
    【解决方案2】:

    有很多引擎可以完成这项工作。其中最著名的之一就是 Unity,您还可以在其中拥有大量其他性能良好的功能。

    但我认为您实际上不是在寻找引擎,而是在寻找 API。例如 OpenGL 或 DirectX(已经提到过)。 OpenGL 甚至具有特定的 Web 内容 (WebGL)。

    还有一个问题:三角形应该是半透明的。另一个答案中缺少的是三角形是否已经排序的问题。例如,OpenGL 擅长渲染对象,无论哪个三角形离观察者最近都无关紧要。它会即时“搜索”这个并仅显示可见的三角形。但是对于半透明的三角形,可以看到不同的三角形相互重叠,因此不仅需要知道哪个三角形在前面,还需要知道哪个三角形紧随其后等等。 OpenGL 为这个特性提供了混合,但必须在渲染之前手动排序半透明三角形。这称为画家算法。虽然对象的排序是一个复杂的问题,特别是对于大量对象,这可能需要相当长的时间。

    为此,还有另一种解决方案,称为“深度剥离”。这个想法是使用 OpenGL 多次渲染所有三角形。第一次得到前面的所有三角形。现在再次渲染所有三角形,但前面没有三角形。这会产生离观察者第二近的三角形。之后再次渲染所有三角形,但没有前两个“皮”,这导致第三个最近的三角形,依此类推。这很昂贵,因为所有内容都必须多次渲染,但在三角形数量非常多的情况下,这比排序更快(并且由于三角形重叠而更精确)。在大多数情况下,四个果皮就足以获得良好的效果。为了进一步阅读,我建议阅读以下 Everitt 的论文:http://gamedevs.org/uploads/interactive-order-independent-transparency.pdf

    【讨论】:

    • 为参考点赞。在 90 年代,当我编写大量代码来制作 3D 图形时,我经常使用这种技术。不知道它有一个名字 - “深度剥离”。这是个好名字。
    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多