Skip to content
← Back to Blog 3d-modeling

Texture Coordinate Nodes in Unreal Engine 5: UV Tiling, Panning, and Triplanar Mapping

By BitSoul3D7 min read326 views

If you've ever tiled a stone texture across a large wall prop and watched the repeat pattern become glaringly obvious at 10 meters, you've hit one of the most common material problems in game development. The fix is not a bigger texture — it's smarter UV coordinate control inside the Material Editor.

Texture Coordinate Nodes in Unreal Engine 5: UV Tiling, Panning, and Triplanar Mapping

This post covers every major texture coordinate technique in Unreal Engine 5: precise UV tiling with the TexCoord node, animated scrolling with Panner, seam-free triplanar projection with WorldAlignedTexture, and combining multiple UV channels in a single material. Each technique builds on the last, and by the end you'll have a reusable modular wall material that holds up at any viewing distance.

The Problem with Default UV Coordinates on Large Assets

When you import a mesh into UE5 and apply a material, UE5 maps the texture using UV Channel 0 — the coordinates baked into the mesh at export time. That works well for hero assets with custom UV layouts, but it breaks down quickly in two scenarios:

Large tileable surfaces. A 4×4 meter floor plane with a 1:1 UV layout means the texture stretches across the whole surface. Tile it too aggressively and you see repetition; leave it at 1× and the texels are enormous.

Merged or procedurally placed meshes. Rocks, terrain sections, or modular walls assembled at runtime often have UV layouts that were designed for isolated use. Combine three wall pieces and you get three independent UV islands that tile at different apparent scales.

The solution is to drive UV coordinates inside the material itself, not rely on what came out of Blender or Maya.

TexCoord and Constant Bias Scale: Tiling Control in the Material Editor

The TexCoord node (shortcut: U in the Material Editor) outputs the raw UV coordinates of the mesh. On its own it reads exactly like the imported UVs. The power comes from multiplying those coordinates before they reach a Texture Sample.

TexCoord[0] → Multiply(4.0) → Texture Sample (Base Color)

Multiplying by 4.0 tiles the texture four times across the surface, which keeps texel density consistent regardless of the mesh's world scale. You can expose this multiplier as a scalar parameter (S to create a ScalarParameter) so you can tune it per material instance without recompiling:

TexCoord[0] → Multiply(TilingScalar) → Texture Sample

For non-uniform tiling (different scale in U vs V), use an AppendVector to build a 2D multiplier:

AppendVector(TilingU, TilingV) → Multiply → TexCoord[0] → Texture Sample

This is essential for trim sheets, where U tiles along the length of a surface and V maps discrete trim sections without repeating.

TexCoord and Constant Bias Scale: Tiling Control in the Material Editor — illustrated

The Constant Bias Scale node is a one-node shortcut for the (x + bias) × scale operation. For UV work you usually bypass it in favor of explicit Multiply/Add nodes, but it's useful when you need to remap a 0–1 range to –0.5–0.5 for a centered pan offset.

NodeWhat it doesCommon use
TexCoordOutputs mesh UV coordinatesBase for all UV ops
MultiplyScales UV for tilingTile control
AddOffsets UV positionPan offset, seam hiding
AppendVectorBuilds 2D UV scaleNon-uniform tiling
PannerTime-animated UV scrollWater, lava, conveyors
WorldAlignedTextureProjects in world spaceTerrain, rocks, props

Panning and Scrolling: Animated UVs with the Panner Node

The Panner node takes a UV input and a Time input and scrolls the coordinates at a constant velocity. This is the backbone of every animated surface material: ocean water, lava flows, conveyor belts, emissive neon text, and scrolling scanlines.

TexCoord[0] → Panner(SpeedX=0.02, SpeedY=0.0) → Texture Sample (Normal)
TexCoord[0] → Panner(SpeedX=-0.01, SpeedY=0.015) → Texture Sample (Normal)

Layer two Panner outputs and add the normals using BlendAngleCorrectedNormals to get non-repeating normal detail — the two patterns scroll at different speeds and directions, so the eye never locks onto the repeat cycle.

For water you typically use three layers:

  1. Large low-frequency Panner — gentle large-scale surface movement
  2. Small high-frequency Panner — close-up ripple detail
  3. Radial distortion driven by a sine curve for wave crests

A common performance mistake is using high-resolution textures with Panner when a 512×512 tileable normal map with aggressive tiling is far cheaper and looks identical at game distances. Always set your Panner textures to Sampler Type: Normal and Mip Gen Settings: From Texture Group to let the streaming system handle resolution.

Triplanar Mapping with WorldAlignedTexture: No UV Seams on Any Surface

Triplanar mapping projects a texture from three world-space axes (X, Y, Z) and blends the results based on the surface normal. It requires zero UV coordinates on the mesh — UE5's WorldAlignedTexture function node handles everything internally.

WorldAlignedTexture
  ├── TextureObject: T_Rock_D
  ├── TextureSize: 512
  └── WorldScale: 200
→ Base Color

WorldScale controls how large the texture appears in world units. A value of 100 means the texture tiles every 100 cm. This is the single parameter you tune to match texel density across differently scaled meshes.

The blend between the three projection axes uses the absolute value of the world normal, which means any surface angled between axes gets a smooth weighted blend. Top-facing polygons get the XY projection, side-facing polygons get XZ or YZ. The transition is seamless.

When to use triplanar:

When to avoid it: Close-up hero assets where you want precise texture placement control, and any asset with unique features (decals, logos, damage) that require UV-mapped positioning.

Triplanar Mapping with WorldAlignedTexture: No UV Seams on Any Surface — illustrated

Combining Multiple UV Channels in One Material

Meshes can carry multiple UV sets. Blender exports them as UV0, UV1, UV2; UE5 reads them as TexCoord[0], TexCoord[1], TexCoord[2]. A common pattern is:

A macro/micro detail blend using two UV channels:

# Blender — two separate UV maps baked into the mesh
uv_detail = mesh.uv_layers.new(name="UVDetail")  # UV0
uv_macro  = mesh.uv_layers.new(name="UVMacro")   # UV1
# UE5 Material Graph
TexCoord[0] × 8.0  → T_Stone_D (micro detail)
TexCoord[1] × 1.0  → T_Stone_Macro_D (large colour variation)
Lerp(Macro, Micro, Macro.R) → Base Color

The macro layer carries slow-varying colour variation — darker patches, moss, mineral streaking — while the micro layer provides fine texel detail. Blending them prevents both the blur of pure macro and the tiling repetition of pure micro.

Putting It All Together: A Practical Modular Wall Material

Here is a production-ready material setup for a modular stone wall kit. The material works on any piece in the kit without per-mesh UV adjustment, and the key parameters are exposed for Material Instance overrides:

Parameters exposed:

Graph summary:

[Branch: UseTriplanar]
├── True  → WorldAlignedTexture(T_Stone, 512, TilingScale×50)
└── False → TexCoord[0] × TilingScale → T_Stone
→ Lerp with macro layer → Base Color

TexCoord[0] × TilingScale × 2.0 → Normal Map → FlattenNormal(NormalStrength)

The triplanar branch handles corner pieces and rotated walls. The UV branch handles flat panels where you've taken the time to lay out a clean UV. Material Instances switch between them with a static bool — no shader permutation cost at runtime.

All stone, concrete, and brick tileable textures for this kind of setup are available on the BitSoul marketplace, pre-packed with Base Color, Normal, ORM (Occlusion/Roughness/Metallic), and matching macro variation maps.

Start Building Smarter Materials Today

The TexCoord node, Panner, and WorldAlignedTexture cover 90% of real-world texture coordinate problems in UE5. Master these three and you can adapt any imported asset — from your own meshes to assets sourced from BitSoul's marketplace — to tile cleanly, animate smoothly, and hold up at any camera distance without artist intervention per mesh.

Start with a single modular wall material, expose TilingScale as a parameter, and apply it as a Material Instance across your entire kit. That one change eliminates per-piece material assignments and makes texel density consistency a one-slider problem.


Need drop-in assets for this workflow? Grab the 82-model Vehicle Bundle on the BitSoul marketplace and drop them straight into your project.

Tags: vehicles

Skip the modeling — download it instead

A free BitSoul3D account gets you 2 GLB downloads every month for personal use plus 25 one-time AI Engine credits, no card required. PBR-textured GLB downloads with a full 3D preview before you buy, for Unreal, Unity, Godot or Blender — OBJ and 3D-printable STL come with any purchase or paid plan.

Browse 1,051 models — from $4.99 → or start free (2 downloads a month)