借助程序化节点图表,程序化内容生成(PCG)框架可以在编辑器和运行时状态下生成程序化内容。和材质编辑器类似,空间数据被传入关卡中的PCG组件中的图表,然后生成点。这些点会经过一系列的节点的筛选和调整,这些节点如下所列:
蓝图
| 节点 | 说明 |
|---|---|
| Execute Blueprint | 执行指定的自定义蓝图类。 |
颜色
| 节点 | 说明 |
|---|---|
| Set Point Color | 将固定颜色值设置到点云中的所有点。这是 Execute Blueprint 节点的正常运作示例。 |
控制流程
| 节点 | 说明 |
|---|---|
| Branch | 基于布尔属性选择两个输出之一。 |
| Select | 基于布尔属性选择两个输入之一,以转发到单个输出。 |
调试
| 节点 | 说明 |
|---|---|
| Debug | 调试图表中的上一个节点,但不是临时的。 |
| Sanity Check Point Data | 验证输入数据点的值是否在给定范围内;超出该范围,此节点将记录错误并取消生成。 |
密度
| 节点 | 说明 |
|---|---|
| Curve Remap Density | 根据提供的曲线,将点数据中的每个点的密度重新映射到其他密度值。 最终密度 = 曲线重新映射(输入密度) |
| Density Remap | 将线性变换应用于点密度。这可以选择设置为不影响输入范围之外的值。 D' = (Out_Max - Out_Min) * (D - In_min) / (In_max - In_min) + Out_Min |
| Distance to Density | 根据每个点与参考点的距离设置点密度。 |
| Distance to Neighbors | 计算一个点与其给定范围内相邻点的平均值之间的距离。可以用于派生相对于相邻点的位置。 |
筛选器
| 节点 | 说明 |
|---|---|
| Density Filter | 基于密度和提供的筛选范围筛选点。 |
| Discard Points on Irregular Surface | 围绕给定源点测试多个点,确定它们是否在相同平面上。这是使用PCG子图表的示例,在电子梦演示中使用。 |
| Filter - Any | 仅让符合指定目标类型的输入数据通过。通用筛选器节点。 |
| Filter By Tag | 根据 标签(Tags) 保留或删除数据中的元素。你可以指定要筛选的标签的逗号分隔列表。 |
| Intersect with Tagged Actor Geo | 使用几何体脚本函数测试点是否在标记的Actor的静态网格体中。 需要 程序化生成框架(PCG)几何体脚本交互操作(Procedural Generation Framework (PCG) Geometry Script Interop) 插件。 |
| Point Filter | 将按点筛选器应用于输入点数据。筛选器可以是常量空间数据(你可以像对相同点取样或从ToPoint版本取样那样筛选这些数据),也可以是属性集。 |
| Point Filter Range | 将基于范围的筛选器应用于点数据。 |
| Self Pruning | 删除相同点数据中的点之间的相交,基于设置对数据划分优先级(从大到小,等等)。半径相似的点可以使用随机化修剪进行随机选择,防止出现规律。 |
层级化生成
| 节点 | 说明 |
|---|---|
| Grid Size | 指定要执行下游节点的网格大小。 用于层级化生成。 |
输入输出
| 节点 | 说明 |
|---|---|
| Load Data Table | 将UDataTable加载到PCG点数据中。 |
| 加载Alembic文件(Load Alembic File) | 加载Alembic文件到PCG点数据。 需要 程序化内容生成(PCG)外部数据交互操作(Procedural Content Generation (PCG) External Data Interop) 插件。 |
元数据
| 节点 | 说明 |
|---|---|
| Add Attribute | 将属性添加到点数据或属性集。 |
| Append Attribute Set | 将多个属性集合并为单个属性集。 |
| Attribute Noise | 为一组点数据中的每个点计算目标属性的新值。值将取决于所选输入属性 模式(Mode) 、 噪点最小值(Noise Min) 和 噪点最大值(Noise Max) 。 |
| Attribute Partition | 基于给定属性的值拆分输入点数据,给定值的所有点将在相同点数据中输出,所有这些将存在于输出数据集合中。 |
| Attribute Reduce | 计算给定属性的 平均值(Average) 、 最大值(Max) 或 最小值(Min) 。请注意,属性必须是数字且连续,才能计算平均值。 |
| Attribute Rename | 重命名现有属性。 |
| Attribute Select | 计算所选 轴(Axis) 上的 最小值(Min) 、 最大值(Max) 或 中值(Median) 。请注意,这类似于使用轴计算点积。 |
| Attribute String Op | 执行与字符串相关的属性操作,例如附加字符串。 |
| Break Transform Attribute | 将变换属性分解为其组成部分:平移(Translation) 、 旋转(Rotation) 和 缩放(Scale) 。 |
| Break Vector Attribute | 将向量属性分解为其组成部分:X 、 Y 、 Z 和 W 。 |
| Copy Attribute | 从 属性(Attribute) 引脚或从输入本身将属性复制到新的点数据。 |
| Create Attribute | 创建包含单个属性的属性集。 |
| Data Table Row to Attribute Set | 从数据表提取单行到属性集。 |
| Filter Attribute | 从属性集或空间数据筛选(保留或删除)逗号分隔的属性。 |
| Get Attribute from Point Index | 从点数据及其在单独属性集内的属性检索单个点。 |
| Make Transform Attribute | 根据三个提供的属性创建变换属性:平移(Translation) 、 旋转(Rotation) 和 缩放(Scale) 。 |
| Make Vector Attribute | 基于 输出类型(Output Type) ,根据2-4个属性创建向量属性。 |
| Point Match and Set | 使用 匹配和设置类型(Match And Set Type) 选项,基于选择标准查找每个点的匹配项,然后将值应用于属性。 一种常见用例是在带有 By Attribute 选择器的 Static Mesh Spawner 节点中选择要在下游使用的网格体。 |
| Transfer Attribute | 根据相同数据集大小、相同类型(空间到空间或点到点)的对象设置属性。 |
属性按位运算
| 节点 | 说明 |
|---|---|
| And | 计算两个属性之间按位AND运算的结果。 |
| Not | 计算两个属性之间按位NOT运算的结果。 |
| Or | 计算两个属性之间按位OR运算的结果。 |
| Xor | 计算两个属性之间按位XOR(异或)运算的结果。 |
属性布尔运算
| 节点 | 说明 |
|---|---|
| And | 计算两个属性之间布尔AND运算的结果。 |
| Not | 计算两个属性之间布尔NOT运算的结果。 |
| Or | 计算两个属性之间布尔OR运算的结果。 |
| Xor | 计算两个属性之间布尔XOR(异或)运算的结果。 |
属性比较运算
| 节点 | 说明 |
|---|---|
| Equal | 将两个属性之间的"等于"比较结果写入布尔属性。 |
| Greater | 将两个属性之间的"大于"比较结果写入布尔属性。 |
| Greater or Equal | 将两个属性之间的"大于或等于"比较结果写入布尔属性。 |
| Less | 将两个属性之间的"小于"比较结果写入布尔属性。 |
| Less or Equal | 将两个属性之间的"小于或等于"比较结果写入布尔属性。 |
| Not Equal | 将两个属性之间的"不等于"比较结果写入布尔属性。 |
属性数学运算
| 节点 | 说明 |
|---|---|
| Abs | 计算"绝对值"数学运算的值。将输入属性值转换为正值,并将结果写入属性。 |
| Add | 计算"加法"数学运算的值。取两个输入值,加起来,并将结果写入属性。 |
| Ceil | 计算"向上取整"数学运算的值。取一个输入值,向上舍入到下一个整数。 |
| Clamp | 计算"限制"数学运算的值。取输入值,将其约束到特定范围。 |
| Clamp Max | 提供"限制"数学运算的最大值。 |
| Clamp Min | 提供"限制"数学运算的最小值。 |
| Divide | 计算"除法"数学运算的值。取两个输入,将第一个输入除以第二个输入,并将结果写入属性。 |
| Floor | 计算"向下取整"数学运算的值。取一个输入值,向下舍入到最接近的整数,并将结果写入属性。 |
| Frac | 计算小数数学运算的值。取一个输入值,返回该值的小数部分。 例如,对于输入值X,结果是X减去X的向下取整值。输出值的范围从0到1,含0,不含1。 |
| Lerp | 计算"线性插值"数学运算的值。此表达式将在两个点之间画一条线,使用第三个"比率"值确定该线上某个点的值。 接着将此值写入属性。 |
| Max | 计算对属性的"最大值"数学运算的值,并将结果写入属性。此运算取两个输入值,并输出两者中较大者。 |
| Min | 计算对属性的"最小值"数学运算的值,并将结果写入属性。 此运算取两个输入值,并输出两者中较小者。 |
| Modulo | 计算"取模"数学运算的值。取两个输入值,将第一个值除以第二个值。接着返回余数,并将其作为属性写入。 |
| Multiply | 计算"乘法"数学运算的值。取两个输入值,相乘,并将结果写入属性。 |
| One Minus | 计算对属性的"一减"数学运算的值,并将结果写入属性。此表达式将取一个输入值X,输出1-X,并将结果作为属性写入。 |
| Pow | 计算"幂"数学运算的值。此表达式将取两个值:底数和指数。它计算底数值的指数次幂,并将结果作为属性输出。 |
| Round | 计算"四舍五入"数学运算的值,并将结果写入属性。此表达式将取一个输入值,并将其舍入到最接近的整数。 |
| Set | 将输出属性设置为提供的属性的值。 |
| Sign | 计算"符号"数学运算的值,并将结果写入属性。对一个输入值求值,指示它是正数、负数还是刚好为零。
|
| Sqrt | 计算对输入的"平方根"数学运算的值,并将结果写入属性。 |
| Subtract | 计算"减法"数学运算的值。此表达式将取两个输入,从第一个输入减去第二个输入。 |
| Truncate | 计算"截断"数学运算的值,并将结果写入属性。此表达式将截断一个值,即舍弃小数部分,留下整数。例如,值1.4截断为1。 |
属性旋转体运算
| 节点 | 说明 |
|---|---|
| Combine | 合并两个旋转值,将结果作为属性写入,先合并A,然后合并B。 |
| Inverse Transform Rotation | 按提供的变换的逆变换来变换旋转体。 |
| Invert | 找到提供的旋转体的逆对象,将结果作为属性写入。 |
| Lerp | 基于 比率(Ratio) ,在两个旋转体输入 A 和 B 之间线性内插。这会在比率为0时应用100%的A,在比率为1时应用100%的B。 |
| Normalize | 将角度限制为-180到180的范围,将结果作为属性写入。 |
| Transform Rotation | 按给定变换来变换旋转。此节点将取一个旋转作为输入,应用给定的变换。 |
属性变换运算
| 节点 | 说明 |
|---|---|
| Compose | 按顺序合成两个变换:A B。合成变换时,顺序很重要。A B会生成一个变换,首先应用A,然后将B应用到后续变换。结果写入属性。 |
| Invert | 将输入变换反转,将新变换作为属性写入。 |
| Lerp | 基于 比率(Ratio) ,在两个变换输入 A 和 B 之间线性内插。这会在比率为0时应用100%的A,在比率为1时应用100%的B。 |
属性三角运算
| 节点 | 说明 |
|---|---|
| Acos | 返回输入的反余弦(arccos),将结果写入属性。 |
| Asin | 返回输入的反正弦(arcsin),将结果写入属性。 |
| Atan | 返回输入的反正切(arctan),将结果写入属性。 |
| Atan 2 | 返回2个输入(B/A)的反正切(arctan2),将结果写入属性。 |
| Cos | 返回输入的余弦(cos),将结果写入属性。 |
| Deg to Rad | 基于以度数为单位的输入返回弧度值,将结果写入属性。 |
| Rad to Deg | 基于以弧度为单位的输入返回度数值,将结果写入属性。 |
| Sin | 返回输入的正弦(sin),将结果写入属性。 |
| Tan | 返回输入的正切(tan),将结果写入属性。 |
属性向量运算
| 节点 | 说明 |
|---|---|
| Cross | 输出两个输入向量的交叉积。 |
| Distance | 计算两个向量输入之间的距离。 |
| Dot | 返回两个输入向量的点积。 |
| Inverse Transform Direction | 按输入变换的逆变换来变换方向向量,但不改变其长度。结果写入属性。 |
| Inverse Transform Location | 按输入变换的逆变换来变换位置。结果写入属性。 |
| Length | 返回输入向量中存储的向量的长度。 |
| Normalize | 输出向量的规格化副本,确保基于长度这样做是安全的。如果向量长度太小,无法安全地规格化,则返回零向量。 |
| Rotate Around Axis | 计算并返回向量A围绕轴按角度(度数)旋转的结果。 |
| Transform Direction | 按提供的变换来变换输入方向向量。不会改变其长度。结果写入属性。 |
| Transform Rotation | 按输入变换来变换旋转体或四元数。结果写入属性。 |
属性旋转体运算
| 节点 | 说明 |
|---|---|
| Make Rot from Angles | 返回使用翻滚角值、俯仰角值、偏航角值创建的旋转体属性。 |
| Make Rot from Axis | 使用根据向前轴、向右轴、向上轴创建的参考帧返回旋转体。 |
| Make Rot from X | 返回仅使用X轴创建的旋转体属性。Y和Z轴未指定,但将标准正交。 |
| Make Rot from XY | 返回使用X轴和Y轴创建的旋转体属性。X轴保持固定,Y轴可以发生极小的变化,强制实施正交性。还会计算Z值。 |
| Make Rot from XZ | 返回使用X轴和Z轴创建的旋转体属性。X轴保持固定,Z轴可以发生极小的变化,强制实施正交性。还会计算Y值。 |
| Make Rot from Y | 返回仅使用Y轴创建的旋转体属性。X轴和Z轴未指定,但将标准正交。 |
| Make Rot from YX | 返回使用Y轴和X轴创建的旋转体属性。Y轴保持固定,X轴可以发生极小的变化,强制实施正交性。还会计算Z值。 |
| Make Rot from YZ | 返回使用Y轴和Z轴创建的旋转体属性。Y轴保持固定,Z轴可以发生极小的变化,强制实施正交性。还会计算X值。 |
| Make Rot from Z | 返回仅使用Z轴创建的旋转体属性。X轴和Y轴未指定,但将标准正交。 |
| Make Rot from ZX | 返回使用Z轴和X轴创建的旋转体属性。Z轴保持固定,X轴可以发生极小的变化,强制实施正交性。还会计算Y值。 |
| Make Rot from ZY | 返回使用Z轴和Y轴创建的旋转体属性。Z轴保持固定,Y轴可以发生极小的变化,强制实施正交性。还会计算X值。 |
参数
| 节点 | 说明 |
|---|---|
| Get Actor Property | 从保存PCG组件的Actor(或对象层级中更高的地方)检索属性的内容。 默认情况下,它会查看Actor级别的属性(适合蓝图变量),但也可以使用 选择组件(Select Component) 选项查看组件属性。 |
| Data Count | 返回包含传递到输入引脚的数据数量的属性集。请注意,这不会忽略空的点数据。 |
取样器
| 节点 | 说明 |
|---|---|
| Copy Points | 复制 Source per point in the Target 输入中所有点的实例。有多个选项可用于继承空间属性,但 Attribute Inheritance 对此节点的性能的影响最大。 |
| Mesh Sampler | 对指定静态网格体上的点取样。请注意,此运算开销高昂。 需要 PCG几何体脚本交互操作(PCG Geometry Script Interop) 插件和 几何体脚本(Geometry Script) 插件。 |
| Spline Sampler | 使用样条线作为源材质,对点取样。在样条线上取样是指直接在样条线曲线上,而 水平(Horizontal) 、 垂直(Vertical) 和 体积(Volume) 选项在样条线体积(由Y/Z轴中的控制点的半径驱动)上取样。 在样条线内取样需要样条线是闭合的。 |
| Surface Sampler | 在常规网格模式中,对表面数据上的点取样。此节点包含以下选项:
|
| Volume Sampler | 对常规3D网格上提供的空间数据取样。这会表现出"类似体素"的行为,对于大型数据或高密度,可能开销高昂。 |
空间
| 节点 | 说明 |
|---|---|
| Bounds Modifier | 修改提供的点数据中的点上的边界属性。 |
| Create Spline | 根据输入点数据创建样条线。包含创建以下内容的选项:
|
| Difference | 针对差值的并集输出每个源的差值的结果。 此节点有以下选项: 密度函数(Density Function) :控制在运算完成后使用哪个密度函数。包含以下选项:
模式(Mode) :控制存在具体空间数据与连续数据时的差值行为(其他类型,更接近分布函数)。请注意,在我们需要选择具体元素的一些情况下,这应该设置为"离散(Discrete)",否则生成的密度函数无法为扁平。包含以下选项:
|
| Distance | 对于第一个输入中的每个点,计算与第二个输入中的最接近点的距离,在计算从一个点数据集到相同点数据集的距离时自动忽略自身。可以选择将距离向量作为属性输出。 |
| Extents Modifier | 操控边界,修改点数据中每个点的范围。 |
| Gather | 取所有输入,生成保存所有输入数据的单个集合。主要用于整理。 包含序列执行的 仅依赖项(Dependency Only) 引脚,用于它很重要的情况(例如,World Ray Hit Query与给定图表中生成的内容)。请注意,并非提供给此引脚的所有数据都会传递到输出。 |
| Get Actor Data | Get … Data节点的通用版本。 使用Actor筛选器和模式从Actor读取数据。 它包含以下选项: Actor筛选器(Actor Filter) :确定在获取Actor数据时要考虑哪些Actor。 包含子项(Include Children) :确定是否考虑输入的子Actor。 模式(Mode) :包含以下选项:
|
| Get Landscape Data | Get Actor Data 节点的特殊化,返回合适类型和构造的地形数据。 |
| Get Number of Points | 返回点数据中的点数。 |
| Get Primitive Data | Get Actor Data 节点的特殊化,返回合适类型和筛选的图元数据。 |
| Get Spline Data | Get Actor Data 节点的特殊化,返回合适类型和筛选的样条线数据。 |
| Get Texture Data | 将纹理加载到表面数据。请注意,对于压缩程度最大的纹理类型,这需要GPU才能执行。 |
| Get Volume Data | Get Actor Data 节点的特殊化,返回合适类型和筛选的体积数据。 |
| Inner Intersection | 计算提供给节点的所有数据之间的内相交,而不管其引脚。 示例 : 输入[A, B, C] 结果 : A ∩ B ∩ C |
| Intersection | 计算 主源(Primary Source) 引脚中提供的每个数据的外相交,其中结果是主源引脚上每个数据针对其他每个 源(Source) 引脚上的数据并集的一个相交。 示例 : 主源1包含[A, B] 源1包含[C, D] 源2包含[E]。 结果 : A ∩ (C ∪ D) ∩ E, B ∩ (C ∪ D) ∩ E |
| Merge | 将多个输入点数据合并为单个点数据。属性会合并,非公共属性根据需要设为默认值。 |
| Normal To Density | 基于点法线和提供的设置( 法线(Normal) 、 偏移(Offset) 、 强度(Strength) 、 密度模式(Density Mode) )计算点数据密度,类似于点积,但更灵活。 |
| Point From Mesh | 使用提供的静态网格体和该网格体的引用,构建包含一个点的点数据。 |
| Projection | 根据源数据创建投影数据,以投影到目标上。请注意,如果没有该源数据到该目标数据的特殊投影表示,则会将数据转换为点。 |
| Spatial Noise | 构造空间一致的噪点模式(例如Perlin噪点),并写入指定属性。 |
| To Point | 如果数据已经是点数据,将其投射到点数据,否则将空间数据离散化为点数据。 |
| Transform Points | 使用基本随机规则更改点变换(就地更改,或通过 应用于属性(Apply to Attribute) 更改为属性)。 变换的每个组成部分(平移、旋转、缩放)可以设置为绝对而不是相对,以允许更多控制权。 它包含以下选项: 均匀缩放(Uniform Scale) :将点数据缩放到相同的X、Y、Z比率。 重新计算种子(Recompute Seed) :强制点种子根据其新世界位置更新。 示例(Example) :使用带有绝对旋转且旋转Z为0的Transform Points节点,将确保点在Z中向上指。这会确保点在从地形取样后向上。 |
| Union | 从分布函数角度,创建数据之间的逻辑并集。结果依赖于所选密度函数选项。 密度函数(Density Function) :控制在运算完成后使用哪个密度函数。包含以下选项:
|
| World Ray Hit Query | 创建类似表面的数据,在物理世界中执行光线投射。它可以将数据传递到预期表面数据的节点。 默认情况下,光线的大小和方向由源组件的Actor属性(很可能是体积)驱动,但光线属性可以覆盖。 它包含以下选项: 应用地形中的元数据(Apply Metadata From Landscape) :光线投射击中地形时,获取地形层值。请注意,这会带来较小的性能开销。 忽略PCG击中(Ignore PCG Hits) :忽略PCG生成的所有资产。相较于在世界中创建数据的其他节点(或其他图表),没有强制实施顺序时很有用。 可以选择返回物理材质和Actor击中。 筛选元素用于精细控制,仅忽略或保留部分击中。 |
| World Volumetric Query | 创建类似体积的数据,从物理世界收集点。它可以将数据传递到预期表面数据的节点。 "搜索重叠"检查控制是将重叠作为点范围,还是仅返回不与任何内容重叠的查询(受筛选影响)。 还可以选择返回在该体积中"找到"的Actor。 |
生成器
| 节点 | 说明 |
|---|---|
| Create Points | 根据点的静态说明,创建包含点的点数据。 |
| Create Points Grid | 创建点数据,其中包含设置所定义的点的简单网格。 |
| Create Target Actor | 根据模板创建空Actor,可用作要将PCG构件写入的目标,例如静态网格体生成器。 |
| Mesh Sockets to Points | 根据静态网格体编辑器中定义的静态网格体插槽,创建点。插槽可以按标签筛选。 |
| Point from Player Pawn | 在当前玩家Pawn位置创建点。在运行时生成期间使用。 |
| Spawn Actor | 生成Actor的内容,或提供的输入数据中每个点的Actor的内容。根据设置,Actor由模板Actor类、实例化模板Actor或属性驱动。 它包含以下选项: 模板Actor类(Template Actor Class) :项目中可用Actor的列表。 选项(Option) :
|
| Static Mesh Spawner | 在提供的点数据中每个点生成一个静态网格体。 静态网格体选项添加到网格体条目数组,并使用每个条目的 权重(Weight) 选择。具体做法是取所有权重值的总和,将其转换为每个条目的百分比。例如,如果数组中有四个条目,每个条目的值为1,则总和的值为4。每个条目的权重会除以总和,转换为百分比。这意味着每个条目有25%的机会生成。 静态网格体的选择是基于所选 网格体选择器类型(Mesh Selector Type) 选项使用变体完成的。 它包含以下选项:
|
子图表
| 节点 | 说明 |
|---|---|
| Loop | 将另一个图表作为子图表执行,循环引脚中的每个数据执行一次。非循环引脚按原样传递。 |
| Subgraph | 将另一个图表作为子图表执行。 |
变换
| 节点 | 说明 |
|---|---|
| Apply Scale to Bounds | 将边界乘以比例,并为点数据中的所有点将比例重置为单元向量。 |