1. 简介

https://res.tuocad.com/vedio/tuo-visual/introduceTuoVisual-introduce.mp4

tuo-visual是由我司研发的一款3维CAD模型线上浏览和分析系统。它能将通用的3维CAD格式(.step)批量地转化为我们公司独立研发的TuoVisual数据格式。而TuoVisual格式是我们专门针对网络传输,webgl渲染和3维CAD模型边界描述法的几何特征等情况特别优化的一种数据格式。基于这种数据我们可以在pc浏览器,移动端应用,或者小程序等多种应用环境下为用户提供高性能和多功能的3维CAD模型预览服务或者基于此功能的其他综合应用服务。

下面,我们将分别介绍tuo-visual系统的后端模块和前端模块。

2 后端STEP文件自动解析运算

step是3维工业软件之间比较通用的一种交互格式。它一般可以用在不同3维工业软件之间做数据的传递。但是,step文件本身不能被显卡直接渲染成可视化图形,因为它不像stl, ply,gltf 等直接记录顶点,和顶点分组等可以直接注入显卡设备的信息,而是记录着各种基本3维几何体及其边界和拓扑关联等信息。因此,tuo-visual系统解决的第一个问题就是对step文件做预渲染的问题。它能读取step文件中的几何关系和数据将其转化成顶点,法线和顶点分组等信息,除此以外我们还将3D预览时需要的一些几何特征数据一起打包成2进制数据并结合一些针对网络传输和gpu渲染的优化方案形成了我们专有的数据格式TuoVisual。

2.1 解析信息

前文提到step不能像stl, ply, gltf等格式可以很容易的被显卡设备渲染成图形,但它的优点是能比较全面而且较高精度的存储3D模型的几何体信息。有这些信息,我们就可以作出更多的3D交互应用的功能,例如我们可以允许用户较高精度地分析模型的几何体数据,又或者是把这些信息交给CAE软件做工程动力学模拟仿真等。目前的tuo-visual系统1.0版本除了能将所有几何体的可视化信息传给前端应用外,还能够比较完好的将以下几何体的构造信息传给前端应用。

  1. 顶点
  2. 线段
  3. 圆弧
  4. 平面
  5. 圆柱面
  6. 球面

在后文我们提到的几何体分析工具,正是利用了这些信息,允许用户在预览3D模型的同时,可以对模型的各方面尺寸做精确测量。

2.2 优化方案

当前tuo-visual系统1.0版本针对3维CAD文件的线上预览问题做了4个方面的优化。

  1. 渲染数据的保存形式。TuoVisual存储数据结构的设计充分参考了科纳斯组织设计gltf格式,让需要被导入显卡设备的数据以不做任何修改的2进制形式直接“灌入”显存。
  2. 对模型渲染部分做恰当的合并运算。单独的一个3维CAD模型通常包含数个面,边和顶点,在做交互操作的时候,我们希望一个模型的颗粒化程度高,让这些几何元素能独立存在。但做渲染的时候就恰恰相反,对于显卡设备,它希望能够尽可能的减少对整体模型的渲染周期所执行的次数。被渲染的模型,颗粒化越高,整体模型渲染一次所执行的渲染周期的越多,从而渲染性能也就会越低。tuo-visual系统很好的权衡了交互和渲染两个方面对整体模型颗粒度要求的矛盾,它能在保证交互操作功能的同时对3维模型做尽可能多的合并操作。
  3. 对装配体模型进行体积排序。一般情况下体积越大的模型对人类视觉影响所占的比重越大。对于大型装配体,我们会对所有子零件按照体积大小做一个排序,以便于更好的支持后面对模型实时加载实时渲染的功能。
  4. 文件大小的控制。为了更好的支持网络传输的特点,tuo-visual系统会恰当的对模型渲染数据按照一定配置,进行自动分块,分别保存。以此来配合实时加载实时渲染的功能,达到模型还没有加载完,但加载的部分已经先渲染给用户进行应用的目的。

3.1 功能介绍

前端应用的功能分布在2个阶段:加载模型阶段和浏览模型阶段。在加载模型阶段,我们实现的功能主要是针对加载模型时的整体流畅度和模型加载过程的用户交互体验。在浏览模型阶段,我们主要设计的功能是去辅助用户更好的分析和浏览3维零件。

在展开介绍各种功能之前,我们需要先介绍前端应用的3个操作模式:普通浏览模式,移动操作模式和几何体分析模式。

  1. 普通浏览模式。这是我们打开应用时首先进入的模式,在此模式下,我们通过3D视图界面可以直接选中一个或者多个独立完整的3D模型,并执行对整个独立模型或分组的操作。
  2. 移动操作模式。移动操作模式是通过在普通浏览模式下,选中一个独立的3D对象或分组后,再点击底部工具栏所展开的移动按钮中任意一种移动操作后进入。在移动操作模式下,我们只能对被选中对象做移动操作,并无法再对除了被选中对象外的其他对象做操作。
  3. 几何体分析模式。几何体分析模式可以通过普通模式下的几何体分析工具提供的入口进入。在几何体分析模式下,用户不再允许选中独立的3D对象或分组,而是可以选择3D视图中独立的几何特征(点,线和面)。

在后文提到的一些功能或界面操作时,都会提到以上3种操作模式。这里将作为参照供读者参考。

下面我们将对前端应用的功能展开介绍。

3.1.1 分步加载实时渲染

得利与tuo-visual系统后端对CAD文件数据的分块解析和存储,我们可以实现实时加载和渲染的功能。这一点对于大型装配体的cad文件来说尤其重要。设想一下,一个有1000+以上零件的装配体,如果等完全加载后才能让用户浏览模型的话,那这个页面的3D浏览部分每次从打开到看得见东西都需要等很长一段时间。我们所提出的“加载实时渲染”就能解决这个矛盾。在tuo-visual系统打开大型装配体时,大体积的零件将会被优先加载过来,并立刻被渲染到3D视图,用户可以立刻执行各种浏览和分析模型的操作。在有一些情况下,可能用户都不需要等到模型加载完就足够用了。(例如,有时候,一些小螺丝,螺母之类的零件根本不是用户本次打开模型的浏览或分析的目标)

下图演示了分步加载实时渲染一个发动机的过程:

3.1.2 控制加载的运算负荷

尽管TuoVisual文件中的数据在程序运行时能够像gltf一样直接不作任何解释地“灌入”显卡设备,如果用户所打开的模型很大,其加载运算也是十分耗费计算资源的。如果这里不做处理,将很容易导致用户所处页面出现卡顿现象。tuo-visual系统人为的控制了大型模型加载的速度,以此来保证系统所处页面流畅度不受影响,用户可以放心地在模型加载的同时执行分析模型或其他操作。

3.1.3 实时反应模型的加载状态

tuo-visual项目使用了实时加载实时渲染的技术,相配套的,用户有时候需要知道哪一个装配体中哪些子模型已经被加载,哪些子模型还没有加载,更甚至,哪些模型加载失败了。tuo-visual的前端应用提供了很好的响应式界面来实时传递子模型的加载状态。请看如下动图:

上图中左侧树形结构视图,每一条项目的颜色能够标识其所对应零件的加载状态。红色表示未加载,黄色表示正在加载,绿色表示已经加载。当模型加载完毕时,系统会有弹窗提示模型加载完成。如下图所示:

3.1.4 实时监控渲染性能并主动调整应用状态

我们知道人类眼睛普遍能接受的最慢更新画面频率大约是24帧每秒,低于这个速度,人们看到的电影或者画面就能感觉到卡顿了。一般设备上在渲染普通模型时都能做到60帧每秒,但当一个设备渲染资源有限(如手机上),或者在渲染一个比较大的模型时,这个设备渲染模型的帧率就达不到60帧每秒了,有时候甚至低于24帧每秒。为了保证用户能在多种设备状态下都能较好的浏览大型CAD模型,在模型加载过程中,tuo-visual将会实时监控设备的渲染状态,一旦发现渲染状态低于一定预警值时,它将会主动关掉剩下未加载部分模型的可视性,以此来保证渲染画面和交互的流畅度。当然,在此之后,用户也可以手动重新打开被关掉的那些模型的可视性。