This repository has been archived on 2026-03-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
knowledge-base/content/bilibili_cv43780186.content.json
T

8 lines
4.1 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"platform": "bilibili",
"type": "article",
"id": "cv43780186",
"title": "[UEPCG][新手向]复刻ChrisMurphy的城市道路建筑生成",
"content": "前言\n恐怕所有使用过PCG的朋友们都不会满足于简单自然环境的生成,多多少少都会尝试过使用PCG生成城市区域。经过一番尝试后苦于没有简单常用节点之外的资料、无从下手,再到最终放弃。感觉像是白忙了一场,甚至没能了解到纯UEPCG究竟能做到什么地步。\n时至今日,我们终于盼到了UnrealFest2025上ChrisMurphy主旨演讲[Procedural Roads and Buildings in PCG]中的一个简单的程序化道路和建筑生成案例,这个演讲终于让我们能够一窥纯PCG生成建筑和道路的门径。\nChrisMurphy主旨演讲案例效果本文是对ChrisMurphy演讲内容的复刻,并对他在主旨演讲中跳过的一些基础知识进行补充,为新手入门PCG的朋友提供一些参考。本文会尽量以新手视角对复刻过程中一些新节点的使用进行讲解,但考虑到\"知识的诅咒\",本文未尽之处可以参考以下补充资料:\n本文对应项目使用UE5.7实现,托管于Github\n本文使用的免费道路资产\n本文使用的建筑资产为PCG插件演示案例中的资产,不必额外导入。\n\n主要流程概括\n根据主旨演讲中的流程,ChrisMurphy在实现过程中组要分为以下几步:\n\n获取特定Actor上的SplineComponent作为参考线\n基于Spline拆分分段、创建新的Spline并基于新Spline创建SplineMesh\n寻找新Spline分段的交点和端点并确定类型\n分别放置端点、十字路口、丁字路口\n处理SplineMesh和端点、路口之间的衔接\n在道路轮廓周边生成建筑位置种子\n使用FloodFill算法拆分建筑\n基于轮廓生成建筑\n本文首先对演讲中没有提及的前期准备进行铺垫,再讲解使用到的关键节点,随后以上面的流程主线,将每一步作为主标题。\n\n前期准备\n在实际进行复刻前需要进行下面几步前期准备:\n\n模型:在生成过程中需要调整路口、端点朝向,因此需要对齐模型枢轴点。\n蓝图类:采样SplineComponent时使用的是特定Actor,需要提前创建蓝图类用于指定类。\nPCGDataAsset:为了便于在摆放时确定衔接点位置,需要提前准备端点和路口模型的点集数据。\n\n模型准备\n依托UE中强大的几何体编辑功能,我们可以直接在UE中编辑本次使用的几何体。对于项目中使用到的几个主要道路模型我们做出如下规定:\n直路:一端中点与枢轴点重合,沿X正方向延申。\n丁字路口:枢轴点位于共线边中点,垂直边沿X正方向延申。\n十字路口:枢轴点位于两条线交点。\n端点:一端中点与枢轴点重合,沿X负方向延申。\n\n蓝图类准备\n蓝图类方面,我们需要用于构建道路的蓝图类。创建蓝图类继承自AActor,挂载USplineComponent即可。然后在场景中实例化摆放多个蓝图实例,形成路网。\n\nPCGDataAsset\nPCGDataAsset的作用是为PCG提供已经排布好的点信息,常用LevelInstance转化而来。在本项目中,需要将丁字路口、十字路口、端点转化成DataAsset用于提取点。\n\nPCG关键节点介绍\n在案例制作过程中,有几个节点很大程度上解决了不少难以实现的问题:\n\nNamedRerouteDeclarationNode:类似于创建一个局部变量,将节点输出临时保存起来,方便在其他位置调用。\nVisualizeAttribute:Debug使用,显示指定的点序号和Attribute信息。\nCollapsePoint:将传入的点迭代式地和最近的点合并,重复多次,直到点间距离都不小于阈值。\nAttract:常用于统一数据属性,默认情况下不会删除点。\nCluster:对传入的点进行聚类分组,相近的点会具有相同的ClusterID。\n\n总结\n本文通过对ChrisMurphy演讲内容的复刻,为新手入门PCG城市道路建筑生成提供了详细的教程。文章涵盖了从前期准备到关键节点的使用,是一份非常实用的UEPCG入门指南。"
}