Pin released client to entity-forward camera

This commit is contained in:
Meta Vens 2026-07-15 21:40:16 +01:00
commit 9799dbe9fe
6 changed files with 37 additions and 31 deletions

View file

@ -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))

View file

@ -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": [

View file

@ -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",

View file

@ -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))

View file

@ -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.

View file

@ -13,7 +13,7 @@ param(
)
$ErrorActionPreference = "Stop"
$expectedEveUnityCommit = "de580fe88350f422e30f1e4b64ded5c33070b118"
$expectedEveUnityCommit = "35ff288aabc03130a61228579f1b09bac4345b5c"
$expectedEveFieldsCommit = "382a23d8f8a07e4b5eef5f81f84655861a858367"
$expectedEveUnityUiToolkitCommit = "4d0cbe0185bdc4fc65eb63503a7c5cb578539669"
$expectedCultLibCommit = "feb5c71513e71d681699f462fe3682b3168c6f73"