添加: UEPCG 复刻ChrisMurphy城市道路建筑生成
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"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入门指南。"
|
||||
}
|
||||
Reference in New Issue
Block a user