Fragments/Breakdowns/Dawn 4

  • 29genuary25
  • 09flare
  • 05dawnFree
  • 08imaginary
  • 10cascade
  • 05warp
  • 05eidolon
  • 06arcs
  • 02mesh
  • 07formation
  • 08shift
  • 05abiogenic
  • 10gravity
  • 05slate
  • 07bands
  • 21genuary26
  • 08nebulaNew
  • 05penumbraNew
  • 08singularityNew
  • 08emergeNew

Register now ↵
42

Dawn 4

Gradient study inspired by Rik Oostenbroek. Noise layered into smooth ramps for subtle grain so wide blends never feel like flat vector fills.

Loading...
←Dawn 3Dawn 5→
←→

dawn4

  • Loading...
  • Loading...
  • Loading...
  • Loading...
Works171
Writing35

Fragments

Learn creative coding with shaders. For design engineers, creative coders and shader artists: techniques, tools, deep dives. Powered by ThreeJS and TSL.

Loading...

2025 Phobon

phobon.ioShadercraft

Pages

HomeTechniquesUtilitiesBreakdownsWorksWriting

Contact

X @thenoumenonhey@fragments.supplyOKAY DEV @phobon
All rights reserved.

Implementation

The Dawn series of shaders are a tribute to some of the beautiful work of Rik Oostenbroek.

I've been a huge fan of his work for a long time, and was particularly inspired by some of his pieces that feature lovely, vertically-oriented gradients with a simple, repeating, linear pattern and a grainy texture.

A couple of examples that inspired this shader:

  • Gradient 1
  • Gradient 2

Breakdown

This shader introduces more complex geometric elements while maintaining the signature Dawn aesthetic. It uses SDFs (Signed Distance Functions) to create organic shapes, layered noise for variation, and a sophisticated masking system. There are 5 key components:

Gradient with SDF Modulation

  • Cosine PaletteGenerate procedural color palettes with cosine functions. Create smooth, vibrant gradients mathematically.

Unlike the previous Dawn sketches, this gradient is modulated by a sphere SDF and noise, creating more organic color variation:

SDF-modulated gradient
// Get aspect-corrected UVs for the screen
const uv0 = screenAspectUV(screenSize).toVar()
 
// Palette arguments
const a = vec3(0.8, 0.5, 0.4)
const b = vec3(0.2, 0.4, 0.2)
const c = vec3(2.0, 1.0, 1.0)
const d = vec3(0.0, 0.25, 0.25)
 
// Layered noise for organic variation
const n = simplexNoise3d(vec3(offsetUv, time.mul(0.1)))
 
// Gradient modulated by sphere SDF and noise
const col = cosinePalette(sdSphere(uv0).mul(n), a, b, c, d)

Layered Noise System

  • Noise FunctionsProcedural noise functions: Perlin, Simplex, FBM, and more. Add organic randomness and variation to your shaders.

This shader uses two layers of simplex noise with different scales to create organic variation:

Layered noise for organic variation
// Get aspect-corrected UVs for the screen
const _uv = screenAspectUV(screenSize).toVar()
 
// X-repeated pattern for banding
const repetitions = 12.0
const repeatingPattern = floor(_uv.x.mul(repetitions)).mul(repetitions).mul(0.005)
 
// Sine wave for vertical offset
const s = sin(uv0.x.mul(PI)).toVar()
 
// Offset UVs for noise
const offsetUv = vec2(_uv.x, _uv.y.add(repeatingPattern).add(sin(mul(s, 0.05))))
 
// Layered noise for organic variation
const n = simplexNoise3d(vec3(offsetUv, time.mul(0.1)))
const n2 = simplexNoise3d(vec3(offsetUv.mul(2.0), time.mul(0.1)))

Geometric Masking with SDFs

  • SDF Shape FunctionsSigned Distance Functions (SDFs) for 2D and 3D shapes. Essential primitives for shader programming and raymarching.

The masking system uses a box SDF with noise-modulated dimensions to create organic, flowing shapes:

Geometric masking with SDFs
// Offset UVs for noise
const offsetUv = vec2(_uv.x, _uv.y.add(repeatingPattern).add(sin(mul(s, 0.05))))
 
// Layered noise for organic variation
const n = simplexNoise3d(vec3(offsetUv, time.mul(0.1)))
const n2 = simplexNoise3d(vec3(offsetUv.mul(2.0), time.mul(0.1)))
 
// Mask using noise and box SDF
const t = oneMinus(sdBox2d(vec2(offsetUv.x.mul(mul(2.5, n)), offsetUv.y.mul(mul(1.5, n2)))))

Horizontal Banding Pattern

This shader introduces a horizontal banding pattern using the floor function to create distinct bands:

Horizontal banding pattern
// Get aspect-corrected UVs for the screen
const _uv = screenAspectUV(screenSize).toVar()
 
// X-repeated pattern for banding
const repetitions = 12.0
const repeatingPattern = floor(_uv.x.mul(repetitions)).mul(repetitions).mul(0.005)

Sine Wave Modulation

A sine wave creates vertical offset variation that adds movement and organic flow:

Sine wave modulation
// Get aspect-corrected UVs for the screen
const uv0 = screenAspectUV(screenSize).toVar()
 
// Sine wave for vertical offset
const s = sin(uv0.x.mul(PI)).toVar()
 
// Offset UVs for noise
const offsetUv = vec2(_uv.x, _uv.y.add(repeatingPattern).add(sin(mul(s, 0.05))))

Texture

  • Grain Texture PatternFilm grain shader pattern for analog texture and vintage aesthetics. Add cinematic character to digital compositions.

As with the other Dawn sketches, grain is added for texture:

Adding the grain
// Get aspect-corrected UVs for the screen
const _uv = screenAspectUV(screenSize).toVar()
 
// Add grain for texture
const _grain = grainTexturePattern(_uv).mul(0.2)
finalColor.addAssign(_grain)
Dawn 1

Dawn 1

Free
Dawn 2

Dawn 2

Free
Dawn 3

Dawn 3

Free
Dawn 5

Dawn 5

Free

Be the first to know what's next