在
最后一部分中,我们讨论了KOMPAS-3D v18的诞生,讨论了用于测试新功能的标准和模型的选择,还谈到了“基本”版本中的渲染主题。
让我们继续讲述“改进的”渲染选项的故事。
绘图电话
Alexander Tulup,程序员:
“显示大场景的性能的主要问题与大量所谓的“绘图调用”有关。 渲染的旧版本建立在数学数据模型之上。 因此,对于每个图元-点,边,面-都需要使用单独的方法进行显示。
对于每个绘制调用, OpenGL (驱动程序)执行一系列检查,同时将传入的命令转换为视频卡可以理解的格式,然后将调用添加到队列中并已发送给执行。

OpenGL中的GPU命令传输方案( 源 )
由于包含大量详细信息,因此对CPU的调用数量大量增加,以至于数据根本没有时间到达视频卡。 我们遇到的情况是,在非常坚固的视频卡上,它会“减速”,就像在中等或更弱的视频卡上一样。
您可以通过减少渲染次数(状态转换)来解决此问题-按材质分组,合并通用几何( 实例化 )等。
我们不应忘记,从整个场景中我们只能看到其中的一部分。 检测不可见物体的算法在这里适用(视锥剔除,遮挡剔除等)
受到“通往百万抽奖之路”和AZDO的示例的启发,我们决定采取一条非常不寻常的途径:尽可能消除CPU端的状态变化。 现在,几乎所有事情都在图形卡上完成。 在从着色器本身( shader )进行绘制的同时,所有必需的属性都直接从视频内存中获取,这归功于视频内存( VRAM )的增加和SSBO的出现。

1,000,000个骰子
这种方法的优点:显示速度确实很高。 速度仅受GPU功能的限制,即它能够处理的数据量。
它还允许非常有效地实现对不可见对象的裁剪机制。 可见性检查的结果直接记录在视频存储器中,并根据它们形成绘图命令。 也就是说,在CPU端,您无需等待。
这种方法的主要缺点之一是开发的高度复杂性。 考虑到所选的方法,必须重新实施很多工作。 此外,我们经常不得不处理相同的着色器代码在不同制造商的视频卡上工作不同或根本不工作的情况。 通常通过更新驱动程序来“解决”此问题,但是有时经过长时间调试后,有必要重写代码。
自然,对视频卡的要求也增加了。 对OpenGL 4.5的支持是关键,但不是唯一的要求。
下面我们展示了组件旋转过程中渲染速度的结果。 回想一下,每秒24帧(fps)被认为是人眼舒适的指标。
此后,在具有以下配置的PC上进行测量:
CPU:Intel Core i7-6700K 4.00 GHz
内存:32 Gb
GPU:NVidia Quadro P2000
操作系统:Microsoft Windows 10 x64 Professional
表1.各种型号的帧速率(每秒帧数,fps)。 多多益善。 显示模式:半色调+线框,禁用简化模式,抗锯齿质量:中(MSAA 8x)向大型装配体添加零部件
最终在大型装配中添加零件的场景最终发展为所谓的复杂测试,如表2所示。
表2.向大型装配体添加零部件的方案。 测试标准。标准 | 标准说明 |
档案开启速度 | 必须从磁盘加载添加到装配中的零部件 |
渲染速度 | 必须定位装配体和插入的零部件,为此,您需要旋转/移动/缩放图像 |
对象选择速度 | 要创建配合,需要选择基本对象:面,平面,边线等。 |
与构建树的同步速度 | 添加到装配体中的零部件及其接口必须在构造树中表示 |
规格模块同步速度 | 规格中必须考虑添加到装配体中的零部件。 |
在表格中,您可以看到点(绘图,开口),这些点从一开始就被选择为单独的加速度方向。 但是改进需要其他组件。
与树同步花费了大量时间。 我们通过实施部分更新解决了该问题。
另一个困难是该规范对KOMPAS-3D性能的重大影响。 在某些复杂的测试方案中,此组件是主要组件(50%或更多)。
规格书该规范是KOMPAS-3D系统模块,它负责形成同名的设计文件。 它是由一个单独的团队开发的。
特别是,团队通过重新设计规范模块的内部机制,加快了插入过程中的同步。
一些结果
将组件添加到“船舶动力装置的减速器”组件中。
组件“船舶动力装置的减速器”的综合测试。
数字显示:1-支架,2-垫圈,3-螺栓。表3.大型装配体中组件的插入时间(以秒为单位)。 越少越好。组成部分 | 动作片 | 时间s |
V16.1 | v17.1 | v18 |
插入 组成部分 支架
 | 载入中 | 2.0 | 3.0 | 2.2 |
切换到配对模式 | 0.6 | 0.4 | 0.4 |
第一次配对 | 第一个对象选择 | 0.4 | 1,0 | 0.2 |
第二个对象的选择 | 0.5 | 1,1 | 0.2 |
选择正确的配对 | 3.8 | 3.6 | 1,0 |
第二次配对 | 第一个对象选择 | 0.5 | 1.4 | 0.5 |
第二个对象的选择 | 0.5 | 1.4 | 0.2 |
选择正确的配对 | 3.6 | 3.0 | 1,2 |
第三对 | 第一个对象选择 | 0.5 | 0.5 | 0.5 |
第二个对象的选择 | 0.3 | 1,1 | 0.3 |
选择正确的配对 | 3,7 | 3.2 | 1,1 |
确认插入创建 | 7.8 | 5.2 | 2,3 |
总支架插入 | 24.2 | 24.6 | 10.1 |
插入 垫圈 从图书馆 标准 产品展示

| 首次配对选择 | 6.4 | 2,4 | 0.4 |
第二对选择 | 4.2 | 3,1 | 0.4 |
确认插入创建 | 15.7 | 9.2 | 4.4 |
插入式垫圈总数 | 26.3 | 14.7 | 5.2 |
插入 螺栓
 | 载入中 | 2.0 | 2.7 | 2.0 |
切换到配对模式 | 0.5 | 0.5 | 0.5 |
第一次配对 | 第一个对象选择 | 0.4 | 1,0 | 0.2 |
第二个对象的选择 | 0.4 | 1,1 | 0.2 |
选择正确的配对 | 3.4 | 2.7 | 1,0 |
第二次配对 | 第一个对象选择 | 0.4 | 1,2 | 0.4 |
第二个对象的选择 | 0.5 | 0.5 | 0.4 |
选择正确的配对 | 3,7 | 2.9 | 1,0 |
第三对 | 第一个对象选择 | 0.5 | 1,0 | 0.5 |
选择第二个对象 | 0.5 | 1,0 | 0.2 |
选择正确的配对 | 4.2 | 3.9 | 1,2 |
确认插入创建 | 32.5 | 5,4 | 2.2 |
螺栓插入总数 | 49 | 21,2 | 9.8 |
三个组件的总插入 | 99.5 | 60.5 | 25.1 |
综合测试可以被认为是程序集的一种编辑场景(从常见的数量来看)。
此外,装配体的重建加快了。 现在,如果您编辑一个操作,则整个装配将不会完全重建-只会更新更改的对象。 为了确定从属操作,即那些操作的结果可能会受到更改后的操作的结果影响的操作,使用一种特殊的算法来建立操作,主体和插入之间的关系。
开启组装
提高读取文件速度的主要思想是使KOMPAS-3D仅读取用户当前需要的内容。
例如:
- 只读装配插入的当前执行,
- 对于下载类型,请仅阅读必要的信息:三角剖分或三角剖分+结果( B-rep )。
所有这些都需要完善文件中的数据结构,以便可以读取其各个部分。
程序员,团队负责人Anton Sidyakin:
“一段时间以来,KOMPAS-3D文件一直是结合了多个服务文件的档案。 其中之一包含以树形结构组织的模型/装配体文档数据。 导航这种结构的能力已经存在。 对于部分阅读,有必要确保各部分之间的独立性。 因此,接收到的部分不应相互引用,否则具有链接的部分将变得“劣等”。
结果,对于细节,可以将性能与文档以及彼此分开。 在装配体中,用于插入和配合的容器分别突出显示。 在执行过程中,还可以将构造的初始数据和结果以三角剖分和实体的形式分开。

如果我们讨论简化的加载类型,那么可编辑程序集将完全加载,并且仅三角剖分以及取决于类型的边界表示(B-rep)会从其插入内容中加载。 在这种模式下显示具有更改的外部变量的插入片段会带来一些困难,因为它们是先前在读取时通过重建即时获得的,并且在简化的加载类型中,没有用于此的数据。 解决的办法是写下将这种插入物重建到装配体中的结果。 由于缺乏重建,因此加速了。
所描述的将文档分为几部分,仅允许将插件中选择的性能加载到组件中。
除了加快打开文件的速度外,部分读取还有助于减少消耗的资源-主要是RAM。
基于这些改进,出现了一种新型的装配件加载-“局部”。 在这种类型的加载中,仅从文件中减去结果(实体,曲面)和三角剖分。 部分加载使您可以创建配对,并且在功能上接近于组件的完全加载。
在对部分读取进行了改进之后,创建自定义加载类型变得很有希望。
提示定制引导类型是用于加载组件的系统方法的组合。 此功能不是新功能,但v18中进行的改进使您可以从使用中获得大量收益。
对于对于以后的构建不重要的组件,可以应用“空”负载类型。 这些可能是隐藏在其他内部的组件(“ vnutryanka”)。 在v18中,具有“空”启动类型的零部件(和整个装配体)几乎立即打开。
表4.具有“ Empty”和“ Dimension”引导类型的程序集的打开时间(以秒为单位)。 越少越好。型号 | 下载类型 | 开门时间,s |
V16.1 | v17.1 | v18 |
 安装方式 真空技术 | 空的 | 12.8 | 11.7 | 2,5 |
尺码 | 21,2 | 20.8 | 2.6 |
 船舶减速器 发电厂 | 空的 | 31,0 | 15.9 | 7.2 |
尺码 | 371.5 | 114.8 | 7.3 |
可以理解产品外观或将被用作进一步构造的支撑对象的其余组件可以“完全”或“部分地”装载。
作为准备自定义启动类型的工具,您可以使用新命令选择“不可见”组件。 我们应用该命令,然后使用上下文菜单将所选组件的加载类型更改为“空”。
投影方式
在加速投影时,我们问自己一个问题,即过滤在数学核心输入处接收到的数据。
首先,我们决定过滤不可见的组件/主体。 为此,使用了遮挡剔除机制-它使您能够确定将要投射的物体是否可见或是否闭合并且在其他物体内部。 此操作在视频卡侧面执行。
当创建模型的投影时,最大的效果将是隐藏在封闭体积内的大量组件,例如:
对于包括在内,选项“粗略投影”负责。 该名称并非偶然-相对较小的零件(例如,发电厂级的螺栓)可能不会投影在装配体上。 对于许多用户而言,这种情况非常合适,特别是在创建尺寸图和总图的情况下。
阅读有关“粗糙投影”选项的更多信息。该选项仅适用于标准投影。 用于指定图像(部分,部分,远程视图)时,不涉及“粗投影”。
即使不使用此选项,与V16和v17相比,投影速度也明显更快。 这得益于数学核心方面的改进。
表5.创建三个标准投影的时间(以秒为单位)。 越少越好。同样在v18中,实现了重建单个关联物种的可能性。
在包含许多关联视图的图形中,用户有机会重建各个不相关的视图。 例如,他要向其添加注释的那个。 您还可以指定启用了“粗糙投影”选项时生成的视图。
此功能不适用于显式加速,但允许用户节省时间。
为加快模型在图纸中的真空技术装置的投影所做的工作的结果:
在下一部分中,我们将描述如何加快质量中心特征(MTC)的计算,关于c3dlabs几何核心对COMPAS-3D 性能的贡献,对C3D Modeler的更改,以及关于哪种硬件适合v18的描述。