UE5蓝图节点:使用C++创建一维Perlin噪声生成器
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. 在蓝图中使用节点
- 在你的UE5项目中编译代码。
- 创建一个新的蓝图或打开现有的蓝图。
- 在蓝图编辑器中,右键单击空白区域并搜索 'Perlin Noise'。
- 将 'Get Perlin Noise' 节点拖放到蓝图图表中。
- 连接两个浮点数变量或值到节点的 'X' 和 'Y' 输入引脚。
- 该节点的输出引脚现在将输出根据输入值计算出的一维Perlin噪声值。
现在你可以在你的蓝图中使用这个自定义节点来生成Perlin噪声,用于各种目的,例如程序化生成内容或创建特效。
原文地址: https://www.cveoy.top/t/topic/jwXy 著作权归作者所有。请勿转载和采集!