From 583e16f5432f5be99fbbb770a9194cc2be752427 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 19 Jul 2026 02:02:52 +0100 Subject: [PATCH] Verify flow feature selection in the state smoke --- Aetheria.State.Smoke/Program.cs | 47 +++++++++++++++++++ .../Tests/DaemonRuntimeDocumentTests.cs | 39 --------------- 2 files changed, 47 insertions(+), 39 deletions(-) diff --git a/Aetheria.State.Smoke/Program.cs b/Aetheria.State.Smoke/Program.cs index bee862e33..8d06d2059 100644 --- a/Aetheria.State.Smoke/Program.cs +++ b/Aetheria.State.Smoke/Program.cs @@ -181,6 +181,53 @@ await using (var node = await AetheriaStateNode.OpenAsync(statePath, "aetheria-s throw new InvalidOperationException( $"Playable world did not publish the native camera and environment contract: {string.Join("; ", playableWorldMismatches)}"); } + var gravityFog = playableWorld.Children.Single(component => + component.Id == "aetheria.daemon.game.world.gravity-fog"); + var stardust = playableWorld.Children.Single(component => + component.Id == "aetheria.daemon.game.world.stardust"); + if (!gravityFog.Props["features"].Split(';').Contains("flow.value3d", StringComparer.Ordinal) || + !stardust.Props["features"].Split(';').Contains("flow.value3d", StringComparer.Ordinal)) + { + throw new InvalidOperationException("Aetheria's default render settings did not select smooth Value3D flow."); + } + + daemonFrame.RenderSettings = new AetheriaRuntimeDaemonRenderSettings( + default, + default, + default, + 0, + 0, + 0, + 0, + 0, + 0, + useValue3DFlow: false); + var triangleSurface = AetheriaRuntimeDaemonGameSurfaceBuilder.Build( + daemonFrame, + daemonHealth, + daemonCommandBoundary); + var triangleWorld = triangleSurface.Surface.Root.Children.Single(component => + component.Id == "aetheria.daemon.game.world"); + if (triangleWorld.Children + .Where(component => component.Id is "aetheria.daemon.game.world.gravity-fog" or "aetheria.daemon.game.world.stardust") + .Any(component => component.Props["features"].Split(';').Contains("flow.value3d", StringComparer.Ordinal))) + { + throw new InvalidOperationException("Triangle flow remained opted into the Value3D feature keyword."); + } + daemonFrame.RenderSettings = AetheriaRuntimeDaemonRenderSettings.AetheriaDefault; + + var renderAssets = AetheriaRuntimeAssets.ProjectManifest(null); + if (!renderAssets.Assets.Any(asset => + asset.Ref.AssetKey == "shader.environment.gravity-fog" && + asset.Ref.Metadata.TryGetValue("unity.volume.feature.flow.value3d.keyword", out var keyword) && + keyword == "FLOW_VALUE3D") || + !renderAssets.Assets.Any(asset => + asset.Ref.AssetKey == "compute.environment.stardust" && + asset.Ref.Metadata.TryGetValue("unity.particles.feature.flow.value3d.keyword", out var keyword) && + keyword == "FLOW_VALUE3D")) + { + throw new InvalidOperationException("Aetheria's asset catalog did not map smooth flow to FLOW_VALUE3D."); + } await node.MutableDocument(AetheriaRuntimeVerseRecordKeys.DaemonProviderAdvertisement) .ReplaceAsync(daemonProvider); await node.MutableDocument(AetheriaRuntimeVerseRecordKeys.DaemonHealth) diff --git a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs index b9f403f79..e7b136727 100644 --- a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs +++ b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs @@ -522,40 +522,6 @@ public class DaemonRuntimeDocumentTests "shader.environment.gravity-fog")); Assert.IsTrue(ContainsSurfaceProp(surface.Surface.Root, "documentSchema", AetheriaRuntimeDaemonSchemas.RenderSplatsViewport)); - var gravityFog = FindSurfaceComponent( - surface.Surface.Root, - "aetheria.daemon.game.world.gravity-fog"); - var stardust = FindSurfaceComponent( - surface.Surface.Root, - "aetheria.daemon.game.world.stardust"); - Assert.IsNotNull(gravityFog); - Assert.IsNotNull(stardust); - StringAssert.Contains("flow.value3d", gravityFog!.Props["features"]); - StringAssert.Contains("flow.value3d", stardust!.Props["features"]); - - frame.RenderSettings = new AetheriaRuntimeDaemonRenderSettings( - default, - default, - default, - 0, - 0, - 0, - 0, - 0, - 0, - useValue3DFlow: false); - var triangleSurface = AetheriaRuntimeDaemonGameSurfaceBuilder.Build( - frame, - new AetheriaRuntimeDaemonHealthDocument(), - AetheriaRuntimeDaemonCommandBoundaryDocument.Create("test-daemon")); - var triangleFog = FindSurfaceComponent( - triangleSurface.Surface.Root, - "aetheria.daemon.game.world.gravity-fog"); - var triangleStardust = FindSurfaceComponent( - triangleSurface.Surface.Root, - "aetheria.daemon.game.world.stardust"); - StringAssert.DoesNotContain("flow.value3d", triangleFog!.Props["features"]); - StringAssert.DoesNotContain("flow.value3d", triangleStardust!.Props["features"]); Assert.IsFalse(ContainsSurfaceValueFragment(surface.Surface.Root, "_Nebula"), "The semantic Eve surface must not own Unity shader property names."); Assert.AreEqual(EveEntitySoaViewDocument.SchemaId, portable.Schema); @@ -830,13 +796,8 @@ public class DaemonRuntimeDocumentTests asset.Ref.Metadata["unity.volume.matrixPort.cameraToWorld"] == "_CamToWorld" && asset.Ref.Metadata["unity.volume.quality.bootstrap"] == "ultra" && asset.Ref.Metadata["unity.volume.quality.ultra.keyword"] == "ULTRA_QUALITY" && - asset.Ref.Metadata["unity.volume.feature.flow.value3d.keyword"] == "FLOW_VALUE3D" && !asset.Ref.Metadata.ContainsKey("unity.volume.pass.temporal") && !asset.Ref.Metadata.ContainsKey("unity.volume.texturePort.history"))); - Assert.IsTrue(assetManifest.Assets.Any(asset => - asset.Ref.AssetKey == "compute.environment.stardust" && - asset.Ref.Kind == AetheriaRuntimeAssetKinds.ComputeShader && - asset.Ref.Metadata["unity.particles.feature.flow.value3d.keyword"] == "FLOW_VALUE3D")); Assert.IsTrue(assetManifest.Assets.Any(asset => asset.Ref.AssetKey == "texture.environment.volume-dither" && asset.Ref.Kind == AetheriaRuntimeAssetKinds.Texture));