Overview
NoiseKit generates procedural noise for terrain, foliage scattering, textures, level layouts and any other gameplay that needs smooth pseudo-random values. You create a core noise generator, combine generators with modules, and sample the final module with Get Noise 2D or Get Noise 3D. Every factory is a Blueprint node, and the same classes are available from C++.
- Core generator with eight noise types: Value, Gradient and Simplex (each with a fractal variant), Cellular and White noise.
- Fractal layering (FBM, Billow, Rigid Multi) with octaves, lacunarity and gain; Linear, Hermite or Quintic interpolation.
- Cellular (Voronoi) noise with Euclidean, Manhattan or Natural distance and eight return types.
- Select, 3-way select, blend (with an optional float curve) and masked add modules to mix generators.
- Scale/bias, constant, one- or two-pass domain warp, radial and shore-filter modules to shape results.
- Spline distance generator that turns spline components into a distance field (roads, rivers, paths).
- One sampling interface for 2D and 3D on every module; pure C++ runtime module with no prebuilt binaries.
Requirements
| Requirement | Details |
| Unreal Engine | 4.27 and 5.8 (verified clean on both) |
| Modules | NoiseKitFastNoise (Runtime, under Source/ThirdParty: the core generator, its enums and the module base class) and NoiseKit (Runtime: modules, factory nodes) |
| Dependencies | None (uses only the engine modules Core, CoreUObject, Engine and InputCore) |
| Language | Blueprints and C++ |
| Platforms | No platform restriction in the plugin descriptor. Win64 is verified by Alpha XP; other platforms are supported by the code, not verified by Alpha XP. |
Installation
- Close the editor and copy the
NoiseKit folder into your project's Plugins/ folder (create it if needed), or install the plugin from Fab into your engine.
- Open the project. For a C++ project, let the editor rebuild the plugin module when prompted, or build the project from your IDE.
- Enable NoiseKit in Edit > Plugins (search for “NoiseKit”) and restart the editor.
- C++ only: add
"NoiseKit" to PublicDependencyModuleNames in your module's .Build.cs. NoiseKit depends publicly on NoiseKitFastNoise, so its headers (NoiseKitCoreNoise.h, NoiseKitNoiseGenerator.h, NoiseKitFastNoiseTypes.h) are available automatically.
Verifying the install In any Blueprint graph, search for Create Noise Generator; it appears under the NoiseKit category.
Quick start
Blueprint
- In an actor's Begin Play, add Create Fractal Noise Generator (category NoiseKit), choose Simplex, a seed and a frequency.
- Promote the return value to a variable. The result is a UObject; an unreferenced object is garbage collected.
- Call Get Noise 2D on the variable with world X and Y to get a value (typically between -1 and 1).
- Create a second generator and a control generator, combine them with Create Select Module, and sample the select module instead.
C++
#include "NoiseKitBlueprintFunctionLibrary.h"
// In your actor's header: keep the graph referenced so it is not garbage collected.
// UPROPERTY() UNoiseKitNoiseGenerator* Terrain = nullptr;
void AMyTerrainActor::BuildNoise()
{
UNoiseKitNoiseGenerator* Hills = UNoiseKitBlueprintFunctionLibrary::CreateFractalNoiseGenerator(
this, ENoiseKitFractalNoiseType::FractalSimplex, /*seed*/ 42, /*frequency*/ 0.002f);
UNoiseKitNoiseGenerator* Mountains = UNoiseKitBlueprintFunctionLibrary::CreateFractalNoiseGenerator(
this, ENoiseKitFractalNoiseType::FractalGradient, 7, 0.001f, 0.5f,
ENoiseKitInterp::InterpQuintic, ENoiseKitFractalType::RigidMulti, /*octaves*/ 5);
UNoiseKitNoiseGenerator* Mask = UNoiseKitBlueprintFunctionLibrary::CreateCellularNoiseGenerator(this, 3, 0.0005f);
Terrain = UNoiseKitBlueprintFunctionLibrary::CreateSelectModule(
this, Mountains, Hills, Mask, ENoiseKitSelectInterpType::SineInOut, /*falloff*/ 0.2f, /*threshold*/ 0.0f);
const float Height = Terrain->GetNoise2D(1200.f, -350.f);
UE_LOG(LogTemp, Log, TEXT("Height: %f"), Height);
}
Factory nodes
Static, pure nodes in the NoiseKit category. Each returns a UNoiseKitNoiseGenerator; the hidden Outer pin defaults to the calling object. Combination nodes return None when a required input module is missing.
| Node | Type | Description |
| Create Noise Generator | Pure | Full core generator: noise type, cellular distance function and return type, fractal type, interpolation, seed (1337), octaves (4), frequency (0.001), lacunarity (2.0) and fractal gain (0.5). |
| Create Simple Noise Generator | Pure | Value, Gradient, Simplex or White noise without fractal layers. Seed (12345), frequency (0.1), interpolation (Linear). |
| Create Fractal Noise Generator | Pure | Value, Gradient or Simplex noise with FBM, Billow or Rigid Multi fractal layering; gain, octaves and lacunarity. |
| Create Cellular Noise Generator | Pure | Cellular (Voronoi) noise with a distance function (Euclidean, Manhattan, Natural) and a return type. |
| Create Select Module | Pure | Returns Input Module 1 or 2 depending on whether the Select Module value is above the threshold; optional interpolated falloff (circular, exponential, sine, step, linear). |
| Create 3Select Module | Pure | Returns Input Module 1, 2 or 3 depending on the Select Module value against the upper and lower thresholds. |
| Create Blend Module | Pure | Lerps between two inputs using the Select Module value (mapped from -1..1 to 0..1), optionally reshaped by a float curve. |
| Create Add Module | Pure | Adds two inputs; with an optional Mask Module the sum is scaled by the mask where the mask is at or above the threshold, otherwise Input Module 1 is returned. |
| Create Scale Bias Module | Pure | Multiplies the input by Scale and adds Bias. |
| Create Warp Module | Pure | Domain-warps the input module using a warp module, with one or two warp iterations and a multiplier. |
| Create Constant Module | Pure | Returns a constant value everywhere. |
| Create Radial Module | Pure | Switches between two inputs by distance from an origin and radius, with optional interpolated falloff. |
| Create Shore Filter Module | Pure | Flattens 2D values that fall within a threshold around a shore height (2D only). |
| Create Spline Generator | Pure | Distance field from an array of spline components between a minimum and maximum distance, optionally reshaped by a float curve. |
Sampling
Functions on every NoiseKit object.
| Node | Type | Description |
| Get Noise 2D | Callable | Samples the module at X, Y. Call it on the last module of your graph. |
| Get Noise 3D | Callable | Samples the module at X, Y, Z. The shore filter module is 2D-only and returns -1 here. |
| Add Spline | Callable | Spline generator only: adds a spline component to the distance field. |
Classes
| Class | Type | Description |
| UNoiseKitNoiseGenerator | Class | Base class of every module; returned by all factory nodes. Implements Get Noise 2D / Get Noise 3D. Module NoiseKitFastNoise. |
| UNoiseKitCoreNoise | Class | Core generator created by the Create * Noise Generator nodes. Module NoiseKitFastNoise. |
| UNoiseKitSelectModule / UNoiseKit3SelectModule / UNoiseKitBlendModule / UNoiseKitAddModule | Class | Combination modules. |
| UNoiseKitScaleBiasModule / UNoiseKitWarpModule / UNoiseKitConstantModule | Class | Shaping modules. |
| UNoiseKitRadialModule / UNoiseKitShoreFilterModule / UNoiseKitSplineGenerator | Class | Spatial modules. |
| UNoiseKitBlueprintFunctionLibrary | Class | Static factory functions behind the Create nodes. |
Enums
| Enum | Type | Values |
| ENoiseKitNoiseType | Enum | Value, Value Fractal, Gradient, Gradient Fractal, Simplex, Simplex Fractal, Cellular, White Noise. |
| ENoiseKitSimpleNoiseType | Enum | Value, Gradient, Simplex, White Noise. |
| ENoiseKitFractalNoiseType | Enum | Value, Gradient, Simplex. |
| ENoiseKitFractalType | Enum | FBM, Billow, Rigid Multi. |
| ENoiseKitInterp | Enum | Linear, Hermite, Quintic. |
| ENoiseKitCellularDistanceFunction | Enum | Euclidean, Manhattan, Natural. |
| ENoiseKitCellularReturnType | Enum | Cell Value, Noise Lookup, Distance, Distance 2, Distance 2 Add, Distance 2 Sub, Distance 2 Mul, Distance 2 Div. |
| ENoiseKitPositionWarpType | Enum | None, Regular, Fractal. |
| ENoiseKitSelectInterpType | Enum | None, Circular In/Out/In Out, Exponential In/Out/In Out, Sine In/Out/In Out, Step, Linear. |
| ENoiseKitWarpIterations | Enum | One, Two. |
C++ core generator API
Additional functions on UNoiseKitCoreNoise (C++ only). Cast a generator returned by the core factories to UNoiseKitCoreNoise to tune it after creation.
| Function | Type | Description |
| SetSeed / GetSeed | C++ | Seed used by every noise type (default 1337). |
| SetFrequency | C++ | Frequency for all noise types (default 0.01 on a directly constructed object; the factory nodes pass their own). |
| SetNoiseType | C++ | Selects the ENoiseKitNoiseType returned by Get Noise 2D / 3D. |
| SetInterp | C++ | Linear, Hermite or Quintic smoothing for value and gradient noise and position warping. |
| SetFractalOctaves / SetFractalLacunarity / SetFractalGain / SetFractalType | C++ | Fractal layering parameters. |
| SetCellularDistanceFunction / SetCellularReturnType | C++ | Cellular noise distance metric and output. |
| SetCellularNoiseLookup | C++ | Generator sampled per cell when the cellular return type is Noise Lookup (C++ only). |
| SetPositionWarpAmp / SetPositionWarpType | C++ | Built-in position warping (None, Regular, Fractal) applied by Get Noise 2D / 3D. |
| GetNoise2DDeriv | C++ | Returns the 2D value plus its analytic X/Y derivative as an FVector. |
| GetValue / GetGradient / GetSimplex / GetCellular / GetWhiteNoise | C++ | Direct access to individual noise functions (2D and 3D overloads; 4D for simplex and white noise). |
Troubleshooting
| Symptom | Cause and fix |
| A combination node returns None | Select, 3 Select, Blend, Add, Scale Bias, Warp, Radial and Shore Filter need their input modules (and an outer object). Connect every required input before calling the node. |
| The noise stops working after a while | Generators are UObjects. Store the result in a variable (Blueprint) or a UPROPERTY() member (C++) so the garbage collector keeps it. |
| The output looks flat or like static | Frequency is too low or too high for your coordinate scale (Unreal units are centimetres). Create Noise Generator defaults to 0.001, the simple, fractal and cellular nodes to 0.1. |
| Assertion or crash when the cellular return type is Noise Lookup | Noise Lookup needs a lookup generator assigned in C++ with SetCellularNoiseLookup. In Blueprint use one of the other return types. |
| Shore filter returns -1 | The shore filter only works in 2D. Sample it with Get Noise 2D. |
| Spline generator returns 1 everywhere | No spline is registered or all points are beyond the maximum distance. Pass splines to Create Spline Generator or call Add Spline. |
| Same seed gives slightly different noise on another platform | The seed permutation uses the platform's C++ standard library random distribution. Results are stable on one platform and compiler. |