许多专家每天都在计算机辅助设计系统中使用 3D 建模的功能,但并不是每个设计师或设计师都会考虑在熟悉的界面命令屏幕背后隐藏着什么,这些命令为 3D 产品设计提供了如此宝贵的舒适性和便利性。通常,使用 CAD 的整体体验受处理大型装配体时的速度以及将 3D 模型加载到系统中的速度的影响。在工程界,几何内核负责这部分功能是完全正确的,并非没有道理。C3D Labs 是 ASCON 集团的子公司,也是 Skolkovo IT 集群的驻地,自 2012 年以来一直在开发商业核心 C3D Modeler。
大多数 CAD 系统用户在处理大型复杂 3D 模型时都面临同样的问题 - 几何模型需要很长时间才能加载到系统中,因此您不可避免地需要等待一段时间才能继续进行产品设计。除此之外,每天早上在工作日开始之前需要重复该过程,现在我们得到了一个小而烦人的刺 激,随之而来的是软件应用程序用户的不满。
在这种情况下,计算机辅助设计系统的开发人员努力以各种可能的方式改进负载指标。特别是,机械制造 CAD KOMPAS-3D 提供了多种从文件加载信息的选项:具有构造历史的模型、面模型和尺寸框。用户选择他需要的东西,从而在应用程序级别解决问题。
另一方面,JT 格式的开发人员在文件架构级别提供了一次传输两种几何表示的能力:边界和多边形。这允许您在 3D 模型的初始加载时将其分面表示加载到应用程序中(可以立即传输以进行渲染),并在必要时并行加载更重的边界表示,大多数用户在其上进行操作CAD 进行。考虑到 JT 是一种开放格式,因此,它不仅可以应用于设计系统,还可以应用于各种 3D 模型查看器或更复杂的程序以处理元数据。
从前两个示例中可以看出,文件优化是最终应用程序级别以及较低级别的一项必需任务。因此,在 C3D Labs,我们在使用 C3D 格式时处理了提高性能的问题,这是 C3D Modeler 几何核心的原生格式。因此,开发并实现了一种用于存储几何模型的扩展格式,它支持以任意顺序从文件中读取单个模型对象,并允许获取有关模型及其对象的结构的信息,而无需从文件中加载整个模型。文件。
让我们更详细地考虑使用 C3D 格式。
使用标准 C3D 数据格式时,模型对象会按顺序写入一组文件空间集群(图 1),该集群具有单个记录点。当一个几何对象引用另一个对象时,内部对象被写入引用它的对象内部。在这种情况下,被其他几个对象引用的模型对象被写入第一个引用对象内,并在“注册对象”表中注册。引用此对象的所有后续对象都必须包含表中的索引。
图 2. 以传统 C3D 格式存储几何模型对象
这种经典方法的优点是编写和读取模型时的开销最小、文件紧凑、软件实现简单以及 API 的可用性。同时,这种处理数据的工作组织对 C3D 格式的使用施加了限制:
只有在阅读整个模型后,才能获得有关模型结构或其单个对象的信息。
以任意顺序加载模型对象和导入单个对象是不可能的,因为: a) 在 C3D 文件中没有关于对象存储位置的信息;b) 一个对象可以嵌套在另一个对象中,或者引用一个存储位置未知的对象。
为了摆脱这些限制,开发了扩展的 C3D 格式。
C3D 格式更新要求 C3D 实验室团队详细说明新结构的主要要求。在某种程度上,它们已经在较早的时候制定了——这是提供对象的独立存储和选择性读取它们的能力,以及提供对几何模型对象信息的访问,而无需从文件中读取整个模型。在附加要求中,值得注意的是新接口的创建(用于读取和写入模型、读取单个模型对象等),并且重要的是支持与当前 C3D 格式的兼容性。
已经在实施阶段,有必要决定在哪里写下对象的特征、它们的存储位置和有关构建层次结构的信息。因此,开发了一种用于在模型文件中创建和存储目录的机制。几何模型对象的独立存储提供如下:
只有那些对象被写入该对象专门使用的对象内。在这种情况下,模型的每一层的对象都记录在一个单独的文件空间中,在文件记录过程中,您可以在不同的记录点之间切换(图2)。
它在文件中的存储位置用作对象的引用。
以扩展的 C3D 格式存储几何模型对象
我们最终会得到什么?将模型及其目录写入文件时,实现了几何模型的一次性处理。在这种情况下,几何模型的对象树(模型的目录)是为 Items 类型的几何模型的所有对象创建的,并以节点的平面列表的形式写入文件,其中树的每个节点存储特定对象的数据:
对象类型,
对象名称,
对象的大小和本地坐标系(如果有),
文件中写入/读取对象的位置(簇索引和其中的偏移量),
节点的直接后代列表,
对象的属性信息。
使用扩展的 C3D 格式时,在加载模型时,您可以确定需要读取哪些特定对象(按名称、类型、大小或属性)并在屏幕上显示(图 3)。开发的数据读取接口支持扩展和标准C3D格式,确保与早期版本的文件兼容。在 CAD 用户需要从文件中部分读取信息而不是整体加载整个模型的情况下,使用此功能将减少数据加载时间。
扩展 C3D 格式的更新结构还将允许优化用于以 C3D 格式读取和写入多核架构数据的算法。
任何值得一提的 PLM 解决方案都包括 PDM(产品数据管理)机制/子系统。
PDM 系统数据库存储在各种 CAD 系统中创建的文档和文件:3D 模型、图纸、规格和计算。
为了让那些没有在工作场所安装相应 CAD 应用程序的用户可以使用这些文档的内容(而且它们可能非常昂贵),PDM 系统生成了“文档的二次演示”——一个副本以“中性”公共格式显示的文档。
在“次视图”加载到系统后,您可以在此基础上直接在 PDM 系统的客户端界面中构建文档内容的预览;在与外部用户交换信息、审批流程以及使用注释和注释交换注释时用作媒介。
在不同时期,VRML、eDrawings、3D PDF 在 LOTSMAN:PLM 中充当 3D 模型的“辅助表示”。
我不会谈论 VRML - 我年轻时的错误......它不会发生在任何人身上。
eDrawings 还不错,但开发适配器和支持服务的价格非常适中。此外,从 2014 年开始,eDrawings 仅在 x64 版本中可用。尽管我们有此愿望,但我们无法再将其作为 ActiveX 构建到我们的 32 位客户端 LOTSMAN:PLM 中。
起初,3D PDF 似乎是一种免费的礼物,已经安装在每台第一台计算机上,这是我们银河系袖子中的事实上的标准,还有一个现成的适合嵌入的 ActiveX 库,但随着时间的推移,它的阴暗面开始显现向我们敞开心扉:
我们有权在我们的发行版中分发 Acrobat Reader。事实证明,并非每台第一台计算机上都安装了 Acrobat Reader。有时安装了不兼容的 Acrobat Reader 版本,有时 - 一个完全不同的 PDF 查看器,与 Acrobat Reader 不兼容,同时,对用户来说非常珍贵。
Acrobat Reader 开发的载体是不可预测的。每个版本都充满惊喜,并增加了我们的工具库,旨在自动关闭不必要的消息窗口、最小化烦人的面板并设置模糊记录的选项。
Acrobat Reader 更新的发布是突然且不可避免的。我们从用户报告中了解到“辅助视图”已停止为我们工作。
来自开发人员的反馈可能是可能的,但是,正如对悲伤论坛的定期审查所显示的那样,这是徒劳的。
有时使用 ActiveX Acrobat Reader 会导致您的应用程序崩溃。我们最终在 Acrobat Reader 中使用了安全模式。在这种模式下,只有隐藏的 Acrobat Reader 子进程会定期崩溃,而我们的应用程序会继续运行。
ActiveX Acrobat Reader 仅在 32 位版本中可用,没有选项。
而最重要的是在处理大型模型(装配体)时表现不尽如人意:
从 KOMPAS-3D 到 3D PDF 的导出速度较慢。
也许部分责任在于 KOMPAS-3D,但它是什么 - 就是这样。
大型 3D PDF 文件大小,这会增加文件系统和网络的负载并需要更多 RAM。
从模型输出精度与文件大小的比率的角度寻找最佳设置并没有给出可接受的结果。
大型 3D PDF 模型的加载速度缓慢。
大文件的渲染速度/质量较差。
我们一直感兴趣地关注 C3D Labs(毕竟是 ASCON 的子公司,同事)的成功和创新。新 C3D 查看器的到来并没有引起人们的注意。在获得该产品的早期测试版之后,我们对功能和性能进行了比较研究。
该研究的结果激励我们启动一个项目,该项目将导致将 C3D 查看器组件嵌入为查看器和注释工具,用于 LOTSMAN:PLM 中 3D 模型的二次表示。
保存为 C3D 格式的速度比 PDF 快 - 快 6 到 18 倍!
没有发现与模型大小和组件数量的相关性。
C3D 文件比 PDF 小 - 2 到 39 倍!
C3D 文件的下载 速度比 PDF 的下载 速度快 - 6x 到 264x。
没有发现与模型大小和组件数量的相关性。
在 C3D Viewer 中旋转时的显示质量和平滑度明显优于 Adobe Reader。
由于某些未知原因,并非总是可以在 Adobe Reader 中测量 FPS。在计量尝试成功的情况下,FPS 不超过“5”。C3D 查看器在不同模型上以 30-100 ++ FPS 的速度“旋转”。
对项目的兴趣是相互的,这对与开发人员的交互质量和解决各种问题的速度产生了最好的影响。
应我们的要求,C3D Labs 团队开发了一种用于注释 3D 模型的功能,提供俄语本地化。
C3D 查看器 API 的许多改进是由于在我们的应用程序中使用该组件的细节。因此,API 中出现了新的方法和事件,这使得可以实现自己的机制来指示模型加载的进度和紧急中断/取消加载。
既然我提到了 eDrawings 的高成本,公平地说,我必须说 C3D Viewer 对我们来说也不是免费的,但它的使用条件要民主得多。