Skip to Content
DocumentationFeaturesUV Animation

UV Animation

UV Animation modulates the texture lookup coordinates per frame to animate surfaces without touching geometry. Genesis ships six modes — scroll, wave, distortion, pixelate, stutter, and hand-drawn jitter — covering everything from flowing water to 12 FPS stop-motion looks.

Video

A flat water plane with scrolling foam (Scroll mode) and a heat-haze panel distorting the background (Distortion mode) playing side by side, the geometry staying perfectly still.

features/uv-animation/uv-anim-overview.mp4

Surface motion with no geometry change — scrolling foam and heat-haze distortion.

When to use it

  • Conveyor belts and treadmills — scroll mode.
  • Water surfaces — wave plus distortion.
  • Retro and pixel art — pixelate mode.
  • Stop-motion and hand-drawn anime — stutter plus jitter.

Modes

  • Scroll — constant (u, v) += (_ScrollX, _ScrollY) * _Time. The simplest mode.
  • Wave — a sinusoidal warp: uv += sin(uv.yx * density + time * speed) * amplitude.
  • Distortion — samples a normal-style map and uses its XY as an additional UV offset, for heat-haze looks.
  • Pixelate — snaps UVs to a configurable grid for retro-pixel rendering.
  • Stutter — quantizes time to a frame rate (for example 12 FPS) so all UV animation steps in discrete frames.
  • Hand-drawn — sub-pixel UV jitter that changes every N frames, giving the impression of redrawn frames.
Animated GIF

A row of identical textured quads each looping a different UV animation mode — Scroll, Wave, Distortion, Pixelate, Stutter, Hand-drawn — so the motion of each is distinguishable, with mode names labelled.

features/uv-animation/uv-anim-modes.gif

The six UV animation modes looping on identical quads.

Properties

Inspector labelShader propertyTypeDefaultDescription
Mode_UVAnimModeEnumOffOff, Scroll, Wave, Distortion, Pixelate, Stutter, or HandDrawn.
Scroll Speed_UVScrollSpeedVector4(0.1, 0, 0, 0)Scroll velocity; xy = U, V.
Wave Amplitude_UVWaveAmplitudeFloat (0–1)0.02Wave displacement strength.
Wave Frequency_UVWaveFrequencyFloat (0–32)8.0Wave density.
Distortion Map_UVDistortionMapTexture2DNoneRG channels used as a UV offset.
Distortion Strength_UVDistortionStrengthFloat (0–1)0.03Multiplier on the distortion offset.
Pixel Grid_UVPixelGridFloat (4–512)64Pixelate cells per UV unit.
Stutter FPS_UVStutterFPSInt (1–30)12Step rate for Stutter mode.
Jitter Amount_UVJitterAmountFloat (0–2)0.5Hand-drawn jitter radius in pixels.

Usage

  1. Pick the Mode that matches your effect.
  2. For Scroll, set the velocity in Scroll Speed (0.1 is a slow drift, 1.0 a fast conveyor).
  3. For Stutter or Hand-drawn, set the frame rate; 8–15 FPS reads as 2D animation.
  4. Stack with Posterize and Cel Shading for the canonical anime aesthetic.
material.SetFloat("_UVAnimMode", 5); // Stutter material.SetInt("_UVStutterFPS", 12); material.SetVector("_UVScrollSpeed", new Vector4(0.05f, 0, 0, 0));

Tips & gotchas

  • Wrap mode matters: scroll modes need Repeat wrapping, since clamped textures leak edge color.
  • Stutter affects everything inside the shader, including dissolve and emission pulses, so pair them deliberately.
  • Scroll is free; distortion adds one texture sample, and stutter is a quantize, also free.
  • UV animation is fragment-side and per-eye consistent in VR.
  • Vertex Animation — the geometry-side cousin.
  • Cel Shading — stutter plus cel gives the 2D anime look.
  • Hologram — scan lines are a built-in UV scroll.
  • Dissolve — combine with UV scroll for moving dissolve patterns.
Last updated on