实现建筑分层,UE5技术如此简单

Part1前言

在进行建筑可视化项目的时候,我们往往会遇到需要查看建筑每一层楼里面的信息的需求,这时候我们就需要对建筑模型进行分层处理,从而到查看每层楼里的信息以及楼层之间相互切换的要求。如果出现场景里面楼层比较多的情况,我们也不可能针对每栋楼的模型都进行一些重复的处理,这样大大降低效率,所以我们想着去开发一些小工具,设定一些规则,让我们能经过简单的配置就能达到分层的效果。

Part2实现思路

Revit 进行建模,在3DMAX进行模型分组(因为Revit里面很多命名都是系统自定义的,无法修改,这样导入UE中无法满足我们的要求), 然后导出Datasmith后再导入UE5渲染场景以及使用蓝图进行工具逻辑处理。

Part3命令规则

这里我们把每一栋楼分了3个组,层次结构如下:

|------  楼的名字(组) (根据自己的命名来)
 |------ 楼层(组)  (命名:1F,2F ...  顶层使用TopF)
  |------ 固定的模型的组(组) (命名:Static)
   |------ 具体的模型(StaticMesh)(命名: 根据模型的用途自定义命名即可)
  |------ 参与后续业务逻辑模型的组(组)(Logic)
   |------ 具体的模型(StaticMesh)(命名:根据用途自定义命名)

Part4建模和分组(Revit, 3DMax)

把建好的模型导入3DMax中,按照命名规则进行相应的分组和命名,层级如下图:

ecdc33b98556e544a8cf18553083f744.png

d0cf5ac27c7f9750dd98a92ebc35c8a7.png然后导出Datasmith。

注意:这里导出Datasmith文件的时候,文件命名需命名成楼的
名字。等导入UE就能发现这样做的好处了。例如我这里使用 JS 命名

Part5UE实现

模型导入UE后大纲中的展示,如下图:

d42d0ee18daac671846b01b531fd81ae.png

1、Datasmith文件导入UE后,组和模型都会是一个Actor, 组是DatasmithActor, 具体模型是StaticMeshActor。所以,我们可以通过蓝图首先把这些Actor进行分类存储起来。
2、针对楼写一个公共的楼层分层蓝图类(BP_LayerBuilding),每栋楼关联一个该类,主要功能有:
a. 存储当前楼的Actor引用
b. 把楼层用一个map存储里面,key = 楼层  , value = 楼层对应的Actor的引用。
c. 把楼里面的具体模型存储在Map里面, key = 楼层_Static(Logic).具体模型在大纲中的显示名 , value= 具体模型对应的Actor的引用。
d. 为这栋楼里面的所有的组和模型的Actor 进行tag(标签)设置,他们的tag都是在上面存储的map的key前面加上一个当前楼的命名_ ,这样方便我们通过蓝图节点去寻找到我们需要的Actor进行操作。代表楼的组的Actor

tag 命名样例,拿上面UE大纲的图作为范例:  
1F的tag = JS_1F  
Logic的tag = JS_1F_Logic
Door1的tag = JS_1F_Logic_Door1

3、写一个管理的蓝图类(BP_BuildingLayManager), 用它来管理场景里面的所有楼的分层类。

Part6示例代码

BP_LayerBuilding

151ee6f37798b466b1c5c5e9284a0f93.png 9ee30a60e89b0d17ddb2612e8102a223.png 9cf71a8e23315a2b13c1881569b15c2d.png f4fd93a65a788e6d0ded9f029205c5c1.png

13aade8ada45c185abf0fc03dc87a774.pngBP_BuildingLayManager

7ea9c499b2dd5940c42adbdcce6c03c9.png 0330ab666a8853ab1592b43dcbb83efd.png

Part7使用流程

  1. 在UE中导入3栋楼,3栋楼可以是一样的,如下:

43b95489513352f8c0a1231e1b826b40.png
  1. 在场景中分别给栋楼拖入一个  BP_LayerBuilding蓝图,再拖入一个 BP_BuildingLayManager蓝图。大纲如图:

a3733f18b6bf6e7cae10ced13c351b05.png

这里的分层蓝图类我自定义命名了,为了方便知道是管理的哪一栋楼 3. 然后选中大纲里面的一个 BP_LayerBuilding类,然后查看它的细节面板,会有如下界面:

27e169ca96f47815f6f2fb923a2c0e4c.png

先选择Building Actor , Lowest Floor, ConstTag  如果没有特别要求可以默认,然后点击“解析大楼楼层信息”按钮,就会在 Building Floors , Floor Attached Groups 和 Floor Attached Static Meshs 这三项中看到当前楼层的楼层信息。4. 然后我们运行程序后,就可以点击选中楼,然后对它进行楼层的一些分层效果展示了。我这里的楼层分层效果比较简单,只是做了隐藏显示处理。

7d51715610fc41338abc7ab196d02a59.png bd9303780ecb186263a21f8a660a83eb.png ecebcf6f3883fb82a45e11e912c7db5a.png 082f76159e62b592cf4c115850cdcc3d.png 6747532e343aa7e243ae3bd83b480936.png

Part8总结

本文主要介绍了基于UE5的楼层分层技术的实现方式。

Part9关于IN VETA

IN VETA是一支由建模、美术、UE5组成的年轻团队。

002147d08aa22e82926b041b03a8a9bc.jpeg

我们的开源项目:
https://github.com/inveta

我们致力于三维数字孪生技术分享与研发。
欢迎与各界朋友一起探讨技术与商务合作,一起推动数字孪生的发展。

### UE5 Layered Building Assets In Unreal Engine 5 (UE5), layered building assets provide a powerful way to create complex architectural environments efficiently. These assets allow artists to construct detailed buildings by stacking multiple layers of geometry, textures, and materials. When working with these assets, once they are ready for use, an artist simply needs to move them into the project-specific folder and adjust any necessary redirectors. This process promotes the assets from experimental status to full production readiness[^1]. For importing such assets or creating custom ones, UE5 supports advanced scene management features through FBX files. A new Scene FBX asset creation tool allows re-importing environments, facilitating iterative design improvements on the environment. Initially introduced in version 4.11 with support limited to static meshes, this functionality became more comprehensive in version 4.12, adding capabilities like importing scenes that contain skeletal meshes[^2]. Although specifically mentioned versions refer to earlier releases, similar functionalities continue being enhanced in newer iterations including UE5. To work effectively with layered building assets: - Ensure all components fit within designated folders. - Utilize actor merging tools when integrating different parts of the structure. - Take advantage of improved import options provided via updated FBX handling mechanisms. ```cpp // Example C++ code snippet demonstrating how one might programmatically manage assets in UE5 void UMyBlueprintFunctionLibrary::PromoteAsset(FString AssetPath) { FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>("AssetRegistry"); FARFilter Filter; Filter.PackagePaths.Add(*FPackageName::GetLongPackagePath(AssetPath)); TSet<FName> ObjectTypes; ObjectTypes.Add(UObject::StaticClass()->GetFName()); Filter.ClassNames = ObjectTypes; TArray<FAssetData> FoundAssets; AssetRegistryModule.Get().GetAssets(Filter, FoundAssets); for (const auto& Asset : FoundAssets) { // Perform promotion logic here } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值