diff --git a/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs b/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs index 75f12a9..d2dd834 100644 --- a/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs +++ b/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs @@ -591,12 +591,13 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests aimDotDistance = Vector3.Distance(playerMarker.transform.position, aimRenderer.ViewDotPosition); Assert.That(aimDotDistance, Is.GreaterThanOrEqualTo(49.9f)); Assert.That(camera.cullingMask & (1 << mapLayer), Is.Zero); - Assert.That(runtime.ActiveWorld.CameraDistance, Is.EqualTo(70f).Within(0.001f)); + Assert.That(runtime.ActiveWorld.CameraRig, Is.EqualTo("perspective.entity-forward-follow.v1")); + Assert.That(runtime.ActiveWorld.CameraDistance, Is.EqualTo(30f).Within(0.001f)); Assert.That(camera.fieldOfView, Is.EqualTo(60f).Within(0.001f)); - Assert.That(runtime.ActiveWorld.CameraPositionDamping, Is.EqualTo(2f).Within(0.001f)); + Assert.That(runtime.ActiveWorld.CameraPositionDamping, Is.EqualTo(0f).Within(0.001f)); var playerViewport = camera.WorldToViewportPoint(playerMarker.transform.position); - Assert.That(playerViewport.x, Is.EqualTo(0.66f).Within(0.01f)); - Assert.That(playerViewport.y, Is.EqualTo(0.55f).Within(0.01f)); + Assert.That(playerViewport.x, Is.EqualTo(0.64f).Within(0.01f)); + Assert.That(playerViewport.y, Is.EqualTo(0.81f).Within(0.01f)); MeasureViewportCoverage(camera, playerRenderers, out var playerViewportWidth, out var playerViewportHeight); var playerRendererFacts = playerRenderers .Select(renderer => RendererFact.From(camera, renderer)) diff --git a/ReleaseConsumerProject/Packages/manifest.json b/ReleaseConsumerProject/Packages/manifest.json index f214dae..9b8f7a6 100644 --- a/ReleaseConsumerProject/Packages/manifest.json +++ b/ReleaseConsumerProject/Packages/manifest.json @@ -9,7 +9,7 @@ "org.gamecult.cultlib": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.13", "org.gamecult.eve.plugin-fields": "https://github.com/GameCult/EvePlugins.git?path=/plugins/eve-plugin-fields/unity/org.gamecult.eve.plugin-fields#eve-plugin-fields-unity-v0.2.0", "org.gamecult.eve.surface": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.surface#eveunity-surface-v0.2.2", - "org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.38", + "org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.39", "org.gamecult.eve.unity-uitoolkit": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-uitoolkit#eveunity-uitoolkit-v0.1.1" }, "testables": [ diff --git a/ReleaseConsumerProject/Packages/packages-lock.json b/ReleaseConsumerProject/Packages/packages-lock.json index c08b7c2..b4362f2 100644 --- a/ReleaseConsumerProject/Packages/packages-lock.json +++ b/ReleaseConsumerProject/Packages/packages-lock.json @@ -144,7 +144,7 @@ "hash": "140e1bd963a0033e66777a3b2c5fe6e9c97dfe32" }, "org.gamecult.eve.unity-scene": { - "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.38", + "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.39", "depth": 0, "source": "git", "dependencies": { @@ -154,7 +154,7 @@ "com.unity.mathematics": "1.3.2", "com.unity.modules.particlesystem": "1.0.0" }, - "hash": "de580fe88350f422e30f1e4b64ded5c33070b118" + "hash": "35ff288aabc03130a61228579f1b09bac4345b5c" }, "org.gamecult.eve.unity-uitoolkit": { "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-uitoolkit#eveunity-uitoolkit-v0.1.1", diff --git a/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs b/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs index 75f12a9..d2dd834 100644 --- a/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs +++ b/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs @@ -591,12 +591,13 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests aimDotDistance = Vector3.Distance(playerMarker.transform.position, aimRenderer.ViewDotPosition); Assert.That(aimDotDistance, Is.GreaterThanOrEqualTo(49.9f)); Assert.That(camera.cullingMask & (1 << mapLayer), Is.Zero); - Assert.That(runtime.ActiveWorld.CameraDistance, Is.EqualTo(70f).Within(0.001f)); + Assert.That(runtime.ActiveWorld.CameraRig, Is.EqualTo("perspective.entity-forward-follow.v1")); + Assert.That(runtime.ActiveWorld.CameraDistance, Is.EqualTo(30f).Within(0.001f)); Assert.That(camera.fieldOfView, Is.EqualTo(60f).Within(0.001f)); - Assert.That(runtime.ActiveWorld.CameraPositionDamping, Is.EqualTo(2f).Within(0.001f)); + Assert.That(runtime.ActiveWorld.CameraPositionDamping, Is.EqualTo(0f).Within(0.001f)); var playerViewport = camera.WorldToViewportPoint(playerMarker.transform.position); - Assert.That(playerViewport.x, Is.EqualTo(0.66f).Within(0.01f)); - Assert.That(playerViewport.y, Is.EqualTo(0.55f).Within(0.01f)); + Assert.That(playerViewport.x, Is.EqualTo(0.64f).Within(0.01f)); + Assert.That(playerViewport.y, Is.EqualTo(0.81f).Within(0.01f)); MeasureViewportCoverage(camera, playerRenderers, out var playerViewportWidth, out var playerViewportHeight); var playerRendererFacts = playerRenderers .Select(renderer => RendererFact.From(camera, renderer)) diff --git a/docs/aetheria-released-package-witness.md b/docs/aetheria-released-package-witness.md index 0bc6f5a..235c136 100644 --- a/docs/aetheria-released-package-witness.md +++ b/docs/aetheria-released-package-witness.md @@ -4,8 +4,8 @@ The warm-cache released-package witness passes with: -- `org.gamecult.eve.unity-scene` `0.3.38`, commit - `de580fe88350f422e30f1e4b64ded5c33070b118`; +- `org.gamecult.eve.unity-scene` `0.3.39`, commit + `35ff288aabc03130a61228579f1b09bac4345b5c`; - `org.gamecult.eve.plugin-fields` `0.2.0`, commit `382a23d8f8a07e4b5eef5f81f84655861a858367`; - `org.gamecult.eve.surface` `0.2.2`, commit @@ -17,7 +17,7 @@ The warm-cache released-package witness passes with: - the generic `ReleaseConsumerProject` client connected directly to the Aetheria daemon. -Evidence is in `artifacts/aetheria-daemon-gravity-fog-warm`. The PlayMode test +Evidence is in `artifacts/aetheria-daemon-gravity-fog-forward`. The PlayMode test passed and recorded provider-owned reconciled movement, look, targeting, tractor press, tractor release, contact-gated cargo collection, and action receipts. The daemon-owned look direction reached the SoA body rotation, @@ -28,10 +28,12 @@ active camera rig's leased Unity environment. The witness supplies no client-authored light. Aetheria advertises the key-light direction, color, and intensity; the generic camera rig lowers that contract to the only live directional light (`0.75` intensity). -Aetheria also advertises the original `ARPG.unity` follow-camera composition: -`70` unit distance, `60` degree vertical field of view, target screen position -`0.66,0.55`, and position damping `2`. The generic camera rig lowers those -values without Aetheria-specific camera code. +Aetheria also advertises the original undocked `ARPG.unity` Third Person Rig: +entity-forward perspective follow, `30` unit distance, `60` degree vertical +field of view, target screen position `0.64,0.81`, zero position damping, and +`1`-`4096` clip planes. The generic camera rig lowers those values without +Aetheria-specific camera code. The distinct `70` unit Docked Rig no longer +incorrectly owns the flight view. Aetheria's pilot surface also publishes a transparent cockpit overlay. The released generic UI Toolkit lowerer produced seven native `ProgressBar` elements for hull, shield, capacitor, weapon cooldown, target lock, and target state. Daemon frame, @@ -46,7 +48,7 @@ Fields splat layers. Its surface contract contains logical ports such as names or pass indices. The selected `unity-scene` provider asset variant owns that concrete shader ABI through `unity.volume.*` metadata. The released generic lowerer resolved the provider shader and dither texture, rasterized all -four layers, and composited `22` pilot-camera frames from daemon frame `224`. +four layers, and composited `22` pilot-camera frames from daemon frame `226`. The provider variant advertises the fossil shader's raymarch, temporal-history, and composite passes plus their logical ports. EveUnity allocates and resets the history targets generically; a partial temporal ABI fails closed. @@ -60,11 +62,11 @@ daemon lock progress `1.0`; Unity does not manufacture or smooth that value. Camera-channel facts: - provider-authored player renderers: `13`, including the lowered tractor effect; -- pilot changed pixels: `230,310`; -- pilot average luminance: `0.0524399`; -- pilot bright pixels: `1,731`; +- pilot changed pixels: `230,400`; +- pilot average luminance: `0.1889651`; +- pilot bright pixels: `13,302`; - map-channel renderers: `11`; -- map changed pixels: `4,937`; +- map changed pixels: `4,213`; - native cockpit progress bars: `7`; - daemon tractor power at capture: `1.0` after the held input completed its authored ramp; @@ -80,12 +82,14 @@ Camera-channel facts: - the map camera renders exactly the advertised map layer. Visual inspection confirms that map glyphs are absent from the pilot frame and -present in the map-only frame. The volume lifecycle is active, but the pilot -frame remains nearly black and geometric; it does not yet reproduce the fossil's -blue gravity-shaped fog sea. This is transport and lowering proof, not visual -parity. The next provider-side diagnosis must inspect published tint/height -field values, exposure/composition, camera depth, and the fossil tuning. EveUnity -must not compensate with Aetheria-specific lighting or fog rules. +present in the map-only frame. Correcting the fossil camera mode removed the +false top-down dark disk, but the active volume now resolves as a nearly uniform +saturated orange horizon rather than the fossil's blue gravity-shaped fog sea. +This is transport and lowering proof, not visual parity. The first concrete ABI +divergence is that the fossil derives dither sampling coordinates from the +render target and dither texture dimensions while the current surface supplies +zeroes. That lifecycle input must be lowered generically; EveUnity must not +compensate with Aetheria-specific lighting or fog rules. Substance is not part of this path; later texture baking belongs in Blender. Aetheria currently bundles ambientCG's 1K `Metal012` color, normal, and metalness maps under CC0. The same pre-generated maps now replace dead @@ -119,7 +123,7 @@ an Aetheria-specific beam. Primary artifacts: - `results.xml`: one passing PlayMode witness; -- `runtime-witness.warm.json`: package, content, receipt, aim, combat, and +- `runtime-witness.json`: package, content, receipt, aim, combat, and camera facts; - `aetheria-daemon-world.png`: pilot-camera capture; - `aetheria-daemon-map.png`: map-only capture. diff --git a/scripts/run-aetheria-daemon-world-witness.ps1 b/scripts/run-aetheria-daemon-world-witness.ps1 index 750122b..110a91c 100644 --- a/scripts/run-aetheria-daemon-world-witness.ps1 +++ b/scripts/run-aetheria-daemon-world-witness.ps1 @@ -13,7 +13,7 @@ param( ) $ErrorActionPreference = "Stop" -$expectedEveUnityCommit = "de580fe88350f422e30f1e4b64ded5c33070b118" +$expectedEveUnityCommit = "35ff288aabc03130a61228579f1b09bac4345b5c" $expectedEveFieldsCommit = "382a23d8f8a07e4b5eef5f81f84655861a858367" $expectedEveUnityUiToolkitCommit = "4d0cbe0185bdc4fc65eb63503a7c5cb578539669" $expectedCultLibCommit = "feb5c71513e71d681699f462fe3682b3168c6f73"