虚幻引擎程序化资源生成框架PCG 之 常用撒点方法小结

PCG真好玩,门槛很低,天花板很高

前言

程序化内容生成(PCG)的关键之一就是"撒点",因为只有把点撒到位,才能在期望的位置生成模型,本文简单总结一下PCG常用的撒点方法,如有遗漏欢迎大家补充,非常感谢!

1. 基本撒点

1.1 Landscape上撒点

可以通过Input节点中的Landscape引脚+Surface Sampler撒点,也可以通过Get Landscape Data+Surface Sampler撒点,后者更方便通过设置Actor FilterActor Selection来筛选指定的Landscape。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.2 使用射线检测在地表面撒点

上面的方法只能识别Landscape,如果我们在Landscape上放了一些Static Mesh,或者干脆没有Landscape,就用不了了。这时我们可以采用射线检测的方式在地面上撒点。

使用World Ray Hit Query节点,沿指定方向做射线检测,从而识别表面,由于World Ray Hit Query的运算量比较大,所以这个计算并不是实时的,如果移动了StaticMesh需要重新Clean Up再Generate。

在这里插入图片描述

在这里插入图片描述

World Ray Hit Query节点上可以设置射线检测的方向和通道。

在这里插入图片描述

1.3 使用曲线撒点

1.3.1 沿曲线撒点

在这里插入图片描述

在这里插入图片描述

1.3.2 在闭合曲线内部撒点

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.4 在StaticMesh表面撒点

StaticMesh表面撒点有两种方式:

  • Mesh To Points
  • Mesh Sampler

这两个节点功能上区别不大,前者是蓝图版本(已经标记为弃用),后者是C++版本,推荐使用后者。

在这里插入图片描述

Mesh Sampler的设置,这里的Static Mesh要和场景中的实际模型一致

在这里插入图片描述
Get Actor Data的设置,Mode要设置为Get Single Point这样获取到的是Mesh的原点

在这里插入图片描述

在这里插入图片描述

2. 进阶撒点

2.1 在闭合曲线内部放射状撒点

所谓放射状撒点就是点的Density在闭合曲线的中心最高,边缘最低(或者反之)

方法1

方法1很简单,就是使用Spline SamplerInterior Density Falloff Curve

在这里插入图片描述
在这里插入图片描述

需要注意的是,这种方式Density的分布基准是闭合曲线的中心,对于曲线范围比较狭长或者形状不规则的情况,最终效果往往不是很理想。有时候我们想以边缘作为Density的分布基准,于是就有了方法2.

在这里插入图片描述
方法2

再添加一个Spline Sampler设定为On Spline模式,用于获取曲线的边缘,然后使用Distance节点计算内部点和边缘的距离,注意这时要勾选Set Density,这样才能将计算结果赋值给Density

在这里插入图片描述

可以看到方法2的边缘宽度比较均匀

在这里插入图片描述

2.2 在Mesh表面沿指定方向撒点

添加一个Normal To Density节点,计算每个点的法线和给定方向(法线)的夹角,夹角越小Density越大
在这里插入图片描述

在这里插入图片描述
我们还可以修改基准法线的方向

在这里插入图片描述
比如改成(1,0,0)

在这里插入图片描述
这样我们就识别出了点在模型上的方位。

猜你喜欢

转载自blog.csdn.net/hello_tute/article/details/131560984