这两年 bims 系统渐渐增加。需要的建筑模型几乎都需要 revit模型导出。 不编程的做法是: revit->navis->fbx。 fbx可以被很多软件和游戏引擎识别。 但是这种导出会有很多问题。比如材质丢失、附加属性无法导出等,同时导出速度非常非常慢。 一个50m的文件可能需要几个小时。 如果使用 three.js,可以配合blender导出为js文件。同样存在以上问题。导出效率可能也是50m文件 需要一晚上。
最终的解决办法 是 写revit 插件进行手动导出。看似比较麻烦,实际revit导出插件步骤挺简单。revit的开发插件为c#, 一般使用 revit2016配合 vs2012或者 vs2013 . 导出为js文件,格式简单。但是对于多模型对象分别导出,three.js的js格式无法保存多个对象。需要分别保存文件。具体可能没深入研究,也许有多模型的写入格式?
c#插件导出,有极大问题,那就是效率。主要为 格式化 各种数值的时候。 这是对比c++可以慢10倍的。所以如果要做到非常高的效率。还得需要在插件中,再次调用C++的dll进行数据导出才会变快。否则一个100m的文件可能需要几个小时。(根据写入算法的水平可能有区别。目前能做到140m文件导出数据json50m,8分钟完成。当然这里面包含了顶点去重复,面内多顶点优化等操作)。
对于顶点材质等信息去重复,经常 需要用到字典,切忌使用 list这种暴力搜索。
想要进一步压缩 按照lod的思路,对顶点相关的三角面计算顶点权重,进行取舍,可以做 lod模型。
如果按照相同对象,独立导出,再记录位置 缩放 旋转等信息。这样导出,可以进一步提高速度。否则对于 bims模型动辄百兆模型,一次导出没有几天也得几个小时。特别是管线导出特别多。 所以revit模型导出的优化(数据量优化,速度优化)总结为:
1、顶点去重复。字典或者hash优化速度。可减少数据10-30%
2、面内顶点优化,字典或者hash优化速度。可以减少数据量10-30%
3、c++优化,这个可以比c#提高10倍。
4、空间顶点相邻三角面 Lod 剔除。这个会影响展示效果。不影响效果的情况下 只能提高10-20%的数据量
5、按照同类对象导出,这个是终极办法,估计可以达到2-10倍数据量压缩。也许可以速度上也提高数倍。(该办法正在研究)
![](/qrcode.jpg)