基于threejs加载大型BIM模型的优化尝试

这篇具有很好参考价值的文章主要介绍了基于threejs加载大型BIM模型的优化尝试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引子

轻量化引擎,该合并的合并,该共享的共享,材质光影等等效果都很难再提升的时候,我们总不能转到隔壁的去渲染技术栈去吧?

最近几个月,陆陆续续做了很多的尝试,先把这些方案的思路记录下来,欢迎大佬给予点评,如果这里有坑,请偷偷告知我一声,避免踩雷,就当做做善事啦,谢谢。

关于threejs实现简易的遮挡剔除

原理

思路上是很简单的。以下来自知乎的大佬,忠文老弟。

作者:忠文老弟
链接:https://zhuanlan.zhihu.com/p/557549596
来源:知乎

  • 增加一个预渲染pass,用以绘制场景中需要优化的对象列表的包围盒
  1. 注意这里是包围盒就可以减少大量的顶点数据
  2. 包围盒的数据结构是固定的,我们可以做一些特殊的优化使用,后面会介绍
  3. 预渲染的材质一定要尽量简单,同时需要在结果能够区分是哪个mesh,尽量使用同一个材质(也是优化内容)
  4. 构建独立的preScene和boxmesh(包围盒mesh),渲染结果存入新构建的 RenderTarget
  • 对于预渲染pass的结果,通过颜色校验,判定某个mesh是否需要显示
  1. 针对每个mesh建立boxmesh(包围盒mesh)
  2. 建立颜色映射关系,mesh --> color,color --> mesh 进行相互映射
  3. 优化颜色取值范围,将整个 boxmeshes 放入一个 group,并且计算出group在预渲染结束之后的窗口坐标范围
  4. 使用renderer.readRenderTargetPixels函数将预渲染pass的RenderTarget特定区域的颜色信息读取到应用,进行后续的判断

上面有点啰嗦,我们翻译一下:

1、为每个物体生成box,并且赋予特有的颜色。1个色号=一个物体。把RGB用完都有255*255*255个了。大概够用。

2、离屏渲染到一个新的画布,并生成图片。

3、扫描图片的颜色。出现的色号对应的物体设置为可见,反之不可见。完闭。

其优势在于离屏渲染的是box,再加上是单一的baseMaterial,可以大量的使用合并,建议用顶点着色来设置(不用照搬忠文大佬的代码,它为每个物体创建的mateiral太多了)。

threejs bim,threejs,Revit,BIM,three.js,bim

 

总结

但是,在建筑行业这一个方式不太可行。效果不佳

1、使用box,有一些板、路面、桥梁的box过大,误判成遮挡,其实并没有遮挡,还是要显示。

2、使用原始顶点……不划算。直接渲染算了。

在BIM模型轻量化中使用八叉树

其实找到了2个应用点。

导出原始模型的空间划分

为了避免大量的构件,特别是跨了楼层和远距离空间的合并,导致threejs自带的视锥剔除效果不佳(如果整个模型合并,视锥会直接失效!因为相机看哪里,这个庞大的合并mesh都得渲染。)

所以在模型出来的时候就先打组。原则上,组要足够聚合,这个度要自己尝试,很难把握。

合并构件的时候,不跨组。

模型点击-减少射线碰撞对象

原理

这个可以用threejs的官方库,拉下来three代码之后在这个路径下:three/examples/jsm/math/Octree.js

在threejs的scene场景分割八叉树,鼠标点击产生一条射线。这条射线路过的空间,所包含的构件才需要用来检测,提高pick效果。

总结

这不是一个最优的方法。

首先在八叉树中,还是跟大量的合并以及instanced对象产生冲突,并且,还挺费内存的。我怀疑这个技术路线没有哪个引擎在用。在小模型的时候,不如直接Raycaster去检测所有对象来得快。

另一种LOD

这是本人灵机一动,瞎折腾出来的骚操作。如果有大佬路过,也请不要嘲笑,如果有更好的方法可以留言。感谢。

这种LOD,我并没有使用第三方库去做减面,或者使用原始的Revit模型去设置精度参数。而是对物体的几何内部进行分割(类似八叉树,然后保留顶点聚合的盒子)。

于是这个盒子有一定的内聚性,将来在前面2个应用上,似乎都有条件去改善了。

1、先完成空间切分

threejs bim,threejs,Revit,BIM,three.js,bim

 2、保留顶点所有的box

threejs bim,threejs,Revit,BIM,three.js,bim

 

threejs bim,threejs,Revit,BIM,three.js,bim

 threejs bim,threejs,Revit,BIM,three.js,bim

3、可以对保留的这些盒子,进行合并。

4、后期在应用的时候,可以当作LOD在视线距离上使用,也可以在剔除的时候使用。 文章来源地址https://www.toymoban.com/news/detail-809928.html

到了这里,关于基于threejs加载大型BIM模型的优化尝试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE4开发BIM程序 的 流程

            某机构 BIM设计研究中心主任马晓龙 ,他对编程颇有研究。今天他会用通俗易懂的语言来讲解基于游戏引擎UE4的BIM技术可视化应用。对于想要自己开发程序的设计师一定要读一下! 可以简单的理解为,一款可以开发软件的软件!文章将BIM技术与主流游戏开发引擎UE4(

    2024年02月03日
    浏览(26)
  • 施工阶段如何应用BIM技术,建模助手有话说

    ​近些年来,越来越多的建筑项目采用BIM来提升管理水平和品质,特别在施工阶段,通过BIM技术可以将施工现场3D模型与施工进度链接,超前模拟施工情况,完成各种精细化施工方案,除了保障施工工作顺利推进,还加强了施工流程的管理,大大提升了施工效率。 基于BIM施工

    2023年04月19日
    浏览(34)
  • BIM如何通过3D开发工具HOOPS实现WEB轻量化?

    随着建筑行业的数字化转型和信息建模技术的不断发展,建筑信息模型(BIM)已经成为设计、建造和管理建筑项目的标准。然而,BIM模型通常包含大量的数据,导致在Web上的传输和查看效率低下。为了解决这一挑战,HOOPS技术(Highly Optimized Object-Oriented Parallel Software)崭露头角

    2024年02月07日
    浏览(46)
  • 【BIM入门实战】Revit安装失败的常见问题及解决办法汇总

    本文总结一下Win7-Win11系统之上,Revit安装失败的常见问题及解决办法,期望能帮到大家。 查看安装日志,定位问题 可以在安装日志中发现字样“Microsoft Visual C++ 2008 SP1 Redistributable (x64) Failed Installation aborted, Result=1603”。什么原因导致的不用管,反正是这个“Microsoft Visual C++

    2024年02月08日
    浏览(68)
  • 3D Web轻量化引擎HOOPS Communicator如何实现对BIM桌面端的支持?

    HOOPS Communicator是一款简单而强大的工业级高性能3D Web轻量化渲染开发包,其主要应用于Web领域,主要加载其专有的SCS、SC、SCZ格式文件;HOOPS还拥有另一个桌面端开发包HOOPS Visualize,主要加载HSF、HMF轻量化格式文件。两者虽然同为Tech Soft 3D公司的图像处理引擎,但两者加载的文

    2024年02月13日
    浏览(41)
  • Cesium三维数据格式以及生产流程详解(glb,osgb,obj,bim,ifc)等

    最近收到私信问我在cesium上展示的一些三维数据是如何生产和处理的,这篇文章就给大家一次性讲个透彻。 首先我们来做做分类。市面上能接触到的,常见的,cesium上支持展示的三维数据大致分为以下几种: 1.倾斜摄影(osgb,obj) 2.点云数据(las,pts) 3.手工模型(gltf,

    2023年04月23日
    浏览(31)
  • AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。

    1、提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能,并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 2、轻量化技术应用与个性化定制 AMRT3D适用于快速开发数字孪生3D可视化项目、

    2024年04月22日
    浏览(104)
  • 如何使用 ThreeJs 以 glTF、FBX 和 OBJ 文件格式加载 3D 模型,使用 ThreeJS 加载和显示带有纹理的 3D 模型

    在本文中,我展示了如何使用 ThreeJS 在 Web 视图中加载 3D 模型。Three.js 是一个跨浏览器的 JavaScript 库和应用程序编程接口,用于使用 WebGL 在 Web 浏览器中创建和显示动画 3D 计算机图形。加载不完整的原因有很多,例如纹理和材质渲染不正确。 创建场景 渲染场景 动画立方体

    2023年04月08日
    浏览(50)
  • Threejs模型切片转3DTiles加载

    个人主页: 左本Web3D,更多案例预览请点击==》 在线案例 个人简介:专注Web3D使用ThreeJS实现3D效果技巧和学习案例 💕 💕积跬步以至千里,致敬每个爱学习的你。获取模型或源码请点赞收藏加留言,有问题请私信或加微信  1,模型切片,如下图 选择“通用模型切片”模块

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包