BIM轻量化——浏览器展示 | 利用unity

本文探讨了将Revit模型转换为Unity WebGL的有效方法。首先尝试了Revit直接导出FBX并导入Unity的方式,发现材质丢失的问题。其次,利用3DsMax作为中间工具进行转换,虽能较好保留默认材质,但自定义材质仍存在问题。两种方案均需额外工作来调整材质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此篇博客仅为记录,记录钻研过程的零碎思路。


        之前考虑过很多可能性,对rvt文件转换格式:.obj、JSON、.gltf等等。这些可能性前人一般都尝试过,而且也都做出来了东西。

        最近联想到之前做的一个小东西——unity模型在web端的显示。

思路一:Revit直接导出FBX

        于是乎,就想到revit模型既然可以导出FBX,那么那么可不可以将导出的FBX文件导入到unity中,再通过unity发布到WebGL平台。

        为了省去不必要的麻烦,在导入unity之前,事先用Windows自带的3D查看器浏览一下3D模型,结果是……模型所有的材质都丢失了,这样的话再次导入unity之后还需要重新赋予材质,又增添了工作量。

        如下图,从全体构件为灰色和窗户材质丢失,可以看出,这一方法并不那么有效。

 

 

思路二:尝试用3DsMax打开.rvt文件,再导出FBX

该思路对于使用默认材质的BIM模型,材质在3DsMax中保持不丢失,同样的,再次导入unity之后,材质也不会丢失,但是如果最初在Revit中建模使用的是自定义的材质,举例,墙体为“带砖与金属立筋龙骨复合墙”时,最终放到unity里面的材质显示“No name”,原因应该是unity标准材质并没有此项。

 

unity↑

revit↑

总结:

        以上两种并不高效,需要在导入unity时,重新赋予某些构件的材质,而且部分场景构件会丢失(比如树木),可以考虑,但不是最优解。


 

来自为知笔记(Wiz)


 

### 使用Unreal Engine 5实现数字孪生解决方案 #### 构建基础架构 为了构建基于Unreal Engine 5 (UE5)的数字孪生解决方案,开发者可以利用已有的开源项目来加速开发进程。例如,“Lightweight WebRTC SDK for UnrealEngine's PixelStreaming” 提供了一种轻量级的方法,在Web浏览器上流式传输高质量的游戏画面和互动体验[^1]。 对于希望创建更加沉浸式的用户体验的应用来说,这种能力至关重要;它不仅限于游戏行业,同样适用于远程协作、培训模拟以及其他需要高保真度视觉表现的应用场合。 #### 数据集成与处理 在实际应用中,要使数字孪生真正发挥作用,则离不开来自物理实体的数据输入。正如所提到的内容那样,通过部署于目标物体上的各种类型的传感器采集得到的信息能够被用来调整和完善其对应的数字化版本的行为模式[^2]。这一步骤通常涉及到了解如何有效地连接外部数据源至UE5内部,并确保两者间通信顺畅无阻。 具体而言,可以通过编写自定义插件或者脚本来完成这项工作——读取RESTful API返回的结果作为动态属性更新的基础;或是借助MQTT协议订阅特定主题的消息队列从而实现实时推送机制等功能扩展。 #### 创建逼真的三维模型 考虑到数字孪生的核心在于精确再现实物特征及其运行状况,因此建立高度写实的对象外观显得尤为重要。得益于ArcGIS Maps SDK for Unreal Engine所提供的工具集,现在可以直接导入经过地理信息系统(GIS)平台加工后的矢量图层、影像底图乃至倾斜摄影测量成果等多尺度空间信息资源[^4]。 这样一来便极大地简化了前期准备工作流程的同时也保障了最终产物具备足够的细节层次感以满足专业需求。此外,针对某些特殊领域如城市规划、建筑设计等方面还可以进一步探索BIM(Building Information Modeling)-GIS一体化方案的可能性。 #### 应用案例展示 最后值得一提的是有关于Unity3D同类型框架对比的话题。尽管二者均能胜任大部分常规任务的要求,但在面对诸如大规模并发访问压力测试或者是跨平台移植兼容性考量之时则各有千秋[^5]。不过就目前来看,凭借着Epic Games官方团队持续不断的研发投入和技术革新步伐,再加上活跃社区成员贡献的力量加持之下,选用UE5来进行前沿科技项目的孵化无疑是明智之举。 ```cpp // C++ 示例:从网络接口接收JSON格式消息并解析成结构体形式存储起来以便后续调用 TSharedPtr<FJsonObject> JsonObject; TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(MessageBody); if(FJsonSerializer::Deserialize(Reader, JsonObject)) { FString ValueString; if(JsonObject->TryGetStringField("key", ValueString)) { // 处理接收到的具体数值... } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒柒星球

(๑•̀ㅂ•́)و✧给点儿赏赐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值