海量编程文章、技术教程与实战案例

网站首页 > 技术文章 正文

虚幻引擎5 PCG快速森林创建教程

yimeika 2025-05-22 15:20:10 技术文章 3 ℃

本教程将引导您使用虚幻引擎5中的程序化内容生成(PCG)框架,在几分钟内快速创建一个森林。基本原理是通过PCG图表定义规则,让引擎自动在指定的表面(如地形)上采样点,并根据这些点的位置、旋转、缩放等属性来程序化地放置静态网格体(如树木、草丛等)。

第一步:启用PCG插件

  1. 打开您的虚幻引擎5项目。
  2. 在顶部菜单栏,选择 Edit -> Plugins
  3. Plugins 窗口中,搜索框内输入 procedural
  4. 找到 Procedural Content Generation Framework (PCG) 插件,勾选其左侧的复选框以启用。
  5. 点击右下角的 Restart Now 按钮重启编辑器使插件生效。

第二步:创建新关卡

  1. 编辑器重启后,在顶部菜单栏,选择 File -> New Level...
  2. 在弹出的 New Level 窗口中,选择 Open World 模板。
  3. 点击 Create 按钮。这将创建一个带有默认地形的新关卡。

第三步:创建PCG图表

  1. 在底部的 Content Browser 中,找到您希望存放PCG资源的位置(例如,Content 文件夹下)。
  2. 在空白处右键单击,从弹出菜单中选择 PCG -> PCG Graph
  3. 将新创建的 PCG Graph 文件命名为 PCG_Forest
  4. 双击 PCG_Forest 文件以打开PCG图表编辑器。

第四步:配置PCG图表 - 生成树木

  1. Input节点
  • PCG_Forest 图表编辑器中,您会看到一个默认的 Input 节点和一个 Output 节点。
  • 点击 Input 节点右侧的小箭头展开其引脚。我们将主要使用 Landscape Height 输出。
  • Surface Sampler节点(用于树木)
  • Input 节点的 Landscape Height 引脚拖出一条线,在弹出的搜索框中输入 Surface Sampler 并选择它。
  • Landscape Height 连接到 Surface Sampler 节点的 Surface 输入引脚。
  • Density Filter节点(可选,用于控制树木密度)
  • Surface Sampler 节点的 Out 引脚拖出一条线,搜索并添加 Density Filter 节点。
  • 选中 Density Filter 节点。
  • 在右侧的 Details 面板中,找到 Lower Bound 属性,将其值设置为 0.813334。(这会减少一些采样点,使树木不那么密集)。
  • Transform Points节点(用于树木)
  • Density Filter 节点的 Out 引脚(如果使用了该节点,否则从 Surface SamplerOut 引脚)拖出一条线,搜索并添加 Transform Points 节点。
  • 选中 Transform Points 节点。
  • Details 面板中,进行以下设置:
  • Rotation Min (Z轴): -360.0
  • Rotation Max (Z轴): 360.0
  • Offset Min (X, Y, Z): -10.0, -10.0, -10.0
  • Offset Max (X, Y, Z): 10.0, 10.0, -10.0
  • Scale Min (X, Y, Z): 1.0, 1.0, 1.0
  • Scale Max (X, Y, Z): 1.2, 1.2, 1.2
  • Static Mesh Spawner节点(用于树木)
  • Transform Points 节点的 Out 引脚拖出一条线,搜索并添加 Static Mesh Spawner 节点。
  • 选中 Static Mesh Spawner 节点。
  • Details 面板中,找到 Mesh Entries 部分,点击 + (Add element) 按钮添加网格体条目。
  • 展开 Index [0],在 Descriptor 下的 Static Mesh 处,选择一个树木网格体,例如来自 Megascans 的 European Beech。
  • 重复点击 + 按钮并选择不同的树木网格体来增加多样性。
  • 最后,将 Static Mesh Spawner 节点的 Out 引脚连接到主 Output 节点的 In 引脚。

第五步:在关卡中放置并测试PCG

  1. 返回主编辑器窗口。
  2. Content Browser 中将 PCG_Forest 图表拖拽到关卡视口中。这会在关卡中创建一个 PCG Volume Actor。
  3. 选中场景中的 PCG_Forest Actor。
  4. 在右侧的 Details 面板中,找到 PCG 组件下的 PCG Component 部分。
  5. 确保 Generate on Load 是勾选的。
  6. 调整 Scale 属性以覆盖您希望生成森林的区域,例如设置为 (X=70.0, Y=70.0, Z=70.0)
  7. 您应该能看到树木已经根据PCG规则生成了。
  • 如果想预览采样点,可以在PCG图表中右键点击 Surface SamplerTransform Points 节点,选择 Debug。再次点击可取消 Debug

第六步:添加地表覆盖物(草、植物等)

  1. 返回 PCG_Forest 图表编辑器。
  2. 我们可以复用之前的节点结构来添加更多细节。选中之前创建的从 Surface SamplerStatic Mesh Spawner 的所有节点(树木链),按 Ctrl+C 复制,然后在图表空白处按 Ctrl+V 粘贴。
  3. 将新的 Surface Sampler 节点的 Surface 输入引脚也连接到主 Input 节点的 Landscape Height 输出。
  4. 修改新的 Surface Sampler 节点 (用于地表覆盖)
  • 选中新的 Surface Sampler 节点。
  • Details 面板中,修改 Seed 值,例如改为 1176230130,以确保与树木的采样点不同。
  • 为了让地表覆盖物更密集,可以调整 Point Extents (例如 X: 100.0, Y: 100.0, Z: 100.0) 和 Looseness (例如 0.5)。
  • 删除新的 Density Filter 节点 (可选)
  • 如果希望地表覆盖物非常密集,可以删除这条链上的 Density Filter 节点,并将新的 Surface Sampler 直接连接到新的 Transform Points 节点。
  • 修改新的 Transform Points 节点 (用于地表覆盖)
  • 根据需要调整其 OffsetRotationScale 范围。通常地表植物不需要太大的随机缩放和位移。
  • 修改新的 Static Mesh Spawner 节点 (用于地表覆盖)
  • 选中新的 Static Mesh Spawner 节点。
  • Details 面板中,移除之前复制过来的树木网格体条目。
  • 点击 + (Add element) 添加新的 Mesh Entries,选择一些草、蕨类植物、小树枝等网格体,例如:
  • 将这个新的 Static Mesh Spawner 节点的 Out 引脚也连接到主 Output 节点的 In 引脚(PCG会自动合并多个输入)。

第七步:调整场景和光照

  1. 地表材质
  • Outliner 中选中 Landscape Actor。
  • Details 面板中,找到 Landscape Material 属性。
  • 指定一个合适的地表材质,例如教程中使用的 MI_BF_Landscape_MASTER (如果您有这个资源)。
  • 光照调整
  • Outliner 中选中 DirectionalLight
  • Details 面板中,将 Intensity 调整为一个合适的值,例如 20.0 lux
  • 后期处理 (Post Process Volume)
  • 从左上角的 Quick Add (快速添加) 按钮,选择 Volumes -> PostProcessVolume
  • 选中新添加的 PostProcessVolume
  • Details 面板中,搜索 Infinite Extent (Unbound) 并勾选它。
  • 展开 Exposure 部分:
  • Metering Mode 设置为 Manual
  • 勾选 Exposure Compensation 并将其值设置为 1.0
  • 勾选 Min EV100 并设置为 1.0
  • 勾选 Max EV100 并设置为 1.0


第八步:保存和测试

  1. 保存您的关卡 (例如,File -> Save Current Level As...,命名为 Forest)。
  2. 点击编辑器顶部的 Play 按钮,在场景中漫游,观察您创建的森林。

现在您已经使用PCG成功创建了一个基础的森林场景!您可以继续调整PCG图表中的各种参数,添加更多类型的植被,以达到更丰富的效果。

Tags:

最近发表
标签列表