Medium Game effectsAnimated

Dissolve with a burn edge

A sprite burns away: noise decides which pixels vanish first, and a glowing orange line runs along the front of the burn.

The target picture for the shader challenge "Dissolve with a burn edge"
Recreate this picture. You pass at a 99% match, then try to write it in fewer characters than the par.

How this challenge works

You write a fragment shader that draws the picture above, live in your browser. A match bar shows how close you are, and the score combines accuracy, code size (the par is 1035 characters in Unity (Built-in)) and GPU speed. Work in HLSL, GLSL, WGSL, Metal or Godot and export the result when you are done.

What it is built from

Space
p = (uv - 0.5) * float2(aspect, 1.0)
Noise
n = fbm(p * ? + ?)
Threshold
th = ? + ? * sin(time * ?)
Sprite
a disc of radius ? (edge ? → ?), colored lerp(float3(0.2, 0.55, 0.9), float3(0.9, 0.35, 0.6), uv.y)
Alive
step(th, n): pixels with noise above the threshold are still there
Burn line
alive but within ? of the threshold: step(th, n) * (1.0 - step(th + ?, n)), float3(1.0, 0.55, 0.1)
Background
float3(0.05, 0.05, 0.09)

The exact numbers are left out (shown as ?), but every colour is given. Measure the rest with the pixel readout on both pictures and Diff.

Helper functions provided

The toolbox has: hash(), vnoise(), fbm(). Add them above your frag function with one click.

Solve it in your language

Unity (Built-in), Unity (URP), Unreal, Shadertoy / WebGL, OpenGL (LWJGL, raylib), three.js, GameMaker, LÖVE (Lua), Godot, Apple (iOS, macOS), WebGPU / Bevy.

Start coding