天天看点

BIM轻量化之路(一)-unity展示

从事建筑行业也有一段时间,知道了整个建筑建设的大概流程:初设、设计、施工交付到后期运营,信息化有个关键技术就是模型的轻量化。

我们的BIM设计人员主要使用Revit 进行三维设计,这里主要是分享基于revit的轻量化实现。实现路径很曲折,先后从uintiy 转到webgl的threejs.

一、几种模型的文件格式

FBX

FBX格式都是三维通用模型格式,基本主流的三维设计软件都可以导出导入FBX,他们主要区别是FBX包含动画、材质特性、贴图、骨骼动画、灯光、摄像机等信息。revit 可以直接导出FBX,通过加载这个文件,3DMAX、UNITY都可以载入进行处理,经过一些测试,3dmax2020可以直接载入rvt文件,可以按照类别、族等来合并模型从而减少模型文件的大小,当然也可在3dmax中进行再次处理,比如图元合并、去除重复顶点、减少mesh等操作从而进一步减少模型体积,一般来说如果有专业的3dmax美术人员可以提供简模+贴图。3dmax 导入的RVT文件可以直接附带颜色,还原度比较好。

文件导入UNITY中往往会丢失很多材质,结果显示的都为灰白色,如图:

BIM轻量化之路(一)-unity展示

因为没搞过unity,期间也做了各种挣扎,查了很多资料,主要的因素好像是这些材质不是标准材质,需要在3DMAX中转换为标准材质,也有说unity的版本不支持或者重新关联,总之我没有解决这个问题,只能在unity重新赋予材质。

IFC

为建筑行业发布的建筑产品数据表达标准。目前, FME2013 IFC读模块支持2x,2x2,和2x3版本的IFC规范。使用了面向对象、范化的数据描述语言EXPRESS 语言,具体的数据格式网上有很多介绍,这里就不在赘述。revit 可以直接导出IFC格式文件,但是3dmax和uintiy 不能直接支持此文件格式。unity市场有个插件BIM Tridify可以将revit转换至uinity上,按照IFC的分类对应,材质、数据保留的也很好,不过是通过云端中转数据。

github上有个开源的BIMSERVER,使用的是JAVA,支持在线转换发布RVT文件。服务端对文件解析并转换为IFC通过文件数据库存储,展现使用的是bimsufer,是基于xeogl引擎开发,不过项目作者不打算继续维护了,估计是开源项目收益太小,目前主要在开发 xeokit,这个两个项目的定位是一样的,但 xeokit 商用要收费,一次性收 €2999。有能力的同学可以在这基础上进行二次开发。我部署了一套,服务端的还好说,只是模型展示的功能比较单一,没有定位、漫游、测量等这个常用功能需要进行二次开发,xeogl说明资源很少,需要自己慢慢摸索。

BIMSERVER:https://github.com/opensourceBIM/BIMserver

OBJ

OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,不包含动画、材质特性、贴图路径、动力学、粒子等信息。OBJ也是比较通用的文件格式,很单纯的描述了模型的顶点、贴图坐标、法线坐标等等清晰简单高效。自定义的数据格式可以参照这种数据格式表达。

GITF/GIB

GLTF代表Graphics Language Transmission Format(图形语言传输格式)。这种跨平台格式已成为Web上的3D对象标准。它由OpenGL和Vulkan背后的3D图形标准组织Khronos所定义,这使得GLTF基本上成为3D模型的JPG格式:Web导出的通用标准。GLTF主要包括两部分,一部分JSON文件描述场景结构,另一部分为二进制文件描述几何信息

https://www.khronos.org/gltf/

此外还有DWG\DAE\3DS等需求模型文件格式,都是各个绘图专业软件的文件格式。

二、UINITY轻量化

我也不太清楚怎么就出现了轻量化引擎这个说法,可能是给不明白的人听的吧,显的高大上。倒不如说怎么把专业的绘图文件转换为更小更轻的文件展示,把各绘图软件的成果统一到一个平台一种格式,理想很好,现实很骨感。每个厂商都想统一市场、统一标准,可是它能吗,更何况还有多版本兼容性的问题,所以才有各种行业协会制定标准让大家遵守,but…

先开始使用Unity作为开发工具的原因是一款成熟的游戏引擎,资源教程多,更重要的是能支持PC,WEB,手机端,一套代码多端使用,可以方便扩展减少工作量,实现的大概流程:

BIM轻量化之路(一)-unity展示

直接解析rvt文件不太现实,只能通过revti接口进行二次开发,revit 提供了IexportContext接口可以导出view\element\mesh等信息,这里只提取了每个构件的属性信息,按照标高形成构件树

经过3dmax对FBX模型文件处理后在导入unity进行开发,模型文件最好不要超过100m,否则会卡死,超过100m最好按专业把模型分成多个文件,不需要查看构件数据的可以合并。导入unity中最大的问题就是材质丢失问题,我遇到的主要是管线材质丢失,始终没有什么好的解决方法。

导入到unity后,剩下的工作就是开发对模型操作的功能,基本包括模型的漫游、定位、高亮、测量等功能,导出webgl的还需要提供外部调用的接口函数。对于大模型三角面比较多的导出webgl后浏览器往往会内存溢出。导出客户端形式体验是非常好的。

总的来说:

如果产品需要的是展示效果,管理功能没那么多的,可以考虑使用uinity这条路,unity今年针对AEC行业推出了新软件 reflect,貌似可以做到revit与客户端实时同步。

如果需要集成大量的管理功能来做平台系统,最好选择webgl,优缺点就是B/S与C/S的区别

bim

继续阅读