ArcGIS CityEngine 提供了强大的工具来程序化地创建详细的建筑物或大城市。为了进一步处理或可视化,用户通常需要将这些模型导出到第三方应用程序。
Unreal Engine 已成为建筑可视化或创建交互式体验的流行工具,但用户在将场景从 ArcGIS CityEngine 导出到 Unreal 时通常面临的问题是缺乏高质量的材质和网格。幸运的是,虚幻引擎为虚幻引擎提供了几个资源库,例如Quixel或Twinmotion 资源,这些资源库可以在虚幻生态系统中免费使用。
在这篇博文中,我们将指导您完成一个简单的工作流程,以便在导入 ArcGIS CityEngine Datasmith 场景后替换虚幻引擎中的资产。替换工作流由虚幻引擎的数据资产(可以被认为是简单的表格数据)控制。一旦正确设置,这些数据资产就可以在项目之间共享。
为了帮助演示工作流程,我们创建了一个模板项目,其中包含其他工具来协助替换,本博客文章将对此进行详细说明,以便您继续跟进。
我们还提供了一个现成的 ArcGIS CityEngine 和 Unreal Engine 示例项目,它大量使用了这些替换项。要打开 Unreal 项目,请确保已安装Twinmotion Content for Unreal Engine Plugin。
下载链接
-
- 可用作新项目模板的替换项目
-
- 可以集成到现有项目中的替换插件
-
- 需要安装用于虚幻引擎插件的 Twinmotion 内容
- 注意:大下载 3.2 GB
- 最低系统要求:NVIDIA GeForce RTX 2060 显卡
-
- 需要将最新的完整街道规则示例项目下载到您的工作区
更换工作流程
在本节中,我们将解释如何在虚幻引擎中定义替换,以及如何使用提供的模板项目在您的场景中执行替换。
首先,使用 Datasmith 导出器从 ArcGIS CityEngine 导出场景。在 Unreal 中,我们可以使用 Dataprep 导入工作流,也可以在导入 Datasmith 场景后在关卡视口中应用替换。
通常,此工作流程是迭代的,这意味着我们可以多次执行替换,直到获得所需的结果。
从 ArcGIS CityEngine 导出
要从 ArcGIS CityEngine 导出我们的场景,我们使用 Datasmith 导出器。根据用例,有几个选项需要考虑。
- 全局偏移:全局偏移应居中,以避免由于坐标可能较大而导致的精度误差。
- Mesh Merging: 对于小场景,这应该设置为 Per Initial Shape,对于大场景,应该设置为 Globally或 Globally by Material。通常 每个初始形状 允许在虚幻引擎中进行更好的处理,因为每个建筑物都可以单独修改。
- 实例化:当使用许多实例时(例如,对于树叶、草或树),建议将此选项设置为Use Instanced Static Mesh Actors。这将在 Unreal 中使用优化的 Hierarchical Static Mesh 组件,从而提高替换工作流程期间的性能,以及运行时的渲染性能。注意:如果您使用的是Visual Dataprep Workflow,分层实例不会在预览编辑器中正确呈现。
有关其他选项,请参阅ArcGIS CityEngine Datasmith 导出器文档。
提示:为了更容易在 Unreal 中配置替换,建议使用material.name属性适当地命名 CGA 材质(例如,通过调用set (material.name, “Brick”))。我们可以稍后在 Unreal 中引用这些名称来替换材质。
虚幻引擎
在 Unreal 中,我们可以定义替换并在 Datasmith 场景中执行它们。首先,我们需要确保我们的项目包含必要的工具。如果我们想从一个新项目开始,我们可以使用Unreal 的 CityEngine 替换模板项目。或者,对于高级用例,我们可以将用于虚幻的 CityEngine 替换插件添加到现有项目中,方法是将其复制到项目的插件文件夹中(另请参阅虚幻引擎中的插件)。
定义替换
替换工作流程由虚幻数据资产控制。我们的模板项目提供了两种特殊类型的数据资产。MeshReplacement类型定义了如何替换 StaticMesh 实例,MaterialReplacement类型定义了如何替换网格上的材质。
在定义替换之前,需要在内容浏览器中创建这些资源,方法是右键单击,然后选择Miscellaneous → Data Asset,然后选择MeshReplacement或MaterialReplacement。
现在可以添加替换项并使用数据进行设置。有两种设置必要数据的方法:在数据资产编辑器中手动输入,或者在导入 Datasmith 场景后将它们添加到场景视图上下文菜单中。
手动添加替换
要手动添加替换数据,请单击替换旁边的加号,这将向数据资产添加一个新条目。
MaterialReplacement数据资源可以通过匹配材质名称(材质名称匹配器)或按材质使用的名称(纹理名称匹配器)查找特定纹理来替换材质。
MeshReplacement数据资源通过匹配它们的名称来替换静态网格物体。我们可以添加几个替换选项。如果添加多个选项,则根据其定义的比例替换它们(如果添加两个替换,比例为 1 和 2,则第一个以 1/3 的概率被选中,第二个以 2/3 的概率被选中)。
匹配类型提供了几个选项:
- Starts With:检查搜索选项是否以给定文本开头
- Equals:检查搜索选项是否与给定文本完全匹配
- 包含:检查搜索选项是否包含给定的文本
- 正则表达式:高级用例,将搜索选项与给定的正则表达式模式匹配
请注意,所有匹配选项都区分大小写。
高级用例:可以通过创建从基础StaticMeshMatcher或MaterialMatcher类扩展的蓝图来添加自定义材质或静态网格匹配器。
在视口中添加替换
我们还可以通过右键单击视口中的 Actor 并在上下文菜单中选择替换材质 或替换网格 来添加替换(这仅在关卡编辑器视口中可行,而在 Dataprep 预览视口中不可行)。
选择Replace Material将打开一个对话框,允许您在视口中替换选定的材质,同样通过选择Replace Mesh,将打开一个对话框以替换当前选定的网格。现在我们需要选择一个要添加替换的目标数据资产,我们也可以直接执行替换。
执行替换
模板项目提供了两种执行替换的方法:使用Visual Dataprep 编辑器或在 Datasmith 导入后在关卡视口中执行替换。这两种工作流程都有优势,将在以下部分中进行说明。
可视化数据准备工作流
Visual Dataprep 允许我们在 Datasmith 导入期间自动执行操作。模板项目添加了两种新的动作类型,用于替换资产和材质。Replace Meshes和Replace Materials Actions 都采用各自的数据资产(如上所述)。
如果将其他 Dataprep 操作合并到一个工作流中,则 Visual Dataprep 工作流特别有用。
首先,我们需要通过右键单击内容浏览器并选择Dataprep → Dataprep Asset 来创建一个新的 Dataprep 资产,然后打开该资产。
然后我们可以将来自 ArcGIS CityEngine 的 Datasmith 导出作为输入添加到 Dataprep 编辑器。按右上角的加号,选择您的 Datasmith 文件,然后按Import。
之后,我们可以添加我们想要应用到我们导入的场景的动作。通常,我们为我们在项目中定义的每个替换数据表添加一个操作。
然后我们可以执行Dataprep 管道。此步骤可以根据需要重复多次,以实现所需的替换。
最后,我们提交管道,它将场景添加到我们的关卡中。
注意: Dataprep 编辑器不能正确处理分层实例,因此如果您要导入具有许多实例的大型场景,建议使用下一节中介绍的正常 Datasmith 导入工作流。
Datasmith 导入替换工作流程
Datasmith 导入工作流以类似的方式工作。首先,我们通过单击Datasmith → File Import将我们的 Datasmith 场景导入当前关卡。 与之前解释的 Visual Dataprep 工作流程不同,在关卡视口中正常的 Datasmith 导入和执行替换也能够正确处理 Hierarachical 实例,这使其成为大型场景的首选。
导入 Datasmith 场景后,右键单击 Outliner 中的DatasmithSceneActor,这将打开包含 CityEngine 部分中的新条目的上下文菜单。
执行替换:这将打开对话框以执行网格和材料替换。替换的数据资产可以添加到各自的列表中,我们还可以在执行替换之前恢复 Datasmith 场景。
重新加载 Datasmith 场景:这将重新加载源 Datasmith 场景,因此撤消在场景中执行的所有替换。
Merge Instances:这会将所有实例化的静态网格体 Actor 合并到分层实例化的静态网格体 Actor 中,如果使用实例化选项使用实例化网格体导出场景,这将非常有用。
我们现在可以按执行替换 ,这将打开一个对话框,我们可以在其中配置我们想要执行的替换,方法是将它们添加到各自的列表中。Restore Datasmith Scene Before Execution也应设置为 true 以在原始场景上应用替换
现在一切都已配置好,您可以根据需要进行多次迭代,直到您的场景完美!