WonderTexture Get WonderTexture
Docs / Graph Types / FX-Map Graphs
Graph Types • WonderTexture

FX-Map Graphs

Generate hierarchical procedural patterns with Quadrants, recursive branches, iterations, function-driven transforms, texture inputs, and FX-Map system variables.

// FX-MAP

What FX-Map Graphs Are

An FX-Map Graph generates textures by traversing a branching spatial hierarchy. Instead of processing an image node by node or evaluating one function independently for every pixel, FX-Map repeatedly subdivides space and decides what each branch should do.

A useful mental model is Start at a root → Place or transform a pattern → Split into quadrants → Continue through selected branches. This makes FX-Map a strong fit for recursive patterns, multi-scale noise, splatter systems, shape distributions, branching generators, octave-like structures, and designs whose behavior changes with hierarchy depth or iteration.

If the problem is naturally described as repeatedly subdividing space and deciding what happens in each branch, FX-Map is often cleaner than a long Standard Graph.

FX-MAP Build a rooted Quadrant hierarchy, then execute the FX-Map Graph from a Standard Graph to generate the final procedural pattern.

// HIERARCHY

Root, Quadrants & Patterns

Every usable FX-Map starts from Set as Root. Connect its Root output to the first compatible FX-Map flow node. This marker does not receive a finished texture like a Standard Graph Output; it tells the FX-Map evaluator where traversal begins.

The Quadrant node is the central building block. It can contribute a pattern at the current hierarchy level and exposes Q1, Q2, Q3, and Q4 for the four child regions. Connecting another FX-Map flow node to one of these outputs continues processing inside that smaller region.

FX-Map flow is built from a small set of structural nodes:

FLOW NODEDESCRIPTION
Set as RootMarks where traversal of the FX-Map hierarchy begins.
QuadrantPlaces or transforms content at the current level and divides the following hierarchy into four spatial quadrants.
IterateRepeats one downstream branch a configurable number of times while also exposing a separate pass-through branch.
SwitchSelects one of two downstream branches using a Boolean condition.
Input ImageDeclares an external texture that Quadrant or Function logic can use.

A Quadrant can simply subdivide with None, or draw one of the supported patterns: Input Image, Disc, Square, Gaussian, Paraboloid, Pyramid, Cone, Hemisphere, Bell, Thorn, or Rigged Bell. Use None when a level only organizes the hierarchy; choose a pattern when it should contribute visible content.

Quadrant exposes the main controls used to shape each hierarchy level:

QUADRANT CONTROLDESCRIPTION
Color / LuminosityControls the Color contribution or grayscale luminosity of the pattern.
Pattern OffsetMoves only the drawing produced by the current Quadrant.
Pattern SizeScales the pattern relative to the current Quadrant region.
Branch OffsetMoves the coordinate context used by the current node and its downstream hierarchy.
Pattern RotationRotates the pattern; a value of 1 represents one complete rotation.
Blending ModeControls how the generated pattern combines with previous FX-Map content.

The distinction between Pattern Offset and Branch Offset is important: Pattern Offset means “move this drawing,” while Branch Offset means “move this branch and the coordinate context inherited by its children.”

Quadrant supports Alpha Blend, Add, and Max. Because multiple hierarchy levels can contribute visible content, blending is part of the structure rather than only a final compositing step.

// FUNCTION-DRIVEN

Function Logic & Context

Many FX-Map parameters can be driven by Function/value inputs, so Pattern Offset, Pattern Size, Branch Offset, Color, Rotation, blending choice, iteration count, and Switch conditions can all respond procedurally.

For example, $depth → Math → Pattern Size can shrink shapes as the hierarchy deepens, while $number → Math → Pattern Rotation can vary repeated passes.

FX-Map exposes system values that describe the current hierarchy context:

SYSTEM VALUEDESCRIPTION
$depthReturns the current recursion level, beginning at 0 for the root context.
$posReturns the normalized center coordinate of the current Quadrant region.
$numberReturns the current zero-based Iterate pass.
$sizeLog2Returns inherited output dimensions as base-2 exponents; for example, 1024 × 1024 is represented as 10, 10.
SAME NAME, DIFFERENT CONTEXT
Pixel Composer $pos means “which output pixel am I evaluating?” FX-Map $pos means “where is the current Quadrant region in the hierarchy?”

External textures can also participate in Function logic. Add FX-Map → Input Image to declare a texture input. Its label becomes the parent FX-Map instance socket name, and the node provides a Texture Sampler. Sample Input Texture receives that sampler plus a Vector2 UV and returns a Vector4 color value, allowing source data to influence procedural calculations—for example by sampling with FX-Map $pos.

Quadrant can also use Input Image directly as its pattern type when the hierarchy should place supplied texture content.

// FLOW CONTROL

Iteration & Branching

Iterate repeats the branch connected to Iteration Output for the requested number of passes while Pass-Through Output continues separately. The supported iteration range is 1–1024.

Inside an Iterate branch, $number returns the current zero-based pass so Function logic can vary rotation, position, color, scale, or any other driven parameter from one repetition to the next.

Nested Iterate nodes can create multiple active iteration contexts. Iteration Info lets Function logic read a specific tracked Iterate level; Index 0 refers to the outermost tracked level, while higher indices address deeper nested levels.

The FX-Map Switch uses a Boolean Condition to choose either If True or If False. Because the condition can come from Function logic, branch structure can respond to depth, iteration, random values, position, or exposed user parameters.

// STANDARD GRAPH

Inputs, Output & Instance Controls

Under Graph Properties → FX-Map Settings, choose whether the graph produces Grayscale or Color. The parent FX-Map instance adapts its Output and Background sockets to match. Use Grayscale for masks and other single-channel results; use Color when the hierarchy needs RGBA contributions.

To execute the graph, add Shift+A → Generators → FX-Map in a Standard Graph and choose the source FX-Map Graph. Depending on the source, the instance can expose Background, Input Image sockets, exposed Function parameters, and its global processing controls.

INSTANCE CONTROLDESCRIPTION
BackgroundProvides the starting texture or fallback background value for the generated FX-Map.
RoughnessControls how strongly deeper hierarchy levels contribute.
Global OpacityControls the final strength of the complete generated result.
Random SeedProvides deterministic runtime variation for Random Function logic inside the graph.
Tile ModeEnables periodic wrapping of generated positions using the current Tiling Region.
Render RegionDefines the procedural coordinate region mapped into the output image.
Tiling RegionDefines the coordinate range used when Tile Mode wraps generated positions.
Output SizeControls the output resolution of the generated FX-Map texture.

If Background is unconnected, the instance uses its fallback BG Luminosity in Grayscale mode or BG Color in Color mode.

A Roughness value of 0 disables the normal depth attenuation effect, while 1 uses the default depth-response behavior. Global Opacity acts on the complete generated result and is separate from the blending mode used by individual Quadrant patterns.

The FX-Map instance’s Random Seed lets multiple instances share the same source graph while producing different deterministic procedural variations.

// SPATIAL CONTROL & REUSE

Tiling, Regions & Reuse

Tile Mode wraps generated positions according to the current Tiling Region so the hierarchy can operate with periodic boundaries. This is different from the normal Standard-node Tiling base parameter and from 2D Preview → Repeat (Tile Check), which only repeats the finished image for inspection.

Render Region defines the procedural coordinate region mapped into the output image as Min X, Min Y, Max X, Max Y. Tiling Region defines the coordinate range used for Tile Mode wrapping and normally defaults to 0,0 → 1,1. Leave both at their defaults for the normal full-tile workflow unless you intentionally need a custom procedural region.

TILE MODE HAS A COST
Enable Tile Mode only when periodic boundary behavior is required. Patterns near boundaries can require repeated placement across the tiling region.

Deep Quadrant trees, high Iterate counts, Function-driven branching, large output sizes, and Tile Mode can make FX-Map work grow much faster than the visible node count suggests. Keep hierarchy depth intentional, avoid excessive iteration counts, use Switch to skip unnecessary branches, work at a sensible preview resolution, and enable Tile Mode only when needed.

FX-Map is reused through the live FX-Map node inside a Standard Graph. The current direct Graph Baking asset types are Standard, Function, and Pixel Composer; FX-Map is not a standalone baked graph type. A larger Standard Graph that contains FX-Map logic can still participate in broader reusable material workflows.