在浏览器中查看Revit模型:原理及实现

Greg Schleusner AIA 有一天向我提到,业内许多人认为带有 SVF2 的 Autodesk Viewer 是建筑模型最强大、性能最强的在线查看器之一,并且想知道开源 VIM 查看器和格式如何比较。

可以使用NSDT 3DConvert的  Revit插件 上传你的模型并在线查看预览,并且支持下载GLTF、OBJ、STL等多种格式的3D网格模型。

https://3dconvert.nsdt.cloud

我决定使用 Revit 2024 附带的新 Snowdon 塔示例进行一点比较。我选择此示例是因为它是一个具有多个链接的中型项目。

我认为视觉结果对于双方观众来说都是可以接受的,而且我发现开箱即用的功能具有可比性。 使用 VIM,你必须安装免费插件并选择要导出的视图。 然后上传到VIM云服务器。 使用 Autodesk 查看器,你必须上传所有文件,然后等待其服务器上的处理完成。

两种查看器都可以免费使用,但只有 VIM 查看器是开源的。 VIM 查看器是组件化的,这意味着你可以在有或没有 UI、有或没有附加 BIM 功能的情况下使用加载和查看代码。 源代码可以在这里找到:

  • vim-webgl-viewer - 使用 Thee.JS 加载和查看 VIM 文件的 TypeScript 代码。
  • vim-webgl-component - 一个 React 组件,其 UI 围绕 WebGL 查看器构建

此外,如果你只想加载完全不同的 Three.JS 应用程序的代码,该团队与我分享了一个 JavaScript 代码片段,它可以实现此目的。

两种查看器都使用由服务器提供的自定义文件格式,用于将几何图形快速加载到 WebGL 画布中,并将 BIM 数据加载到 JavaScript 上下文中。 Autodesk 查看器使用名为 SVF2 的专有封闭格式(传统 SVF 格式的后继者,简称为 OTG)。

SVF 格式没有正式发布的规范,并且 SVF2 的条款和条件禁止除 Autodesk 服务器流式传输之外的任何其他使用。

SVF2 格式于 2020 年宣布,作为一种新的“优化格式”,但主要区别在于它增加了对实例化网格的支持。 AEC 模型中常见的情况是多次绘制相同的网格(例如椅子或窗户),但位置不同且方向不同。 这是我们从头开始内置到 VIM 和 G3D 格式中的东西,也是其他可以表示整个场景的文件格式(例如 glTF 和 FBX)的常见功能。

这有点虚伪,因为 Autodesk 查看器和格式使用多种开放技术和标准,包括 Bootstrap、Three.JS、HTML、WebGL、OpenGL、GLSL 和 CSS。

另一方面,VIM 格式是完全开放的,并用 TypeScript、C# 和 C++ 编写了示例代码。 VIM 格式是使用一种称为 BFAST 的非常简单且高效的数据缓冲区表示形式(类似于 Google 的平面缓冲区,但更简单、更快)来实现的。 BIM 数据存储在其中一个缓冲区的关系数据库中,而几何图形以称为 G3D 的快速渲染格式存储在另一个缓冲区中。

1、将 Snowdon 示例导出到 IFC、glTF 和 FBX

有一些在线查看器仅支持 IFC,我想尝试一下,但无法在 Revit 2024 中将 Snowdown Tower 的整个默认 3D 视图导出为单个 IFC 文件。

我还尝试了 Revit 中的一些不同的 glTF 导出器,但使用它们中的任何一个都没有成功生成有效的完整文件。 E-Verse 导出器最接近,但缺少一些几何图形。

不过,我确实成功导出了 FBX,并且可以将结果导入 3ds Max。 然而,它确实给 3ds Max 带来了压力,使其几乎可用。 一个优点是,一旦进入 3ds Max,就有许多有趣的导出选项可供使用,包括 USDZ(需要安装额外的捆绑包)。

尽管目前围绕 USD 有很多炒作(通过 Autodesk、NVIDIA、Apple 等),但最大的挑战是仍然没有太多可用的工具或库支持处理 USDZ 格式的数据。

我还尝试将生成的 FBX 模型导入到我一直在研究的其他几个不同的开源游戏引擎(Flax 和 Stride)中,但它们都无法处理大量的网格和对象。 Flax 告诉我网格太多,Stride 崩溃了。

2、用 Datasmith 将 Snowdon 示例导出到虚幻引擎

我做的另一个实验是使用 Revit 2024 附带的 Twinmotion to Datasmith 导出器将 Snowdon Towers 示例导出到 Unreal。

导出、导入和构建最终项目的过程花费了几个小时(途中出现了一些崩溃)。 一旦我得到正确的设置(没有烘焙灯光,没有导入灯光,没有网格碰撞器),最终结果还不错。 性能是可以接受的(尤其是一旦构建后),并且一旦你克服了 Z-fighting 造成的闪烁(所有观众中都存在),纹理看起来就很好。 我的用例的最大限制是缺乏 BIM 数据,但这对我来说可能是一个商机。 但我的结论是,将数据引入虚幻引擎需要大量时间和耐心,而且可能不容易实现自动化。

3、VIM 桌面查看器

VIM 桌面查看器是围绕 VIM 数据格式从头开始设计的,只需几秒钟即可加载我创建的 Snowdon Towers 示例文件。 它还提供对所有 BIM 数据的访问,并且性能比 Unreal 好得多。 与 Unreal 的唯一区别是纹理不显示在渲染器中。


4、结束语

我不会隐瞒我有点偏见的事实。 我在 VIM 格式的设计和原始 WebGL 查看器实现中发挥了重要作用。 显然,我对公司的成功以及我帮助开发的技术的采用投入了情感。


原文链接:在WebGL中查看Revit模型 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1410239.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

全新神经网络架构KAN一夜爆火!200参数顶30万,MIT华人一作 | 最新快讯

白交衡宇发自凹非寺 量子位公众号 QbitAI 一种全新的神经网络架构 KAN,诞生了! 与传统的 MLP 架构截然不同,且能用更少的参数在数学、物理问题上取得更高精度。 比如,200 个参数的 KANs,就能复现 DeepMind 用 30 万参数…

如何同时或者按顺序间隔启动多个程序

首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 1、打开工具,切换到定时器模块,快捷键:Ctrl3 2、新建一个定时器,我这里演示同时打开多个程序(比…

WPF基础应用

WPF参考原文 MVVM介绍 1.常用布局控件 1.1 布局控件 WPF(Windows Presentation Foundation)提供了多种布局容器来帮助开发者设计用户界面,以下是一些常用的布局: Grid: Grid是最常用的布局容器之一,它允许你通过定…

链表经典面试题上

目录 创作不易,如若对您有帮助,还望三连,谢谢!!! 题目一:203. 移除链表元素 - 力扣(LeetCode) 题目二:206. 反转链表 - 力扣(LeetCode&#xff…

22-ESP32-S3模数转换器(ADC)

ESP32-S3模数转换器(ADC) 什么是模数转换器(ADC)🔍? 模数转换器(ADC)是一种将模拟信号(如电压)转换为数字信号的设备。在ESP32-S3中,ADC用于将模…

深入图像分类:使用美国手语数据集训练定制化神经网络

引言 在前一篇博客中,我们探讨了如何使用MNIST数据集训练一个基础的神经网络来进行手写数字识别。在本文中,我们将更进一步,使用美国手语字母表(ASL)数据集来构建一个定制化的图像分类模型。通过这个过程,…

羊大师:羊奶营养好选择

羊大师:羊奶营养好选择 羊奶确实是一种营养丰富的饮品,它被视为乳品中的精品,被称为“奶中之王”是世界上公认的最接近人奶的乳品。以下是一些羊奶的主要营养成分和其对人体的益处: 蛋白质:羊奶中的蛋白质含量丰富&a…

k8s部署maven项目

failed to verify certificate: x509: certificate signed by unknown authority 今天在执行kubectl get nodes的时候报的证书验证问题,看了一圈首次搭建k8s的都是高频出现的问题。 couldn’t get current server API group list: Get “https://kubernetes.docker…

什么是死锁?代码演示,死锁如何排查和解决

死锁的概念 死锁是指在多线程或多进程中,两个或两个以上的线程或进程在执行过程中,因抢夺资源而造成的一种相互等待的现象。简单来说,就是两个或两个以上的线程或进程都在等待对方释放资源,从而导致所有线程或进程都无法继续执行的…

【python】python标准化考试系统[单项选择题 简易版](源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

[python]texthero安装后测试代码

测试环境: anaconda3python3.8 texthero1.1.0 测试代码来自官方:https://github.com/jbesomi/texthero 代码: import texthero as hero import pandas as pddf pd.read_csv("https://gitee.com/FIRC/texthero/raw/master/dataset/…

解决Linux中磁盘满/dev/vda1使用率100%问题

发现根目录下占用100%,具体还要排场到底是有哪些大文件占用 那么就在根目录下查询各个子文件夹的占用状态,有过大不用的即可删除 df -h *我的磁盘是100G,但这些总共加起来也接近不了这个数值 那就是有可能出现 已删除空间却没有释放的进程…

用python画一个正八边形

1 问题 使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个边长100的正八边形。 2 方法 1、利用for循环解决如何画出图形中相同的八条边的问题。 2、再利用turtle.fd()函数和turtle.seth()函数画出完整的图形。 代码清单 1 import turtleturtle.pensize(2)d0for i in r…

Mybatis进阶(映射关系多对一 )

文章目录 1.需求分析2.应用实例(xml配置)1.数据表设计2.entity设计(不要使用toString会栈溢出)1.Pet.java2.User.java 3.编写Mapper1.PetMapper.java2.UserMapper.java 4.编写Mapper.xml1.UserMapper.xml2.PetMapper.xml 5.测试Us…

初识Vue-组件化开发(应用实例)

目录 一、任务管理应用 1.介绍 2.代码 1. 任务列表组件 (TaskList.vue) 2. 添加任务组件 (AddTask.vue) 3. 应用入口组件 (App.vue) 4. 主入口文件 (main.js) 3.效果 4.总结 二、购物车 1.介绍 2.代码 1. 商品列表组件 (ProductList.vue) 2. 购物车组件 (Cart.vue…

Web APIs 学习归纳6--- BOM浏览器对象

前面几节主要针对DOM进行了学习,现在开始新的内容的学习---DOM浏览器对象。 DOM是更注重页面(document)内容的设计,但是BOM不仅限于页面(document)的设计,而是更加全面包括页面的刷新&#xff0…

【数据结构】:链表的带环问题

🎁个人主页:我们的五年 🔍系列专栏:数据结构 🌷追光的人,终会万丈光芒 前言: 链表的带环问题在链表中是一类比较难的问题,它对我们的思维有一个比较高的要求,但是这一类…

拌合楼管理系统(十六)c#如何实现点击同时启动两个窗体,并且窗体全部关闭后才退出程序

前言: 好长时间没有再写博文了,最近项目有个需求,无人值守程序需要一个client端,主要实现两个功能,一个是显示安装的四个监控的画面,一个是显示地磅称重数量和车牌列表等一些信息。今天主要解决如何显示两个…

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作,今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作,有助于更换理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…

【目标检测】DEtection TRansformer (DETR)

一、前言 论文: End-to-End Object Detection with Transformers 作者: Facebook AI 代码: DEtection TRansformer (DETR) 特点: 无proposal(R-CNN系列)、无anchor(YOLO系列)、无NM…