中文 | English
- 从 Blender 4.2 LTS Download 安装 Blender 4.2 LTS。
- 从 JOSM Quick Start 安装 JOSM。
- 安装
blosmv2.7.25(GitHub)和mitsuba-blenderv0.4.0(GitHub)。
使用 JOSM 下载目标 OpenStreetMap 区域,并将其保存为 .osm 文件。
- 在 Blender 中打开
blosm插件面板,将Import设置为File。 - 选择
.osm文件。只勾选Import buildings,取消勾选Import as a single object,然后点击Import将 OSM 地图导入 Blender。 - 点击
Add->Mesh->Plane,在世界原点创建一个小平面,然后调整其缩放比例。 - 将导入建筑对象的材质名称修改为符合 Sionna RT 规范的材质名。
将 Blender 场景导出为 Mitsuba 文件。
- 勾选
Export IDs。 - 将轴向设置为
Y Forward和Z Up。
- 从 EpicGames/UnrealEngine 安装 Unreal Engine
4.27.2。 - 从 OSM2World Download 安装 OSM2World
0.4.0。
在下载的 OSM2World 源码目录下运行:
./osm2world.sh -i /path/to/input_map.osm -o /path/to/output_map.glb- 在 Unreal Engine 中搜索插件
Datasmith glTF Importer并启用它。 - 在顶部工具栏点击
Datasmith,然后选择刚刚导出的.glb文件。 - 将
Import Uniform Scale设置为100。
- 在 Build 之前,选中
SkyLight和Light Source,在Details面板中将Mobility设置为Movable。 - 将当前地图保存为 UE4 关卡。
- 将该关卡设置为默认关卡:打开
Edit->Project Settings->Maps & Modes,将Editor Startup Map和Game Default Map都设置为保存好的地图。这样 UE4 工程启动和运行时都会默认打开该地图。
- 将 AirSim 插件复制到 UE4 工程中:
mkdir -p /path/to/YourUEProject/Plugins
cp -r /path/to/AirSim/Unreal/Plugins/AirSim /path/to/YourUEProject/Plugins/- 关闭 Unreal Engine,然后编译 UE4 工程,使 AirSim 模块完成编译:
/path/to/UnrealEngine/Engine/Build/BatchFiles/Linux/Build.sh \
YourProjectEditor Linux Development \
-Project="/path/to/YourUEProject/YourProject.uproject" \
-WaitMutex- 重新打开 UE4 工程,在
Window->World Settings中将GameMode Override设置为AirSimGameMode。 - 在场景中添加一个
Player Start,并将其放在地图表面上方一点的位置。 - 在
Content Browser中打开Geometries文件夹。全选所有静态网格体,右键选择Asset Actions->Bulk Edit via Property Matrix。搜索collision,将Collision Complexity设置为Use Complex Collision As Simple,然后保存。这样所有选中的静态网格体都会具有碰撞属性。 - 点击
Play,使用 AirSim 启动该地图。
- 在 RoadRunner 中创建地图。具体步骤可参考 RoadRunner 官方教程。
- 将地图导出为
.fbx文件。
- 在 UE4 的
Content Browser中点击Import或Add/Import,然后选择导出的.fbx文件。 - 具体流程可参考
1.2小节。唯一区别是.fbx文件不需要启用额外插件,可以直接导入。
- 在 Blender 中点击
File->Import->FBX,然后选择导出的.fbx文件。
在 Blender 的 Scripting 工作区中打开所需脚本,并根据需要运行。
- simplify_map_to_boxes.py:将选中的地图对象(通常是建筑物)替换为立方体代理模型。
- replace_selected_material.py:将选中对象的所有材质槽替换为
itu_concrete。 - mesh_statistics_report.py:生成场景网格统计报告。
- clean_invalid_normals.py:尽可能清理无效法线和退化网格数据。