【问题标题】:What is the best way to have realtime 3D rendering in an engineering application? [closed]在工程应用程序中进行实时 3D 渲染的最佳方式是什么? [关闭]
【发布时间】:2010-10-20 06:56:29
【问题描述】:

我们正在开发一个基于 GIS 的应用程序,它在 虚拟现实 环境中模拟真实的世界对象(即管道、道路等)。目前我们使用ESRI ArcGIS 包中的ArcScene 进行3D 渲染,未来我们打算用我们自己的3D 环境替换它。

问题: 在上述应用程序中进行实时 3D 渲染的最佳方式是什么? 我在这个领域没有任何经验,我真的很困惑。我应该使用一种可用的 3D 渲染引擎(下面列出的一些)吗?如果答案是肯定的,那么应该考虑哪些参数(无论其成本如何)? 有没有人有这方面的经验或建议?

情况和必要性:

  1. 我们使用 C# .NET 环境来开发应用程序
  2. 有大量的 3D 对象要显示
  3. 3D 对象分组在不同的 CAD 文件中
  4. 与最终 3D 场景的交互至关重要(例如,选择一个 3D 对象)
  5. 需要加载、卸载、打开、关闭以及设置一层和/或对象的透明度。
  6. 高性能实时渲染具有高细节的广泛模型(超过 800 公顷的区域)(从道路到非常精细的物体,如一颗螺丝钉)
  7. 没有必要提前解决阴影问题(目前)
  8. 纹理必须适用

渲染引擎: 经过一番搜索,我找到了以下 3D 渲染解决方案:

  1. CadFaster|Engine:“CadFaster|Engine 是一种独特且最具可扩展性的 3D 渲染解决方案,适用于技术应用程序。它比普通 CAD 应用程序快十倍以上。该引擎包括获得专利的实时同步机制,用于 3D 数据集和几何,允许自动集成到主应用程序。CadFaster|Engine 还包含获得专利的实时多边形缩减,可改进 3D表现。”引自 DevMaster

  2. Quest3D:“使用 Quest3D 创建软件、Web 和模拟器。Quest3D 是建筑可视化、产品可视化、数字娱乐、 计算机辅助训练和高端 VR 应用程序。”引自 Quest3D 介绍

  3. OpenSceneGraph:“OpenSceneGraph 是一个开源的高性能 3D 图形工具包,应用程序开发人员在视觉模拟、游戏、虚拟现实、科学可视化和建模等领域使用. 完全用标准 C++ 和 OpenGL 编写 .... OpenSceneGraph 现已成为世界领先的场景图技术,广泛应用于 vis-sim、空间、科学、油气、游戏和虚拟现实行业。语言:C/C++ 语言包装:C#,...。”引用自 OSG 主页。

  4. DevMaster3DLinks 也有一个几乎完整的可用引擎列表

【问题讨论】:

  • 在我的回答中添加了更多细节。如果这有帮助,或者您想了解更多信息,请告诉我。

标签: 3d rendering


【解决方案1】:

http://www.blender.org/自带游戏引擎

【讨论】:

    【解决方案2】:

    SlimDX SDK 可能是一个选项,如果你愿意从底层开始,它基本上是一种让你从 .NET 访问 DirectX 的方式。他们还有一系列示例供您开始使用。
    Ogre - LGPL 下的 3d 引擎或购买许可证
    garagegames.com - 也有一些引擎,具体取决于您选择的语言(也是“低”价格。这里没有 500k $ 引擎)

    Ogregaragegames.com 都有“旧”的 3d 引擎,因此您应该能够找到完整的游戏或演示,以便查看性能。我不熟悉编写 cad 应用程序,所以当你说你有 3D 对象时,我不确定那是静态的还是可以在应用程序运行时更改的对象。

    【讨论】:

    【解决方案3】:

    Unity 2.5 现在有一个在 Windows 上运行的 IDE。还有一个网络查看器,因此(使用插件)您可以直接在网页上查看沉浸式环境。独立许可证只需 200 美元。

    BTW GarageGames 现在授权一项名为Torque3D 的新技术

    同样值得一试的是C4 Engine,它在devmaster.net获得了高度评价

    【讨论】:

    • 伙计们感谢您的回答,但我现在需要知道的是:我应该如何选择这个引擎之一?我不能全部测试它们,它们的测试或展示案例与我们的应用程序不同。即我们有一个非常广泛的区域,具有很高的细节。然后我应该如何选择这些引擎之一? Unity、C4 引擎、Torque3D、blender、SlimSDK、OpenSceneGraph、CadFaster 和 ...????
    【解决方案4】:

    您应该查看 WPF,Windows 演示框架,(请参阅 winfx,请参阅 avalon)并深入了解最新的发展。您可能会对this link 感兴趣。还有,Thriple是什么?

    【讨论】:

    • 我不推荐使用 WPF 进行高性能 3D 渲染。除了几百个低多边形对象之外,我对其进行的测试永远都不够。
    • 正如 Erich 所说,我看到 MSDN 文章表明 WPF 不是为高性能 3D 渲染而设计的。
    【解决方案5】:

    无论您使用哪种引擎,都需要了解一些关键概念。

    由于您要处理如此多的对象,因此主要的是细节级别 (LoD)。确保您的对象具有与之关联的真实 LoD。例如,在查看整个场景时,您不会费心渲染螺丝的高细节模型。此外,当靠近它但仍然足够远时,低细节版本的螺丝足以进行渲染。

    此外,您还可以使用 Virtual Earth 之类的技巧并平铺您的数据(与 LoD 相关)。 最后,剔除将非常重要,但可能涉及您已经提到的任何引擎。

    如果您正在处理 GIS 方面的问题,请查看 AGI 的 Insight3D。仍处于早期开发阶段,但有很多优秀技术支持,旨在处理大量对象、剔除、LoD 等。他们甚至可以将视频作为纹理嵌入。

    编辑:

    如果您像您所说的那样使用 C#,我真的会看看 Insight3D。它是一个 3D GIS 引擎。不是游戏引擎。它是基于场景图的,这意味着您不必像其他引擎那样担心逐帧渲染。

    他们有你需要的所有构造

    1. 非常快速的命中测试(即您选择了哪个实体)。
    2. Scene-Graph 类具有简单的条件渲染控件。
    3. 时间作为场景图形的一部分集成到引擎中。这意味着您甚至可以定义事物在之前某个时间点的样子,并在其上来回调整。

    对我来说,3D 引擎和游戏引擎之间的区别可能会变得非常模糊。就我所见,关键的区别在于游戏引擎更关心的是让事情看起来很好而不是准确。例如,我们使用虚幻引擎渲染我们的办公室,但我们必须将所有东西都制作成与现实生活不同的比例。它看起来很棒,但不是现实生活中的尺寸。在处理细节到螺丝钉时,这可能会有所不同。

    一点免责声明:我不为 AGI 工作,但我亲自见过正在创建这个引擎的工程师。他们正在集成最新的 GPU 和渲染技术,因此它是迄今为止我用过的最快、性能最好的引擎之一。它利用了其主要应用程序 (STK) 所使用的知识和技术,许多人将其用于高分辨率天文计算。

    【讨论】:

    • 嗨,埃里希,您的回答很长时间了,但我在页面底部寻找新的答案;)顺便说一句,您的回答有一些有趣的地方,但我的兴趣是如何我实现3D?我应该使用引擎吗?然后是哪一个?创建 3D 场景、管理 LOD、场景分割等对我们的团队来说非常困难。另一方面,我无法区分游戏引擎和渲染引擎!我希望您看到此评论,并感谢您的回答
    • 这个答案真的很有帮助,我会继续在这个问题上工作,未来还会有更多的问题出现,感谢您的关注,希望看到我未来的评论和问题。 P.S.:我给 AGI 公司(Insight3D@agi.com)发了一封邮件,但到现在都没有回复 :(,AGI 网站正在建设中。
    • 在你回答后我有一个新问题:以前我认为GameEng和3DEng都是逐帧渲染来创建3D实时场景,但你说“它是基于场景图的,这意味着您不必像其他引擎那样担心逐帧渲染”。这是怎么回事?
    • 有些引擎是基于场景的(如果你把 Java3D 作为另一个例子)。您不会在执行所需的每个 OpenGL/DirectX 命令时进行逐帧渲染。相反,您声明性地说“这是我的场景。我在这里有一个盒子,有这个旋转,有这个纹理。” WPF3D 以类似的方式工作。您给它信息(3D 对象、纹理、旋转等),引擎会执行所有 3D 剔除和显卡低级命令发布。希望这可以帮助。如果需要,我很乐意再澄清一些。
    【解决方案6】:

    我使用过 OpenSceneGraph,在我看来,如果您不擅长组织图表,则考虑到模型的具体情况(高细节、高对象数量、分散的场景),最终可能会导致性能不佳。您需要能够在空间上对场景进行分区(如八叉树、kd 树等)。

    如果成本不是问题,您可以选择同时提供咨询服务和销售引擎的供应商,这些引擎不需要与 OSG 完全相同的 3D 图形专业知识。

    另一个需要考虑的问题是如何将模型导入引擎。如果您使用文档化的文件格式,您可以自己完成,否则您将需要依赖外部库来读取和/或将模型导入您选择的引擎。

    如果您的模型非常大,您将需要能够分页的东西,因为您的模型不适合可用内存(在这种情况下依赖操作系统进行分页并不是 IMO 的最佳主意)。

    在这里您可以找到 3D 引擎的列表,其中一些是商业的:http://en.wikipedia.org/wiki/List_of_3D_graphics_APIs

    【讨论】:

    • 哇,首先,感谢您的回答。我很绝望,无法再得到答案。最近两天我在osg上做了一些测试,它只是一个3d渲染器工具,但正如你所说,它只是完成了一半。但我不知道:3D 渲染引擎和游戏引擎有什么区别吗? C4Engine 常见问题解答声称:
    • 就引擎性能而言,渲染的多边形数量很少成为限制因素。影响渲染速度的因素很多,包括所用材质的复杂程度、绘制的阴影数量及其类型,以及是否启用了各种特殊效果。没有任何可以说明的具体数值限制。速度通常取决于关卡设计的好坏。”
    • 我看到了基于此引擎的示例游戏的快照,这些快照与我们的需求很接近。那么有没有希望用这种引擎代替上面提到的引擎呢?
    • 我完全没有玩游戏的经验,但我知道渲染游戏和渲染 CAD 文件之间存在显着差异。第一个区别是 CAD 应用程序,尤其是建筑应用程序通常会生成具有相对较低多边形/对象平均值的高对象数模型。另一方面,游戏具有高多边形数量的对象。这样做的一个直接后果是 LOD 在游戏上的效果比在建筑模型上要好得多。
    • 另一个区别是游戏场景可以离线高度优化。当然,许多引擎会允许动态场景,但它们仍然对场景的内容和结构有一定程度的控制。这种差异非常重要,因为您无法利用可能需要渲染的任意 CAD 模型,这就是为什么在非游戏类型的应用程序中正确划分场景如此重要的原因。
    猜你喜欢
    • 2010-09-27
    • 2010-09-16
    • 2010-09-09
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多