Shader Flight Recorder
Released2026

Shader Flight Recorder

A Unity profiling tool that turns real player shader uploads into warmup evidence

Platform
Unity Player · Development Builds
Team
Personal Unity tooling project
Time
Independent tool · 2026
Role
Runtime profiling & Unity Editor tooling
About the project

What it is

Shader Flight Recorder records shader variants that reach the GPU driver during real player sessions. It identifies late first-use uploads that can cause stutters, preserves the scene and frame context, and exports exact graphics states for platform-specific shader warmup.

What I worked on

My contribution

I built the runtime recorder and the Unity Editor dashboard as one workflow: capture representative gameplay in a Development Build, inspect the variants that appeared late or were expensive, then compare the next capture against a platform-specific baseline.

Key features

Main systems

  • Player-build capture of shader variant uploads with frame, timing, scene, pass, keyword and driver-upload information.
  • An Editor dashboard that prioritizes variants to fix, warm before gameplay or review as regressions.
  • Exact GraphicsStateCollection exports for graphics-API and hardware-specific warmup evidence.
  • Platform, graphics API and quality-level baselines with incomplete-capture safeguards for CI.
Technical deep dive

How it works

Player evidence

Capture the moment a variant reaches the driver

The recorder targets Development Builds because Unity does not expose the relevant GPU-upload evidence in Editor Play Mode. Each upload captures its frame, elapsed time, frame duration, active scene, shader pass, stages, local keywords and driver upload time.

  • Capture metadata also records the Unity version, platform, graphics API, device, quality level and resolution.
  • Periodic checkpoints and an event limit protect the output of long or interrupted sessions.
Actionable review

Start with the variants that matter

The dashboard opens the latest capture and labels each row with a next action such as Fix first, Warm before gameplay or Review new variant. This keeps a raw profiling log from becoming another opaque data file.

  • Captured sessions can be compared against a baseline after a shader or loading-flow change.
  • Baselines are isolated by platform, graphics API and quality level so DX12 evidence is never treated as Vulkan or mobile evidence.
Warmup output

Save exact graphics states

When recording stops, the tool writes a JSON capture alongside a GraphicsStateCollection file. That companion file provides a concrete starting point for platform-specific warmup rather than a manually maintained list of guessed variants.

  • The recorder never strips shaders or changes graphics settings.
  • A capture only proves the gameplay paths that were actually exercised, which keeps the tool honest about coverage.
Build and CI workflow

Repeat the capture outside the Editor

The tool can create and launch a Development Build from the enabled Build Profile scenes. A demo path supports automated smoke captures, while CI rejects incomplete or truncated captures by default.

Challenges

What was difficult

The central difficulty was treating shader stutter as a runtime evidence problem rather than an Editor-only inspection problem. The tool needs useful context, safe output limits and comparable baselines without claiming that one test session covers every possible gameplay path.

Conclusion

What I learned

Shader Flight Recorder taught me to connect Unity runtime instrumentation, graphics performance and developer experience. I learned to turn low-level capture data into a workflow that helps a team decide what to investigate, what to warm up and what needs another representative player run.

Stack
Unity 6C#ShadersGPU ProfilingUI ToolkitCI
Streetlab VR
Next project
Streetlab VR
Clinical VR tooling and mobile performance optimization for Meta Quest 3