在浏览器中查看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.mzph.cn/diannao/4333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么通过PHP语言实现远程控制棋牌室

怎么通过PHP语言实现远程控制棋牌室呢? 本文描述了使用PHP语言调用HTTP接口,实现控制棋牌室,通过专用的包间控制器,来实现包间内所有电器以及门锁的独立控制。 可选用产品:可根据实际场景需求,选择对应的规…

BetterDisplay Pro for Mac:显示器校准软件

BetterDisplay Pro for Mac是一款出色的显示器校准软件,旨在提升你的视觉体验。它提供了准确的显示器参数调整,包括亮度、对比度、色温和色域等,让你的显示器呈现更真实、清晰、细腻的图像。此外,软件还提供多种预设模式和自定义选…

遥感雷达波段的原理及应用

雷达波段是不同波长的组。每一种都有其独特的穿透地球表面的能力。它们还可以揭示环境的不同方面。 雷达频段在电磁频谱内具有特定的频率范围。这些波段由 L-、S-、C- 和 X-波段等字母表示。稍后会详细介绍这一点。 什么是合成孔径雷达? 合成孔径雷达 (SAR) 是一…

后台图书管理系统:SSM整合开发案例

代码已经完善,文章内容会在后续补充 代码地址(https://javazhang.lanzn.com/ig8tf1wd2aba 密码:1234) 1.1 .SpringConfig 代码 Configuration ComponentScan({"com.itheima.service" }) PropertySource("classpath:jdbc.properties") Import({JdbcConfig…

【STM32+HAL】读取电池电量

一、准备工作 有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32HAL】CUBEMX初始化配置 有关定时器触发ADC模式配置,详见【STM32HAL】ADC采集波形实现 有关软件触发ADC模式配置,详见【STM32HAL】三轴按键PS2摇杆 二、所用工具…

如何替代传统的方式,提高能源企业敏感文件传输的安全性?

能源行业是一个关键的基础设施领域,它涉及能源的勘探、开采、生产、转换、分配和消费。随着全球经济的发展和人口的增长,能源需求持续上升,这对能源行业的可持续发展提出了挑战。能源行业的传输场景多种多样,需要重点关注能源企业…

【热门话题】Chrome 插件研发详解:从入门到实践

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Chrome 插件研发详解:从入门到实践一、引言二、Chrome 插件基础概念…

应用实战 | 别踩白块小游戏,邀请大家来PK挑战~

“踩白块会输”是一个简单的微信小程序游戏,灵感来自当年火热的别踩白块游戏,程序内分成三个模块:手残模式、经典模式和极速模式,分别对应由易到难的三种玩法,可以查看游戏排名。动画效果采用JS实现,小程序…

多线程事务怎么回滚

1、背景介绍 1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败…

Git重修系列 ------ Git的使用和常用命令总结

一、Git的安装和配置 git安装: Git - Downloads git首次配置用户信息: $ git config --global user.name "kequan" $ git config --global user.email kequanchanqq.com $ git config --global credential store 配置 Git 以使用本地存储机…

mysql主库delete一个没主键的表导致从库延迟很久问题处理

一 问题描述 发现线上环境一个从库出现延迟,延迟了2天了,还没追上主库。 查看当前运行的sql及事务,发现这个sql语句是在delete一个没主键的表。 二 问题模拟 这里在测试环境复现下这个问题。 2.1 在主库造数据 use baidd; CREATE TABL…

【数据库】Redis

文章目录 [toc]Redis终端操作进入Redis终端Redis服务测试切换仓库 String命令存储字符串普通存储设置存储过期时间批量存储 查询字符串查询单条批量查询 Key命令查询key查询所有根据key首字母查询判断key是否存在查询指定的key对应的value的类型 删除键值对 Hash命令存储hash查…

软件测试_v模型_w模型

v模型: w模型: 一、V模型的8个阶段及其对应关系如下: 1. 需求分析:明确项目的需求,为后续设计提供依据。 2. 总体设计:根据需求分析,设计系统的总体架构。 3. 详细设计:在总体设计的…

在no branch上commit后,再切换到其他分支,找不到no branch分支的修改怎么办?

解决办法 通过git reflog我们可以查看历史提交记录,这里的第二条提交(fbd3ea8)就是我在no branch上的提交。 再通过git checkout -b backup fbd3ea8,恢复到上次提交的状态,并且为其创建个分支backup,此时…

(七)Servlet教程——Idea编辑器集成Tomcat

1. 点击桌面上Idea快捷方式打开Idea编辑器,假如没有创建项目的话打开Idea编辑器后的界面展示如下图所示 2. 点击界面左侧菜单中的自定义 3. 然后点击界面中的“所有设置...”,然后点击“构建、执行、部署”,选择其中的“应用程序服务器” 4. 点击“”按钮…

C语言-动态内存分配

即使行动导致错误,却也带来了学习与成长;不行动则是停滞与萎缩。💓💓💓 •🌙知识回顾 亲爱的友友们大家好!💖💖💖,我们紧接着要进入一个新的内容,…

k8s RBAC 角色访问控制详解与生产中的实际应用案例

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、k8s简介 2、RBAC简介 二、RBAC关键…

【AMBA Bus ACE 总线 6 -- ACE cache maintenance 详细介绍】

文章目录 ACE cache maintenance什么叫 cache maintenance operations呢?ACE cache line statesACE cache maintenance 什么叫 cache maintenance operations呢? 比如ARM CPU 对自己的Icache 和 Dcache会有大量的transaction操作,也即maintenance操作,如果cache 是dirty 话…

Python的历史演变与作用

目录 1.概述 2.起源 3.发展阶段 4.Python 3的诞生 5.现状与未来 6.Python的作用 6.1.Web开发 6.2.数据科学与人工智能 ​​​​​​​6.3.自动化与脚本编程 ​​​​​​​6.4.教育与学习 ​​​​​​​6.5.其他领域 7.结语 1.概述 Python,一门富有表…

26.统一网关Gateway

网关的功能 1.身份认证,权限的校验。 2.服务的路由,负载均衡。用户请求被分配到哪一个微服务。一个微服务可以有多个实例,所以使用负载均衡。 3.请求限流。 springcloud网关实现有两种:gateway, zuul zuul是基于servlet实现的…