gpt4 book ai didi

opengl - 最先进的渲染剔除和批处理技术

转载 作者:行者123 更新时间:2023-12-02 11:36:46 34 4
gpt4 key购买 nike

我目前正在升级和重组 OpenGL 渲染引擎。该引擎用于可视化大型建筑数据场景(具有内部的建筑物),并且对象的数量可能会变得相当大。与任何建筑物的情况一样,墙壁内有很多被遮挡的物体,您自然只能看到与您位于同一房间的物体,或者如果您在外面,则只能看到外部。这留下了大量应该通过遮挡剔除和视锥体剔除来遮挡的对象。

同时,有很多重复的几何体可以在渲染批处理中进行批处理,还有很多对象可以通过实例渲染来渲染。

在我看来,以最佳方式将渲染批处理和剔除结合起来可能很困难。如果您在同一个 VBO 中批处理了太多对象,则很难在 CPU 上剔除对象以跳过渲染该批处理。同时,如果跳过CPU上的剔除,很多对象将被GPU处理,而它们是不可见的。如果您完全跳过批处理以便更轻松地剔除 CPU,则会出现不必要的大量渲染调用。

我对现有技术和理论进行了一些研究,以了解如何在现代图形中解决这些问题,但我还没有找到任何具体的解决方案。我和一位同事提出的一个想法是将批处理限制为彼此相对较近的物体,例如房间内或 n 个 session 者半径内的所有椅子。这可以通过使用八叉树来简化和优化。

有人知道最先进的现代图形引擎中用于场景管理、剔除、批处理等的技术吗?

最佳答案

互联网上有很多有关视锥体和遮挡剔除的信息。其中大部分来自游戏开发商。以下是一些可以帮助您入门的文章的列表:

我的(相当快)渲染器的工作原理与此类似:

  1. 集合:将要渲染的所有 Prop 发送到渲染器。
  2. 视锥体剔除:渲染器使用多个并行线程从列表中剔除不可见的 Prop 。
  3. 遮挡剔除:现在你可以在CPU上进行遮挡剔除(我还没有实现它,因为我现在不需要它)。有关如何有效地做到这一点的详细信息可以在《杀戮地带》和《孤岛危机》幻灯片中找到。一种解决方案是从 GPU 读回前一帧的深度缓冲区,然后光栅化其顶部对象的边界框以检查该对象是否可见。
  4. 分割:既然你现在知道哪些对象实际上必须渲染,因为它们是可见的,你必须按网格分割它们,因为每个网格都有不同的 Material 或纹理(否则它们会组合成一个网格)。
  5. 批处理:现在您有了要渲染的网格体列表。您可以对它们进行排序:
    • 按深度(这可以在 Prop 级别而不是网格级别上完成),以节省填充率(如果您的片段着色器非常简单,我不建议这样做)。
    • 通过网格(因为同一网格可能有多个实例,这样可以轻松添加实例)。
    • 通过纹理,因为纹理切换的成本非常高。
  6. 渲染:迭代分区网格并渲染它们。

正如“正面全裸”已经说过的那样:没有完美的解决方案。

关于opengl - 最先进的渲染剔除和批处理技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17233172/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com