程序化内容生成框架(PCG)是用于在虚幻引擎中创建你自己的程序化内容和工具的工具集。该框架包含多种PCG生成模式,便于使用PCG创建更大的世界。生成模式会将PCG组件的生成域分拆到一个网格中,其中每个单元格包含自己的本地PCG组件。
在斜坡上生成树木、草和其他地被植物的PCG森林示例。
在大型网格上,你可以生成显眼的大型网格体,例如树木和巨石。在小型网格上,可以创建更小的细节,例如草、花和石头。此方法可以更精细地控制PCG工具的执行,并用于微调覆盖大型区域的工具的性能。
PCG生成模式共有四个:
使用分区生成
默认情况下,PCG组件生成的所有网格体都被包含在组件的域中,例如体积或被绑定到样条线。此模式适用于较小的PCG资产,但对于覆盖很大区域的资产,可能会造成性能问题。分区生成会在用户定义的网格中生成网格体。数据在每个单元格之间分拆,更容易使用其他系统流送,例如世界分区和关卡实例化。
分区PCG组件的示例。
在图表中启用分区
要在PCG组件上开启分区生成,请执行以下操作:
在PCG体积细节面板中开启PCG分区生成。
- 在你的关卡中选择PCG资产。
- 点击 细节(Details) 面板中 分区(Is Partitioned) 旁边的复选框。
配置分区网格大小
分区网格的大小由 PCGWorldActor 上的 分区网格大小(Partition Grid Size) 选项定义:
在PCGWorldActor上配置分区网格大小选项。
要配置网格大小,请执行以下操作:
- 在 大纲视图(Outliner) 中选择 PCGWorldActor 。
- 调整 分区网格大小(Partition Grid Size) 选项的值。
- 在你的关卡中选择每个PCG资产,并点击 细节(Details) 面板中的 清理(Cleanup) 。
- 点击 生成(Generate) 按钮以重新生成结果。
使用分层生成
分层生成支持按多个比例使用PCG生成网格体。此类型的生成会使用 Grid Size 节点重载分区生成中使用的分区网格大小,以便你微调网格体生成。
显示在较小的网格大小上生成的高亮岩石的示例。
Grid Size节点为在其下游生成的所有数据自定义生成网格的大小,应该放置在所有取样器节点之前。
在图表中启用分层生成
要在PCG图表中启用分层生成,请执行以下操作:
在PCG图表设置中开启PCG分层生成。
- 打开你的PCG图表并点击"图表设置(Graph Settings)"。
- 点击"使用分层生成(Use Hierarchical Generation)"旁边的复选框。
- 打开"分层生成默认网格大小(HiGen Default Grid Size)"的下拉框并选择值。
- 保存你的PCG图表。
分层生成需要你的PCG组件已分区。请确保在你的关卡中启用分区生成,然后再使用此功能。
配置网格大小设置
使用Grid Size节点在PCG图表中自定义你的网格体的生成:
使用Grid Size节点设置分层生成网格大小。
- 搜索 Grid Size 节点,并将其添加到PCG图表中每个需要重载默认分层生成网格大小的分支中的取样器节点之前。
- 点击 Grid Size 节点并调整 分层生成网格大小(HiGen Grid Size) 设置。
- 保存图表。
- 在你的关卡中重新生成你的结果。
在图表中根据你的网格体大小来确定相应的网格大小。大型网格体的数量常常少于小型网格体,所以大型网格体应该放置在较大的网格上,便于流送。小型网格体数量更多,应该放置在较小的网格中。
分层生成使用以下执行指南:
- 你的PCG图表中不在Grid Size节点之后的节点将使用 分层生成默认网格大小(HiGen Default Grid Size) 设置中定义的值生成数据。
- 在执行较小网格期间,较大网格大小上生成的数据可作为缓存数据使用。它在图表中从较大网格大小下降到较小网格大小,但不会从较小网格上升到较大网格。
- 如果节点拥有来自多个网格大小的数据输入,输出将使用最小的网格大小生成。
使用未绑定网格大小
在下面的示例中,一个Mesh Sampler节点在PCG体积中对一个巨石网格体取样:
显示未绑定网格大小用法的示例
取样器按 分层生成默认网格大小(HiGen Default Grid Size) 对体积内容取样,并运行性能密集型运算四次,体积中的每个网格单元格一次。使用此图表设置,性能会随着体积增大而变差。
对于这种情况,推荐使用 未绑定(Unbounded) 网格大小。未绑定(Unbounded)会删除PCG组件的网格限制,并将使用此网格大小执行节点一次。然后,可以使用Grid Size节点再应用网格限制。
PCG子图表禁用了其网格大小,并使用其输入数据或父图表的网格大小。
将数据从较大网格传递到较小网格时,可能会生成重复的点数据。当为较大网格生成的数据在较小网格的每个单元格中复制时会发生此情况,这会显著影响性能。你可以使用 Cull Points Outside Actor Bounds 节点从点数据中删除位于较小网格单元格之外的点,从而删除重复数据。
在PCG图表中可视化网格大小
使用调试对象树可视化PCG图表中的每个节点使用的网格大小。
要在PCG图表中可视化网格大小,请执行以下操作:
- 打开调试下拉菜单
- 选择本地PCG组件。每个组件名称都包含网格大小。例如,
PCGPartitionActor_12800_1_5_0/PCGComponent_1/NewPCGGraph就属于一个12800厘米的网格。
显示分层生成网格大小的可视化的示例。
在以上示例中,选择了生成岩石网格体的组件(1)。生成树木网格体(2)的节点以高亮显示,但是灰色的,表明这些节点在较大的网格大小上生成树木,并将在岩石节点之前执行。在最下方行中的节点将生成青草网格体(3)且是灰色的,说明他们会在较小的网格大小上生成网格体,并将在岩石节点之后执行。