← Back to portfolio
Moonlighter 2: The Endless Vault

Technical Artist · Digital Sun Games

Moonlighter 2: The Endless Vault

Technical artist on the sequel to Moonlighter, from pre-production to release. I worked on shaders and shading, procedural content generation, optimization and porting, bridging art and code.

Role
Technical Artist
Studio
Digital Sun Games
Engine
Unity
Platforms
PC & consoles

What I worked on

Blob sea

Artists author the blob with regular Shuriken particle systems. An editor baker turns them into data that a compute shader re-simulates on the GPU. Each camera culls the particles, and a second compute pass ray-marches them as smooth-min metaball SDFs into a low-res ray-length buffer that the composite upscales and shades.

Blob sea around the Interdimensional Dock, final frame from the game camera
Final frame
Debug view: particle spheres fed to the ray marcher
SDF spheres after camera culling
Debug view: low-resolution ray-length buffer in false colour
Low-res ray-length buffer (1440×810)

With coding agentsDesign the system with them from the start, on a more solid base for better visual finish and performance. Then sweep compute-shader variants (thread-group sizes, culling granularity, buffer resolution) and compare GPU timings from RenderDoc and PIX captures, and generate debug views on demand instead of hand-writing each one.

BotinGeneric: the toon look

The main lit shader behind the game's look, with sibling variants for characters, cloth, rocks and grass. Lighting goes through hand-authored light ramps per asset family instead of a Lambert falloff, and lit and shadowed areas get their own colours: post-process Volumes drive a global tint and a shadow-light colour, so each zone, time of day or boss phase restyles the whole scene without touching a single material. Stepped specular and rim, a world-space height gradient and per-instance colour variation complete the look.

Will by the Tresna well, day
Day volume
Same shot by night
Night volume, same materials
Lighting only by day: warm light, cool shadows
Lighting only: light vs shadow colour (day)
Lighting only by night
Lighting only (night)

With coding agentsAudit every material and keyword to strip unused shader variants, batch-migrate materials when the shader changes, and build better debug views for ramps, light and shadow colours and Volume overrides.

Integration Tool

An editor workspace where VFX and audio artists build effects on top of character animations, in context: real rigs and weapons, and dungeon rooms generated around the preview. Everything lives on a Timeline (animation, VFX prefabs, camera shakes, flashes and FMOD events). A right-click Export VFX bakes the selected tracks into a VFXData asset of timed, Addressable entries, and at runtime a pooled VFXController plays it back with audio, flashes and shakes in sync.

Integration Tool in the Unity editor: generated Houtu room with MoleTaalik GlassSpike, its Timeline and the tool inspector
The whole workspace: generated Houtu room, MoleTaalik@GlassSpike on its Timeline, and the tool inspector
  1. TimelineAuthor VFX & audio on the animation
  2. Export VFXBake selected tracks
  3. VFXDataTimed Addressable entries
  4. VFXControllerPooled runtime playback

With coding agentsDrive the editor through the Unity CLI to batch re-export VFXData and find missing or non-Addressable references, and scaffold Timeline tracks from a plain-language description so artists start from a draft instead of an empty track. Beyond that, iterate faster on the tool's UI and UX with the artists who use it every day, and automate more of the pipeline: auto-export on save, validation before commit and batch previews of every effect on every rig.

More bits