UE5蓝图节点:使用C++创建一维Perlin噪声生成器

本教程将指导你使用C++为虚幻引擎5(UE5)创建自定义蓝图节点,用于生成一维Perlin噪声。

1. 创建头文件 (PerlinNoiseNode.h)

首先,创建名为 'PerlinNoiseNode.h' 的头文件,并添加以下代码:

#pragma once

#include 'CoreMinimal.h'
#include 'Kismet/BlueprintFunctionLibrary.h'
#include 'PerlinNoiseNode.generated.h'

UCLASS()
class YOURPROJECT_API UPerlinNoiseNode : public UBlueprintFunctionLibrary
{
    GENERATED_BODY()

public:
    UFUNCTION(BlueprintPure, Category = 'PerlinNoise')
    static float GetPerlinNoise(float X, float Y);

private:
    static float Noise(float X);
    static float Interpolate(float A, float B, float T);
    static float SmoothedNoise(float X);
    static float InterpolatedNoise(float X);
    static float PerlinNoise(float X, float Y);
};

这段代码定义了名为 UPerlinNoiseNode 的类,它继承自 UBlueprintFunctionLibrary,使其能够在蓝图中使用。GetPerlinNoise 函数将作为蓝图中的节点函数公开,并使用 BlueprintPure 标识为纯函数,因为它不修改游戏状态。

2. 创建源文件 (PerlinNoiseNode.cpp)

接下来,创建名为 'PerlinNoiseNode.cpp' 的源文件,并添加以下代码:

#include 'PerlinNoiseNode.h'

float UPerlinNoiseNode::GetPerlinNoise(float X, float Y)
{
    return PerlinNoise(X, Y);
}

float UPerlinNoiseNode::Noise(float X)
{
    int32 N = (int32)X;
    N = (N << 13) ^ N;
    return (1.0f - ((N * (N * N * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0f);
}

float UPerlinNoiseNode::Interpolate(float A, float B, float T)
{
    float F = (1.0f - cos(T * PI)) * 0.5f;
    return A * (1.0f - F) + B * F;
}

float UPerlinNoiseNode::SmoothedNoise(float X)
{
    return Noise(X) / 2.0f + Noise(X - 1.0f) / 4.0f + Noise(X + 1.0f) / 4.0f;
}

float UPerlinNoiseNode::InterpolatedNoise(float X)
{
    int32 IntegerX = (int32)X;
    float FractionalX = X - IntegerX;

    float V1 = SmoothedNoise(IntegerX);
    float V2 = SmoothedNoise(IntegerX + 1);

    return Interpolate(V1, V2, FractionalX);
}

float UPerlinNoiseNode::PerlinNoise(float X, float Y)
{
    float Total = 0.0f;
    float Persistence = 0.5f;
    int32 Octaves = 4;

    for (int32 i = 0; i < Octaves; i++)
    {
        float Frequency = pow(2.0f, i);
        float Amplitude = pow(Persistence, i);

        Total += InterpolatedNoise(X * Frequency) * Amplitude;
    }

    return Total;
}

此代码实现了 Perlin 噪声算法,并通过 GetPerlinNoise 函数将其提供给蓝图。

3. 在蓝图中使用节点

  1. 在你的UE5项目中编译代码。
  2. 创建一个新的蓝图或打开现有的蓝图。
  3. 在蓝图编辑器中,右键单击空白区域并搜索 'Perlin Noise'。
  4. 将 'Get Perlin Noise' 节点拖放到蓝图图表中。
  5. 连接两个浮点数变量或值到节点的 'X' 和 'Y' 输入引脚。
  6. 该节点的输出引脚现在将输出根据输入值计算出的一维Perlin噪声值。

现在你可以在你的蓝图中使用这个自定义节点来生成Perlin噪声,用于各种目的,例如程序化生成内容或创建特效。

UE5蓝图节点:使用C++创建一维Perlin噪声生成器

原文地址: https://www.cveoy.top/t/topic/jwXy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录