Bind spectrum tubes to blackbody gradient

This commit is contained in:
Meta Vens 2026-05-28 14:18:38 +01:00
commit 5ffb9e8961
3 changed files with 4 additions and 3 deletions

View file

@ -639,7 +639,7 @@ static int RunFensalirFieldDslResourceSmoke()
NativeHandleKind: "native-ring");
const string source = """
resource id=spectrum key=mimir:resource:native-ring:1234
texture2d id=blackbody key=aquarium:resource:ramp:blackbody path=D:\WIP4\Projects\Aetheria\Assets\Resources\Ramps\blackbody.png format=Rgba8Unorm
texture2d id=blackbody key=aquarium:resource:ramp:blackbody path=E:\Projects\Aetheria\Assets\Resources\Gradients\blackbody.png format=Rgba8Unorm
domain id=mimir:domain:spectrum kind=RollingBuffer min=0,0,0 max=192,1,5 owner=Mimir.Runtime
tubespline id=spectrum-trail resource=spectrum domain=mimir:domain:spectrum confidence=0.94 radius=0.02 support=0.02,0.02,5 width=192 height=1 stride=4 columns=1 ramp=blackbody
""";
@ -1109,7 +1109,7 @@ static int RunMimirSpectrumUploadSmoke()
ramp.Residency == AquariumFieldResourceResidency.GpuResident &&
ramp.Access == AquariumFieldShaderAccess.ShaderResource &&
string.Equals(ramp.Format, "Rgba8Unorm", StringComparison.OrdinalIgnoreCase) &&
string.Equals(ramp.SourceUri, @"D:\WIP4\Projects\Aetheria\Assets\Resources\Ramps\blackbody.png", StringComparison.OrdinalIgnoreCase) &&
string.Equals(ramp.SourceUri, @"E:\Projects\Aetheria\Assets\Resources\Gradients\blackbody.png", StringComparison.OrdinalIgnoreCase) &&
resource.Height == expectedSourceLaneCapacity * expectedHistoryCapacity &&
matchingLowerings.All(item =>
item.ColumnCount == expectedHistoryCount &&

View file

@ -35,7 +35,7 @@ public sealed class MimirRuntime : IAquariumRuntime, IAquariumRuntimeServicesRec
private const int DefaultSpectrumSourceLaneCapacity = 8;
private const string SpectrumFieldResourceKey = "mimir:resource:spectrum:field-upload";
private const string SpectrumRampResourceKey = "aquarium:resource:ramp:blackbody";
private const string SpectrumRampTexturePath = @"D:\WIP4\Projects\Aetheria\Assets\Resources\Ramps\blackbody.png";
private const string SpectrumRampTexturePath = @"E:\Projects\Aetheria\Assets\Resources\Gradients\blackbody.png";
private readonly MimirSynchronizationHub synchronization;
private readonly MimirFensalirFieldLowering fieldLowering;
private readonly MimirAudioSpectrumAnalyzer spectrumAnalyzer;

View file

@ -211,3 +211,4 @@
{"ts": "2026-05-28T12:42:24+01:00", "type": "implementation", "status": "ok", "note": "TubeField demo now uses the reservoir/TAA guide path honestly: Fensalir's TubeField pixel shader writes stable field id plus real tube normals into metadata and coverage/confidence into reservoirGuide, so post resolve can validate history with the same spatiotemporal guide surfaces used by other field paths. Live synthetic spectrum demo log at artifacts/runtime/mimir-spectrum-reservoir-demo.log showed 4 planned TubeField packets, 0 deferred, 0 unplanned, 0 truncated."}
{"ts": "2026-05-28T12:58:22+01:00", "type": "implementation", "status": "ok", "note": "TubeField render now binds Fensalir's engine blue-noise texture and jitters the tube-local SDF sample inside the generated proxy fragment shader before writing coverage/normals/reservoir guide data. The pass also uses scene depth so opaque generated field geometry resolves by nearest surface instead of draw order. Live demo compiled and planned 4 TubeField packets with 0 deferred/0 truncated; screenshot still shows generated segment structure, so the final smooth tube marcher remains a renderer-quality cut."}
{"ts": "2026-05-28T14:00:43+01:00", "type": "decision", "status": "ok", "note": "Tube proof render now uses Blender 5.1 OCIO ACES 2.0 sRGB transform baked into Fensalir post, eight-octave Sonic Ether-style normalized bloom, and an explicit scene-state bit to disable studio background for dark proof scenes. Current proof capture is artifacts/runtime/mimir-single-tube-headless-aces2-sebloom-core-preserve.png; core/halo are close enough to continue, remaining deltas are capsule geometry/cap shading rather than tone-map authority."}
{"ts": "2026-05-28T14:17:52+01:00", "type": "implementation", "status": "ok", "note": "TubeField spectrum material now separates normalized material value from shaped Y amplitude: geometry still applies AmplitudePower for tube height, while radius, blackbody ramp coordinate, and emission use the normalized Catmull-Rom sample, so emission is normalized^2 * scale instead of a double-shaped value. Mimir now declares the live blackbody ramp from E:\\Projects\\Aetheria\\Assets\\Resources\\Gradients\\blackbody.png; spectrum upload smoke passes and the headless verification capture is artifacts/runtime/mimir-spectrum-dashboard-blackbody-material-fixed.png."}