Prove released Stardust temporal inputs

This commit is contained in:
Meta Vens 2026-07-16 18:17:02 +01:00
commit 79c4332c6a
6 changed files with 48 additions and 6 deletions

View file

@ -808,6 +808,22 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests
particleAbiError);
Assert.That(fieldParticles.ProgramReady, Is.True,
"The generic field-particle lowerer rejected the advertised provider ABI or assets.");
var liveParticleMaterial = typeof(EveUnityFieldsParticleRenderer)
.GetField("_material", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
?.GetValue(fieldParticles) as Material;
Assert.That(liveParticleMaterial, Is.Not.Null);
var ditherTextureProperty = particleMaterialMetadata["unity.particles.texturePort.dither"];
var ditherCoordinatesProperty = particleMaterialMetadata["unity.particles.vectorPort.ditherCoordinates"];
var renderFrameProperty = particleMaterialMetadata["unity.particles.intPort.frameIndex"];
var liveDitherTexture = liveParticleMaterial.GetTexture(ditherTextureProperty);
Assert.That(liveDitherTexture, Is.Not.Null,
"The generic lowerer did not bind the advertised provider dither texture.");
Assert.That(liveParticleMaterial.GetVector(ditherCoordinatesProperty).x,
Is.EqualTo((float)camera.pixelWidth / liveDitherTexture.width).Within(0.0001f));
Assert.That(liveParticleMaterial.GetVector(ditherCoordinatesProperty).y,
Is.EqualTo((float)camera.pixelHeight / liveDitherTexture.height).Within(0.0001f));
Assert.That(liveParticleMaterial.GetInt(renderFrameProperty), Is.GreaterThan(0),
"The generic lowerer did not advance the advertised render-frame port.");
Assert.That(fieldParticles.PresentedFrameId, Is.GreaterThanOrEqualTo(0));
Assert.That(fieldParticles.ParticleCount, Is.EqualTo(65536));
Assert.That(fieldParticles.DispatchCount, Is.GreaterThan(0));

View file

@ -9,7 +9,7 @@
"org.gamecult.cultlib": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.15",
"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.3",
"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.56",
"org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.57",
"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.56",
"version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.57",
"depth": 0,
"source": "git",
"dependencies": {
@ -155,7 +155,7 @@
"com.unity.render-pipelines.universal": "17.4.0",
"com.unity.modules.particlesystem": "1.0.0"
},
"hash": "dfa843cde2c0d9328bb2fa342c9378bf3cdfe6f4"
"hash": "0974154fa7c7982c9a8ea0ca006d2698a53e1235"
},
"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

@ -808,6 +808,22 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests
particleAbiError);
Assert.That(fieldParticles.ProgramReady, Is.True,
"The generic field-particle lowerer rejected the advertised provider ABI or assets.");
var liveParticleMaterial = typeof(EveUnityFieldsParticleRenderer)
.GetField("_material", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
?.GetValue(fieldParticles) as Material;
Assert.That(liveParticleMaterial, Is.Not.Null);
var ditherTextureProperty = particleMaterialMetadata["unity.particles.texturePort.dither"];
var ditherCoordinatesProperty = particleMaterialMetadata["unity.particles.vectorPort.ditherCoordinates"];
var renderFrameProperty = particleMaterialMetadata["unity.particles.intPort.frameIndex"];
var liveDitherTexture = liveParticleMaterial.GetTexture(ditherTextureProperty);
Assert.That(liveDitherTexture, Is.Not.Null,
"The generic lowerer did not bind the advertised provider dither texture.");
Assert.That(liveParticleMaterial.GetVector(ditherCoordinatesProperty).x,
Is.EqualTo((float)camera.pixelWidth / liveDitherTexture.width).Within(0.0001f));
Assert.That(liveParticleMaterial.GetVector(ditherCoordinatesProperty).y,
Is.EqualTo((float)camera.pixelHeight / liveDitherTexture.height).Within(0.0001f));
Assert.That(liveParticleMaterial.GetInt(renderFrameProperty), Is.GreaterThan(0),
"The generic lowerer did not advance the advertised render-frame port.");
Assert.That(fieldParticles.PresentedFrameId, Is.GreaterThanOrEqualTo(0));
Assert.That(fieldParticles.ParticleCount, Is.EqualTo(65536));
Assert.That(fieldParticles.DispatchCount, Is.GreaterThan(0));

View file

@ -118,7 +118,7 @@ present in the map-only frame. This is transport, authority, field-production,
and lowering proof, not visual parity: the current pilot capture contains the
blue fog field and provider geometry, but nearby ships remain too dark and the
celestial composition lacks the fossil capture's readable close body. Release
`0.3.56` includes generic lowering for Eve Fields `0.2.3`'s
`0.3.57` includes generic lowering for Eve Fields `0.2.3`'s
`AnimatedRadialCosine` source alongside `PowerPulse`, dither-scale,
temporal-history, and finite-look-at semantics. Aetheria publishes the fossil
global animated simplex/cellular/ambient producer stack, body-owned radial wave
@ -132,7 +132,7 @@ delivery. Color, lighting, patch structure, readable world geometry, and
gravity-wave visual parity remain open. EveUnity must not compensate with
Aetheria-specific lighting or fog rules.
The `0.3.56` run also closes two camera-contract omissions. Aetheria advertises
The `0.3.57` run also closes two camera-contract omissions. Aetheria advertises
the fossil pilot camera's neutral temporal-reprojection values; the released
generic lowerer applies URP TAA with `0.99` history blend, `0.1` jitter scale,
high quality, and zero sharpening. Fog and Stardust now consume one generic
@ -141,6 +141,16 @@ document independently. The live witness fails unless their snapped grid
centers are identical; this run resolved both to `(-6,-6)` after movement.
The capture is still visibly rough and is not a visual-parity claim.
The fossil Stardust material used a screen-space coverage mask that changes on
every rendered frame and depends on TAA to reconstruct stable subpixel stars.
The earlier URP port had replaced that with a fixed alpha threshold and
additive blending. Aetheria now advertises the provider dither texture,
viewport scale, and logical render-frame port; generic EveUnity binds them
without knowing their product meaning. The live witness resolves those native
ports from provider metadata and checks the actual material instance. The
provider bundle source gate requires the temporal clip, overwrite blend, and
depth write and rejects `_AlphaClip`.
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

View file

@ -13,7 +13,7 @@ param(
)
$ErrorActionPreference = "Stop"
$expectedEveUnityCommit = "dfa843cde2c0d9328bb2fa342c9378bf3cdfe6f4"
$expectedEveUnityCommit = "0974154fa7c7982c9a8ea0ca006d2698a53e1235"
$expectedEveFieldsCommit = "c5a4a75c1b727499b16c2dae1895f29e2a9f72f0"
$expectedEveUnityUiToolkitCommit = "4d0cbe0185bdc4fc65eb63503a7c5cb578539669"
$expectedCultLibCommit = "419053ebe2325848051c4f4d8ba352cd4286c424"