Production readiness for raymarched scenes

Know if your shader will ship.

Fieldproof measures the scene you're actually running, flags the settings that break your frame budget, and packages the result for Godot or the web.

Run a free Ship Check

Runs client-side. No account needed for the free Ship Check.

Example Ship CheckFIELDPROOF · v0.4
Target
Godot desktop / 60 fps
Compile
Ready
Frame budget
16.7 ms
Observed
18.9 ms — At risk
Resolution
1280×720 · 0.75×
Avg steps
47 / 96
Timing source
GPU timer query
Effects on
Fog, reflections, AO
Export
Godot package available
First fix
Volumetric fog is currently using 24 samples. Halving fogSteps recovers ~2.6 ms.
This ticket is an example — not a live measurement.

A shader demo is not a production asset.

Beautiful browser demos routinely fail the moment you try to ship them. Fieldproof exists because three specific failures keep happening.

Failure mode
Hidden GPU cliffs

A scene that runs at 60 fps on your workstation drops to 22 fps on a mid-range laptop the moment fog and reflections both light up. You don't see the cliff until a teammate reports it.

Failure mode
Engine-porting gaps

Browser pipelines (bloom, temporal, N-bounce reflections, volumetric fog) don't fit a single Godot canvas_item shader. Nothing warns you at export time — the port just looks wrong.

Failure mode
Handoff without evidence

"It runs fine on my machine" is not a handoff. Reviewers and teammates want to see what settings, what browser, what frame time, what budget.

How Fieldproof works

One measured pass from author to handoff. Ordered on purpose — the export only means something after the measurement.

  1. Step 1
    Build or paste

    Author a scene in the Workbench with live GLSL hot-swap, or paste a scene from a share link. Compile errors are shown in place, with line numbers remapped to your source.

  2. Step 2
    Run Ship Check

    Pick a target profile (Godot desktop 60 fps, web mid 60 fps, mobile web 30 fps), then sample the scene running right now for ~2.5 seconds. Get a plain-language report of what fits and what doesn't.

  3. Step 3
    Export the handoff

    Take the fixed scene out as a working Godot 4 project, a standalone HTML page, a PNG capture, a WebM recording, or an STL mesh. The hardware report bundles the GPU context the measurement was made on.

What Fieldproof can prove

Only claims backed by the code that runs in your browser.

Shader compile status

Live GLSL hot-swap. Compile errors surface with line numbers remapped to your source. If the shader fails to compile, Ship Check is Blocked — never guesses.

Honest GPU frame timing

Uses EXT_disjoint_timer_query_webgl2 when the driver exposes it. Falls back to a requestAnimationFrame delta when it doesn't. The Ship Check report labels which source it used.

Per-pixel step + overdraw views

Step-count heatmap, normal debug, and average-step readback from the render target. See where the marcher is spending its budget instead of guessing.

Stress bench and cliff finder

Sweep maxSteps, resolution, or repetition and get a real frame-time curve. Bisection search picks the largest maxSteps that holds your target fps.

Active-effect inventory

The report enumerates enabled features (fog samples, bounces, SSS, bloom, temporal) so you know exactly what is driving the number.

Hardware report bundle

Unmasked WebGL vendor/renderer where the browser allows it, extensions, viewport, device pixel ratio. Ships alongside exports so reviewers know the context.

Compatibility, plainly

Read from the export code, not marketing checkboxes.

FeatureBrowserGodot exportNote
SDF primitives + smooth blendsSupportedSupportedDirect GLSL ⇢ .gdshader port of your map() body.
Shadows / AOSupportedSupportedPorted into the Godot shader.
Volumetric fogSupportedNot carriedMulti-sample fog is browser-only.
N-bounce reflectionsSupportedNot carriedRequires multi-pass; Godot export is one canvas_item shader.
Subsurface scatteringSupportedNot carriedMulti-channel inward march is browser-only.
Bloom / temporal accumulationSupportedNot carriedPost pipeline runs on FBO chain — not carried into Godot.
Dynamic resolutionSupportedPartialGodot scene lets you scale render viewport at runtime.
Mesh export (STL)Supportedn/aMarching cubes on the JS side.
Standalone HTML exportSupportedn/aSingle self-contained .html — drop on any static host.

Stop guessing at the finish line.

Run a measured Ship Check against your target, fix the bottleneck it flags, and export a handoff you can defend.