The noise is evaluated at vec3(xz * f, c), so .z is the slope along the held constant axis. Confirmed numerically (harness/scene/gradAxis.cjs): analytic .xy matches central differences for fbm and phacelle, .z does not. Only the ray-march scene's normals were affected; the grid tier already used .xy. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
22 lines
1.6 KiB
Markdown
22 lines
1.6 KiB
Markdown
# Scene harness
|
|
|
|
Compiles, renders and times the background scene (`src/app/features/scene/`) in headless
|
|
Chromium. Not shipped, not run by CI.
|
|
|
|
node bundle.cjs <outdir> # esbuild bundle of entry.ts plus an index.html
|
|
node drive.cjs <outdir> compile # compile and link each stage, JSON report
|
|
node drive.cjs <outdir> shots <pngdir> # rest, mid pull-back and pulled-back screenshots
|
|
node gradAxis.cjs <shaders dir> # numeric check that noise gradients are (d/dx, d/dz-as-.y, ...): terrainNormal axis
|
|
node drive.cjs <outdir> measure # GPU time per pass by timer query, two viewports, two levels
|
|
node drive.cjs <outdir> variants # the same with source patches (no erosion, no tree, value-only fbm)
|
|
node drive.cjs <outdir> trace # mean trace steps per pixel and pass ms at three camera poses, PREPASS=0,1 arms
|
|
node drive.cjs <outdir> diff <pngdir> # one frozen frame with and without the prepass, pixel diff and both PNGs
|
|
node drive.cjs <outdir> phacelle # the Phacelle gradient probe behind world.ts `phacelleGradBound`
|
|
|
|
Needs `esbuild` and `playwright@1.48.2` on `NODE_PATH` and a Chromium. The first run was done on a
|
|
host with no GPU, so `drive.cjs` launches with `--use-angle=swiftshader` (software Vulkan). On a
|
|
machine with a GPU, remove those flags to measure the real device. `bundle.cjs` must run from a
|
|
directory whose ancestors hold no empty `package.json` (esbuild reads them).
|
|
|
|
Timings from SwiftShader are CPU time: use them for the split between passes and for before and
|
|
after of one change, never as a phone frame time.
|