From c5506e2fa78ffd711f62a7d8c99d6bed5ee3b74b Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 25 May 2026 17:43:49 +0100 Subject: [PATCH] Show spectrum field as direct SDF tubes --- .../runtime/mimir-direct-sdf-tube-spectrum.png | Bin 0 -> 61858 bytes config/mimir-spectrum-field.aquafield | 3 ++- src/Mimir.Runtime/MimirRuntime.cs | 12 +++++++++--- state/evidence.jsonl | 1 + 4 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 artifacts/runtime/mimir-direct-sdf-tube-spectrum.png diff --git a/artifacts/runtime/mimir-direct-sdf-tube-spectrum.png b/artifacts/runtime/mimir-direct-sdf-tube-spectrum.png new file mode 100644 index 0000000000000000000000000000000000000000..9a693bf26fff34db4ea9f13744fc4adeb7a50acc GIT binary patch literal 61858 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 literal 0 HcmV?d00001 diff --git a/config/mimir-spectrum-field.aquafield b/config/mimir-spectrum-field.aquafield index 02edde9..29fff25 100644 --- a/config/mimir-spectrum-field.aquafield +++ b/config/mimir-spectrum-field.aquafield @@ -7,6 +7,7 @@ surface id=curvature op=d2Fdx2 inputs=amplitude value=0,0,0,0 surface id=emission op=mix inputs=amplitude,derivative,curvature value=1.0,0.72,0.22,1.0 surface id=coverage op=sdf.tube inputs=amplitude,derivative,curvature value=0.74,0.20,0.0,0.0 -splinefield id=asioSpectrumWaterfall texture=spectrumHistory frequencyAxis=x firstColumn=0 columns=160 columnStride=1 rollingModulo=160 subdivisions=4 maxProbes=131072 density=1.0 minimumContribution=0.004 origin=-0.82,0.40,-0.18 axisStep=0.016,0.0,0.0 columnStep=0.0,-0.0055,0.0060 amplitudeScale=0.34 radius=0.052 alpha=0.94 zeroThreshold=0.68 feather=0.18 tangent=1.0 curvature=0.68 normal=0.34 derivative=0.88 emission=1.0,0.72,0.22,1.0 seed=2971668797 +splinefield id=asioSpectrumWaterfall texture=spectrumHistory frequencyAxis=x firstColumn=0 columns=160 columnStride=1 rollingModulo=160 subdivisions=4 maxProbes=131072 density=1.0 minimumContribution=0.004 origin=-0.82,0.40,-0.18 axisStep=0.016,0.0,0.0 columnStep=0.0,-0.0055,0.0060 amplitudeScale=0.34 radius=0.064 alpha=0.98 zeroThreshold=0.68 feather=0.18 tangent=1.0 curvature=0.68 normal=0.34 derivative=0.88 emission=1.0,0.72,0.22,4.0 seed=2971668797 reservoir splats=131072 updates=131072 candidates=2 seed=270943260 +direct diff --git a/src/Mimir.Runtime/MimirRuntime.cs b/src/Mimir.Runtime/MimirRuntime.cs index bf8672f..f50a46c 100644 --- a/src/Mimir.Runtime/MimirRuntime.cs +++ b/src/Mimir.Runtime/MimirRuntime.cs @@ -32,8 +32,9 @@ surface id=derivative op=dFdx inputs=amplitude value=0,0,0,0 surface id=curvature op=d2Fdx2 inputs=amplitude value=0,0,0,0 surface id=emission op=mix inputs=amplitude,derivative,curvature value=1.0,0.72,0.22,1.0 surface id=coverage op=sdf.tube inputs=amplitude,derivative,curvature value=0.74,0.20,0.0,0.0 -splinefield id=asioSpectrumWaterfall texture=spectrumHistory frequencyAxis=x firstColumn=0 columns=160 columnStride=1 rollingModulo=160 subdivisions=4 maxProbes=131072 density=1.0 minimumContribution=0.004 origin=-0.82,0.40,-0.18 axisStep=0.016,0.0,0.0 columnStep=0.0,-0.0055,0.0060 amplitudeScale=0.34 radius=0.052 alpha=0.94 zeroThreshold=0.68 feather=0.18 tangent=1.0 curvature=0.68 normal=0.34 derivative=0.88 emission=1.0,0.72,0.22,1.0 seed=2971668797 +splinefield id=asioSpectrumWaterfall texture=spectrumHistory frequencyAxis=x firstColumn=0 columns=160 columnStride=1 rollingModulo=160 subdivisions=4 maxProbes=131072 density=1.0 minimumContribution=0.004 origin=-0.82,0.40,-0.18 axisStep=0.016,0.0,0.0 columnStep=0.0,-0.0055,0.0060 amplitudeScale=0.34 radius=0.064 alpha=0.98 zeroThreshold=0.68 feather=0.18 tangent=1.0 curvature=0.68 normal=0.34 derivative=0.88 emission=1.0,0.72,0.22,4.0 seed=2971668797 reservoir splats=131072 updates=131072 candidates=2 seed=270943260 +direct """; private readonly MimirSynchronizationHub synchronization; private readonly MimirAudioSpectrumAnalyzer spectrumAnalyzer; @@ -132,10 +133,15 @@ reservoir splats=131072 updates=131072 candidates=2 seed=270943260 var channelCount = Math.Max(1, lastAudioSpectra.Count); var cameraZ = channelCount * SpectrumChannelSeparation; var bufferFieldFrame = BuildSpectrumBufferFieldFrame(); - var cameraPosition = bufferFieldFrame.HasInput + var directField = bufferFieldFrame.HasInput && !bufferFieldFrame.UseReservoirLowering; + var cameraPosition = directField + ? new Vector3(0.0f, -1.85f, 0.68f) + : bufferFieldFrame.HasInput ? new Vector3(0.0f, -13.5f, 10.5f) : new Vector3(0.0f, 0.0f, cameraZ); - var cameraTarget = bufferFieldFrame.HasInput + var cameraTarget = directField + ? new Vector3(0.0f, -0.04f, 0.08f) + : bufferFieldFrame.HasInput ? new Vector3(0.0f, 0.0f, 12.0f) : new Vector3(0.0f, 0.0f, cameraZ + 12.0f); return new AquariumFrame( diff --git a/state/evidence.jsonl b/state/evidence.jsonl index 0b3a56d..0150da4 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -118,3 +118,4 @@ {"ts": "2026-05-25T13:47:32+01:00", "type": "implementation", "status": "ok", "note": "Fensalir spline rendering now follows the XRLineRenderer-style shape: AquariumSpline3D carries Catmull-Rom subdivision plus radius/emission/alpha/zero-threshold/feather style, D3D12 expands sampled spline segments into camera-facing ribbon geometry, and D3D12SplinePS shades coverage from an SDF-like width coordinate. Mimir renders ASIO rolling mel windows through this primitive; capture artifacts/runtime/mimir-catmull-sdf-spectrum-splines.png verifies the canary-packet-trill runtime path."} {"ts": "2026-05-25T13:56:03+01:00", "type": "decision", "status": "ok", "note": "Fensalir spectrum visualization authority split: Mimir now emits AquariumBufferFieldFrame spline tube fields as the real buffer-domain contract, with tangent/curvature/normal/derivative appearance and probe policy for future compute SDF splat reservoir lowering. AquariumSplineFrame remains only the immediate Catmull-Rom preview witness until compute lowering owns rendering."} {"ts": "2026-05-25T15:55:00+01:00", "type": "decision", "status": "ok", "note": "Fensalir/Mimir spectrum visualization moved from C# spline authority to DSL-authored texture field authority. config/mimir-spectrum-field.aquafield binds a rolling spectrum texture, declares surface graph nodes, and asks for texture-dimension splinefield lowering. Fensalir now compiles Aquarium field DSL text, uploads texture samples/program packets, and ProgramMode=3 in D3D12FractalReservoirCompute emits stochastic reservoir splats from the texture field. Current canary is mechanically through the reservoir at 131072 splats with low CPU record time, but visual framing/material is still not the final beautiful spectrum surface."} +{"ts": "2026-05-25T17:43:25+01:00", "type": "decision", "status": "ok", "note": "Fensalir direct splinefield correction: texture-derived tube trails are direct SDF envelope surfaces, not point-splat fractal dust. AquariumFieldScriptCompiler supports direct; D3D12Renderer now derives AquariumSplineFrame tube-envelope trails from BufferFieldFrame texture spline programs, the spline pipeline declares triangle topology, and D3D12SplinePS writes color, metadata/control, and reservoirGuide outputs. Mimir capture artifacts/runtime/mimir-direct-sdf-tube-spectrum.png proves the DSL-authored ASIO spectrum appears through the direct SDF tube path with ~0.64 ms record CPU in the canary."}