网站首页 > 开源技术 正文
现有施工工艺三维可视化方法存在难更新、软件环境限制或非动态等问题。为解决上述问题,结合Cesium提出面向Web的施工工艺三维动态可视化方法,包括相关数据模型与动画定义方式,以动画帧切分和帧集成为核心的三维动画快速生成方法,经效率测试显示,帧切分与帧集成算法性能可满足一般施工工艺动画需求。同时,应用上述方法实现案例工艺Web端展示与工艺步骤动画的在线编辑、播放与动态更新,验证实际工程应用的可行性。
1
施工工艺可视化数据结构
整体模型
施工工艺可视化涉及数据主要包括三维模型、工艺流程及动画,其关系如图1所示。三维模型整体由若干模型部分组成,而模型部分也可继续划分。其中各模型部分可在三维场景中发生状态改变,如位置、颜色等,以此为基本单元可组成整体动画。
模型整体与工艺流程关联,该流程分解为若干工艺步骤。各工艺步骤包括最基本的步骤描述,同时可设置一个视点状态。视点状态包括相机状态与模型可见性,以明确该工艺步骤的具体场景。同时,工艺步骤亦可定义若干动画,这些动画可设置在某段时间内部分模型的位置变换、旋转或透明度变化中,使整体三维模型在三维图形引擎中实现动态变化,指示实际工艺步骤动态过程。
基础动画类型与组合
基础动画类型均为关键帧动画。如图2所示,1个动画中定义动画类型、延时类型、延时与持续时长。基础动画类型包括平移、旋转、缩放、显隐、变色,这些不同动画类型的唯一区别是关键帧的变化量。延时类型按起点划分为开始、上个动画开始、上个动画结束。关键帧动画由多个关键帧组成。每个关键帧需定义起始时刻、过渡函数及目标量。
基础动画间可组合为更复杂的动画,组合方式如下。
中心偏移 基础旋转仅支持以原点为旋转中心,与基础平移配合可组合为绕任意一点旋转的动画。同样,基础缩放仅支持以原点为缩放中心,与基础平移配合可组合为以任意一点为缩放中心的动画。
同期混合 在同一时间段同时应用若干动画可形成复合动画,如渐入、渐出、强调等。
先后接续 前后接续基础动画可实现连贯的动画组合。
2
基于Cesium的三维动画快速生成方法
整体流程
通过定义动画并将其关联三维模型,即明确三维模型在某些时间段内的状态变化。使用这些信息,可计算所有三维模型在每一帧需进行的操作。整体流程如下:
帧切分 遍历所有的基础动画关键帧,将其变化按总帧数进行切分,并根据动画与三维模型部分间的关联,将切分后的变化关联至部分三维模型;
帧集成 遍历所有帧切分的变化部分与所有相关三维模型部分,计算各部分三维模型在各帧内的总变化,即最终结果。
各类型基础动画在Cesium中的实现
基础动画中的各类型可主要划分为空间变换、颜色变化。在Cesium中,加载的三维模型数据组织方式主要符合3D Tiles标准。该标准中,三维数据是三维瓦片集(3D tile set)的形式组织。三维瓦片集为树状结构,其中节点是三维瓦片(3D tile),可代表1个模型部分。
空间变换类型的动画依赖瓦片变换矩阵。每个三维瓦片定义有1个变换矩阵,用于将该瓦片的局部坐标系变换至其父瓦片的坐标系中,若该瓦片是根瓦片,则该变换矩阵则代表所属瓦片集的局部坐标系。通过调整各瓦片的变换矩阵,可对该瓦片以及所有子系瓦片进行空间变换。
颜色变化依赖瓦片内容。三维瓦片几何数据格式包括批量化三维模型B3DM(batched 3D model)、实例化三维模型I3DM(instanced 3D model)、点云模型PNTS(point cloud)以及上述3种格式的复合格式。用于生成动画的三维模型格式主要为B3DM,根据具体需求也可能为I3DM。B3DM或I3DM中,细度最大的模型单元为模型特征(feature)。在Cesium中,可设置模型特征的高亮颜色(highlight color)。高亮颜色显示方式与瓦片集颜色混合模式(color blend mode)有关。颜色混合模式包括高亮、替换、混合。通过设置合适的颜色混合模式且设置模型特征的高亮颜色,可达到目标颜色效果。同时,通过修改颜色A通道,可控制模型特征透明度,而通过修改模型特征的显示属性,可控制其显隐。
动画帧切分
动画帧切分过程中,首先按帧切分关键帧动画的变化量,此后生成各帧变换矩阵或变换颜色。帧切分方式与过渡函数有关,根据过渡函数与帧数对变化量进行插值,并计算每帧内的插值变化。帧切的整体流程如图3所示。
计算各帧变化的方法所需参数包括目标帧位置、总帧数、动画类型、过渡函数类型、开始量、结束量。
动画类型与插值变化的类型及计算方式有关。平移动画结果为平移矩阵,旋转动画结果为旋转矩阵,缩放动画结果为缩放矩阵,显隐动画结果为透明度,变色动画结果为颜色RGB。除基础动画,中心偏移类的组合动画直接在该方法中进行处理,如绕任意一点的旋转动画,结果是向中心点的平移矩阵、旋转矩阵、返回的平移矩阵相乘的结果。比较特殊的是进入类型的动画,其时长标记为0,但在所有动画最开始时执行,如在逐渐显示的动画前需增加隐藏动画。
过渡函数变量范围为[0, 1],值范围为[0, 1]。目标帧位置与总帧数比例为变量,所得值乘以总变化量即单帧变化量,以此可计算为单帧变化结果。
上述算法时间复杂度为全部进入动画,且动画开始时间约为总时长时最大,为O(mka)。其中m为总帧数,k为总关键帧数量,a为平均每关键帧的帧数。
动画帧集成与应用
动画帧集成步骤为动画模式归并→帧动画累积。1个三维模型关联动画集合组成称为1个动画模式。在第1步中遍历所有三维模型,并按其动画模式归并。第2步中,遍历所有动画模式,从开始至结束根据帧切分结果累积动画。第1,2步的流程分别如图4,5所示。
帧动画累积算法时间复杂度为O(mnp)。其中m为总帧数;n为模式数量;p为平均每个模式的动画数量。由于各动画模式间的动画可能重复,因此n·p大于总动画数量。若动画数量为q,模型数量为s,则n·p≤min(q!, s),但很难达到最坏的情况。
帧动画集成后得到每个模型在任意帧的目标变换矩阵及颜色。变换矩阵只能应用至瓦片级别,因此若三维模型为模型特征,需确定所属瓦片,在该瓦片上应用此变换矩阵。
3
测试与应用案例
算法效率测试
效率测试中所用动画类型为平移,每个动画为50个关键帧,最开始偏移100s。各测试组其他关键参数及2个阶段的计算时间结果如表3所示。第1组为参照组,第2~5组分别仅调整帧率、动画时长、各模式动画总数、模式数量,对比其结果与第1组,即可判断这些参数对2个阶段计算时间的影响。
表1 效率测试结果
结果与理论估计相符,即帧率与动画总时长与2个阶段的计算时间呈正比;各模式动画总数主要影响帧集成阶段效率;动画总数与帧切分计算时间呈正比关系,对帧集成影响小。同时,大部分动画总时长<5min,各模式动画总数<100,此情况远小于测试参数,可满足需求。
应用案例
应用案例采用某桥连续梁0号块施工工艺,步骤如下:支架搭设→临时支座施工→永久支座安装→支架预压→安装底模及侧模→安装钢筋及设置预应力→安装内模及端模→混凝土浇筑及养护→拆除模板→预应力张拉→压浆封锚→拆除支架。以支架搭设为例,选择该步骤,三维模型场景切换至支架搭设前的状态,并显示步骤描述。
各步骤间动画相互独立,动画制作界面如图6所示。1个工艺步骤有1个动画列表,列表中的每项可能是关键帧动画或复合动画。在动画编辑对话框中可修改参数,特别是关键帧动画,可创建多个关键帧。1个动画可能关联若干三维模型,此后便完成该动画的设置。
动画设置完成后,可使用帧切分与帧集成算法快速生成各帧动画结果,如支架搭设、混凝土浇筑及养护、支架拆除,如图7所示。
本文来自清华控股有限公司,清华大学深圳国际研究生院;王珩玮,胡振中,赵燕来
猜你喜欢
- 2025-01-29 Blender文件云端GPU渲染方案【vast.ai】
- 2025-01-29 OpenAI的视频生成模型Sora今天终于震撼登场,到底有多强大?
- 2025-01-29 解决 WPF WebBrowser 当前页面的脚本错误问题
- 2025-01-29 还在用 Transition 和 Animation?View Transition出炉了!
- 2025-01-29 .NET 6 Preview 3 中 ASP.NET Core 的更新和改进
- 2025-01-29 这两天刷屏的雨果奖科幻作品《北京折叠》讲的是什么?| 社媒一周大事记(8.16-8.22)
- 2025-01-29 10种最流行的3D模型文件格式及转换工具
- 2025-01-29 使用这个jar包,不到10分钟便可接入短信及邮件发送功能!
- 2025-01-29 澳洲咖啡冠军年:墨尔本精品咖啡馆地图(深度好文)
- 2025-01-29 GLTF-pipeline(gltfpipeline版本迭代过程)
你 发表评论:
欢迎- 05-14WP8.1 GDR1的NTP时间同步没有解决问题
- 05-14抑郁症与焦虑症(四):补充色氨酸,5HTP的作用
- 05-14ntp服务器多久同步一次呢
- 05-14简单三步,轻松解决NVR时间不同步问题
- 05-14Linux的300+个真实运维场景——19 NTP 配置与管理
- 05-14海康威视录像机时间不准怎么办录像机无法查看回放录像,NTP校时
- 05-14安全加倍,解密极氪001电池安全技术
- 05-14海康威视录像机NTP服务器
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)