ArcGIS CityEngine 提供了强大的工具,用于以程序方式创建详细的建筑物或大型城市。为了进一步处理或可视化,用户通常需要将这些模型导出到第三方应用程序。

虚幻引擎已成为建筑可视化或创建交互式体验的流行工具,但用户在将场景从ArcGIS CityEngine导出到虚幻引擎时通常会遇到的一个问题是缺乏高质量的材质和网格。幸运的是,虚幻引擎提供了多个资源库,例如QuixelTwinmotion Assets for Unreal Engine,这些资源库可以在虚幻生态系统中免费使用。

在这篇博文中,我们将指导您完成一个简单的工作流程,在导入 ArcGIS CityEngine Datasmith 场景后替换虚幻引擎中的资产。替换工作流程由虚幻引擎的数据资产(可以看作是简单的表格数据)控制。正确设置后,这些数据资产可以在项目之间共享。

为了帮助演示工作流程,我们创建了一个模板项目,其中包含其他工具来帮助替换,这将在本博客文章中详细解释,以便您可以继续操作。

我们还提供了一个现成的 ArcGIS CityEngine 和 Unreal Engine 示例工程,其中大量使用了这些替换。要打开虚幻项目,请确保安装了Twinmotion Content for Unreal Engine插件

下载链接

适用于虚幻引擎的 CityEngine 替换模板项目

    • 可用作新项目模板的替换项目

适用于虚幻引擎的 CityEngine 替换插件

    • 替换插件,可以集成到现有项目中

波士顿示例虚幻项目

波士顿示例 CityEngine 项目

更换工作流程

在本节中,我们将解释如何在虚幻引擎中定义替换,以及如何使用提供的模板项目在场景中执行替换。

reaplcement_workflow
Datasmith从CityEngine到虚幻引擎的工作流程

首先,使用 Datasmith 导出器从 ArcGIS CityEngine 导出场景。在虚幻引擎中,我们可以使用Dataprep导入工作流程,也可以在导入Datasmith场景后在关卡视口内应用替换。

通常,此工作流程是迭代的,这意味着我们可以多次执行替换,直到达到所需的结果。

ce_park-scaled
在 ArcGIS CityEngine 中生成的公园
unreal_park-1
同一个公园导出到虚幻引擎,所有资产都替换为高质量的虚幻版本

从 ArcGIS CityEngine 导出

要从 ArcGIS CityEngine 导出场景,我们使用 Datasmith 导出器。根据用例,有几个选项需要考虑。

export_dialog_unreal
CityEngine Datasmith 导出选项
  • 全局偏移量: 全局偏移应居中,以避免由于坐标可能较大而导致的精度误差。
  • 网格合并: 对于小场景,应将其设置为“每个初始形状”,对于大型场景,应设置为“全局”或“按材质全局”。通常,每个初始形状可以在虚幻引擎中更好地处理,因为每个建筑物都可以单独修改。
  • 实例化: 使用多个实例(例如,树叶、草地或树木)时,建议将此选项设置为“使用实例化的静态网格体 Actor”。这将使用虚幻引擎中优化的分层静态网格体组件,该组件可提高替换工作流程期间的性能,以及运行时的渲染性能。注: 如果使用的是 Visual Dataprep 工作流,则分层实例不会在预览编辑器中正确呈现。

有关其他选项,请参阅 ArcGIS CityEngine Datasmith 导出器文档

提示:为了更容易在虚幻引擎中配置替换,建议使用 material.name 属性适当地命名 CGA 材质(例如,通过调用 set (material.name, “Brick”))。我们可以稍后在虚幻引擎中引用这些名称来替换材质。

 

虚幻引擎

在虚幻引擎中,我们可以定义替换并在Datasmith场景中执行它们。首先,我们需要确保我们的项目包含必要的工具。如果我们想从一个新项目开始,我们可以使用适用于虚幻引擎的 CityEngine 替换模板项目。或者,对于高级用例,我们可以将适用于虚幻引擎的CityEngine Replacement Plugin添加到现有项目中,方法是将其复制到项目的Plugins文件夹中(另请参阅虚幻引擎中的插件)。

定义替换项

替换工作流程由虚幻数据资源控制。我们的模板项目提供了两种特殊类型的数据资产。MeshReplacement 类型定义如何替换 StaticMesh 实例,MaterialReplacement 类型定义如何替换网格上的材质。

在定义替换之前,需要在内容浏览器中创建这些资源,方法是右键单击,然后选择“”→“数据资产”,然后选择“MeshReplacement”或“MaterialReplacement”。

现在,可以使用数据添加和设置替换件。设置必要数据有两种方法:在数据资产编辑器中手动输入,或在导入Datasmith场景后将其添加到场景视图快捷菜单中。

手动添加替换项

要手动添加替换数据,请单击“替换”旁边的加号,这将向数据资产添加一个新条目。

add-replacement-1

MaterialReplacement 数据资产可以通过匹配材质的名称(材质名称 Matcher)或按材质使用的名称(纹理名称 Matcher)查找特定纹理来替换材质。

add-replacement-2

MeshReplacement 数据资产通过匹配其名称来替换 StaticMeshe。我们可以添加几个替换选项。如果添加了多个选项,则根据其定义的比例替换它们(如果以比例 1 和 2 添加两个替换,则以 1/3 的概率选择第一个选项,以 2/3 的概率选择第二个选项)。

“匹配类型”提供了几个选项:

  • 开头为:检查搜索选项是否以给定文本开头
  • 等于:检查搜索选项是否与给定文本完全匹配
  • 包含:检查搜索选项是否包含给定文本
  • 正则表达式:将搜索选项与给定正则表达式模式匹配的高级用例

请注意,所有匹配选项都区分大小写。

高级用例:可以通过创建从基本 StaticMeshMatcher 或 MaterialMatcher 类扩展而来的蓝图来添加自定义 Material 或 StaticMesh 匹配器。

在视口中添加替换

我们还可以通过右键单击视口中的Actor,然后在上下文菜单中选择“替换材质”或“替换网格”来添加替换(这只能在关卡编辑器视口中实现,而不能在Dataprep预览视口中实现)。

选择“替换材质”(Replace Material) 将打开一个对话框,允许您替换视口中的选定材质,同样,通过选择“替换网格”(Replace Mesh),将打开一个对话框以替换当前选定的网格。现在我们需要选择一个要添加替换的目标数据资产,也可以直接执行替换。

Screen-Shot-2022-10-18-at-4.13.18-PM-scaled

执行替换

模板项目提供了两种执行替换的方法:使用Visual Dataprep编辑器或在Datasmith导入后在关卡视口中执行替换。这两种工作流都有优点,将在以下各节中介绍。

可视化 Dataprep 工作流

Visual Dataprep允许我们在Datasmith导入过程中自动执行操作。模板项目添加了两种新的操作类型,用于替换资源和材质。“替换网格”(Replace Meshes) 和“替换材料”(Replace Materials) 操作都采用各自的数据资产(如上所述)。

如果将其他 Dataprep 操作合并到一个工作流中,则 Visual Dataprep 工作流特别有用。

data_prep2-scaled
可视化 Dataprep 编辑器

首先,我们需要通过在内容浏览器中右键单击并选择 Dataprep → Dataprep 资产,然后打开此资产来创建新的 Dataprep 资产。

然后,我们可以将从 ArcGIS CityEngine 导出的 Datasmith 作为输入添加到 Dataprep 编辑器中。按右上角的加号,选择您的Datasmith文件,然后按导入

之后,我们可以添加要应用于导入场景的动作。通常,我们会为项目中定义的每个替换数据表添加一个操作。

然后,我们可以执行 Dataprep 管道。此步骤可以根据需要重复多次,以实现所需的更换。

最后,我们提交管道,这会将场景添加到我们的关卡中。

注意:Dataprep编辑器无法正确处理分层实例,因此,如果要导入包含多个实例的大型场景,建议使用下一节中介绍的常规Datasmith导入工作流程。

Datasmith导入替换工作流程

Datasmith导入工作流程的工作方式与此类似。首先,我们通过单击Datasmith文件导入将Datasmith场景导入到当前关卡中。 与前面介绍的Visual Dataprep工作流程不同,在关卡视口中执行替换的普通Datasmith导入和执行替换也能够正确处理分层实例,这使得它成为大型场景的首选。

导入Datasmith场景后,右键单击Outliner中的DatasmithSceneActor,这将打开带有CityEngine部分新条目的上下文菜单。

Screen-Shot-2022-10-18-at-4.13.03-PM
左侧是Datasmith Scene Actor的上下文菜单,在CITYENGINE部分中带有新的整体,右侧是按“执行替换”后打开的对话框。

执行替换:这将打开对话框以执行网格和材料替换。替换数据资产可以添加到各自的列表中,我们还可以在执行替换之前恢复Datasmith场景。

重新加载Datasmith场景:这将重新加载源Datasmith场景,从而撤消在场景中执行的所有替换。

合并实例:这会将所有实例化的 StaticMesh Actor 合并到分层实例化的 StaticMesh Actor 中,如果场景是使用实例化选项 Use Instanced Mesh 导出的,这将非常有用。

我们现在可以按“执行替换”,这将打开一个对话框,我们可以在其中通过将它们添加到各自的列表中来配置要执行的替换。Restore Datasmith Scene Before Execution也应设置为true,以在原始场景上应用替换

以下视频演示了波士顿示例虚幻项目中的整个工作流程。

现在一切都已配置完毕,您可以根据需要多次迭代,直到您的场景完美为止!

探索更多

我们希望本教程有助于改进您的 ArcGIS CityEngine 和 Unreal Engine 工作流!如果您有兴趣了解这两种产品如何集成的更多资源,请查看 ArcGIS CityEngine 的 Unreal 插件 Vitruvio 的简短介绍:

要了解有关 ArcGIS CityEngine 的详细信息,请访问我们的网站或查看有助于支持您的工作流的所有 ArcGIS CityEngine 产品集成列表。

如果您不熟悉 ArcGIS CityEngine,请尝试 21 天免费试用并浏览其他学习资源以开始使用!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。