pouët.net

Go to bottom

shaderland :: swizzle's journey

canmom - code, animation, modelling and tooling
pumpuli - music

This demo is built around 'Shaderland', a work in progress shader programming puzzle game inspired by Line Rider and Zachtronics games. The game's been in development for about seven or eight months; it is my job but I am the only dev on the game. I took the game systems (automaton, node editor) and built an animation tool on top of it, so the nodes and parameters can be animated on a timeline. (Lots of cardinal splines and BTreeMaps.)

Tooling takes a lot of time, it turns out! The actual animation was completed in the days leading up to Revision and a late night partycoding session.

Swizzle is controlled by a cellular automaton, similar to how Lemmings works. The node graph generates both WGSL code which is compiled with wgpu, and an array of CPU instructions for evaluating the automaton on the CPU. Once the path through the world is determined by the automaton, the animation system interpolates swizzle's legs and other body parts procedurally. When the program is launched, Swizzle's entire path is simulated for the whole demo; this allows scrubbing and pausing easily (but it does mean that any time I make a change to a parameter, it must resimulate from the start.)

The other swizzles use identical automata, but with different thresholds set for the line between 'ground' and 'air' pixels.

If you like the ideas here and think it might be fun to play around with this tool, or especially if this makes you want to learn more about shader programming, the game can be wishlisted on Steam: https://store.steampowered.com/app/4487340/Shaderland/

Unfortunately this party version has text positions hardcoded in pixel values which means that at resolutions other than 1080p, it's going to look quite wrong. An improved post-party version with a fix to this issue will be released soon; fixing this got neglected in the rush to get this in under the deadline! For now, please watch windowed in 1080p if you are on a larger screen.

Tools used:
languages: Rust, WGSL
wgpu - https://wgpu.rs/ (GPU abstraction layer)
Iced - https://iced.rs/ (UI library)
Blender - https://www.blender.org/ (node and swizzle models)
Renoise - https://www.renoise.com/ (music)

Fonts used:
Inconsolata - https://fonts.google.com/specimen/Inconsolata (Open Font License)
Major Mono - https://fonts.google.com/specimen/Major+Mono+Display (Open Font License)

Mac and web builds may be possible but this release only targets Windows and Linux! Should run on a potato, as long as that potato has Vulkan.
Go to top