Leaves of Fate

2026-03-03

About

Leaves of Fate is a 2d platformer that takes place in a castle, where the player (Fenn) attempts to rescue the knights which have been trapped by a party of rogue wizards.

I was onboarded as a contractor to help throughout the 7-week production of the game, where I worked on graphical effects and environment art.

Graphics

The Rimlight Shader

Visual Goals

  • Visual goals
    • Light around rim of sprite instead of all over, to approximate backlighting.
    • No bandwidth to author bumpmaps for each sprite, so a workaround has to be made…
  • Iterations
    • Simple raycast
      • Results were mostly smooth, but suffered at low grazing angles.
    • Surface angle approximation
      • Initial results, based on existing implementations, were not promising.
      • Stumbled upon bilinear alpha fitting: Promising, but relied on mipmaps and produced artifacts on some assets.
      • With these changes, it was overall less computational work and likely more performant than raycasting.
    • Jittered raycast
      • Best of both worlds, smooth results and acceptable performance.
      • Temporal noise to make visually smoother at lower sample counts
  • Methods
    • Alpha sampling
    • Angular jitter
    • Ray offset jitter

Dust, Gloom, and Bloom

  • Visual goals
    • Create a fog-like effect when used alongside tinting
    • Apply subtle bloom and tonemapping to just the background
  • Optimization
    • Do the above without requiring a backbuffer copy
    • Combined effects to use minimal number of samples
Dustgloom shader comparison.

Dustgloom shader before/after, in-editor view.

Ice and Snow

Ice

  • Visual goals
    • Work with existing sprites to merge toon-y look with fancy graphics
    • Refraction and reflection
    • Chromatic dispersion
  • Limitations encountered
    • Fully depends on screen buffer, so it has to be rendered after the rest of the scene
    • Complete nightmare to get scenes organized in a way where this could happen
Ice shader comparison.

Ice shader before/after, in-game view.

Snow

  • Learning godot particles
  • Using local-space to allow parallax without an additional CanvasLayer
  • Custom shader to apply background tint alongside light to match room temperature

Art

Drawn Art

  • Lanterns
  • Bricks

Environment Design

  • Polish of levels