Capture settled HD temporal witness
This commit is contained in:
parent
16199126dd
commit
b25d914049
4 changed files with 54 additions and 16 deletions
|
|
@ -638,7 +638,9 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests
|
|||
}
|
||||
Assert.That(mapRenderers, Is.Not.Empty, "The live provider prefab has no renderer assigned to its advertised map channel.");
|
||||
|
||||
target = new RenderTexture(640, 360, 24, RenderTextureFormat.ARGB32);
|
||||
const int captureWidth = 1280;
|
||||
const int captureHeight = 720;
|
||||
target = new RenderTexture(captureWidth, captureHeight, 24, RenderTextureFormat.ARGB32);
|
||||
camera.targetTexture = target;
|
||||
var cameraRig = cameraObject.AddComponent<EveUnityPlayableWorldCameraRig>();
|
||||
cameraRig.Host = host;
|
||||
|
|
@ -697,11 +699,22 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests
|
|||
var mapCamera = mapCameraObject.AddComponent<Camera>();
|
||||
mapCamera.cullingMask = 1 << mapLayer;
|
||||
Assert.That(mapCamera.cullingMask, Is.EqualTo(1 << mapLayer));
|
||||
yield return null;
|
||||
var captureFieldVolume = root.GetComponent<EveUnityFieldsVolumeRenderer>();
|
||||
Assert.That(captureFieldVolume, Is.Not.Null,
|
||||
"The generic client did not install its Fields volume lowerer before temporal settling.");
|
||||
const int temporalSettlingFrames = 128;
|
||||
var initialCompositeCount = captureFieldVolume.CompositeCount;
|
||||
var temporalSettlingDeadline = Time.realtimeSinceStartup + 20f;
|
||||
while (captureFieldVolume.CompositeCount - initialCompositeCount < temporalSettlingFrames &&
|
||||
Time.realtimeSinceStartup < temporalSettlingDeadline)
|
||||
yield return null;
|
||||
Assert.That(captureFieldVolume.CompositeCount - initialCompositeCount,
|
||||
Is.GreaterThanOrEqualTo(temporalSettlingFrames),
|
||||
"The pilot capture ran before the advertised temporal reconstruction had settled.");
|
||||
camera.Render();
|
||||
RenderTexture.active = target;
|
||||
pixels = new Texture2D(640, 360, TextureFormat.RGB24, false);
|
||||
pixels.ReadPixels(new Rect(0, 0, 640, 360), 0, 0);
|
||||
pixels = new Texture2D(captureWidth, captureHeight, TextureFormat.RGB24, false);
|
||||
pixels.ReadPixels(new Rect(0, 0, captureWidth, captureHeight), 0, 0);
|
||||
pixels.Apply();
|
||||
var pilotChangedPixels = CountChangedPixels(pixels, camera.backgroundColor);
|
||||
MeasureLuminance(pixels, out var pilotAverageLuminance, out var pilotBrightPixelCount);
|
||||
|
|
@ -749,7 +762,7 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests
|
|||
Assert.That(particleMapCameraIsolated, Is.True,
|
||||
"The map camera executed the pilot-only field-particle pass.");
|
||||
RenderTexture.active = target;
|
||||
pixels.ReadPixels(new Rect(0, 0, 640, 360), 0, 0);
|
||||
pixels.ReadPixels(new Rect(0, 0, captureWidth, captureHeight), 0, 0);
|
||||
pixels.Apply();
|
||||
var mapChangedPixels = CountChangedPixels(pixels, mapCamera.backgroundColor);
|
||||
Assert.That(mapChangedPixels, Is.GreaterThan(25), "The map-only camera rendered no provider-authored map glyph pixels.");
|
||||
|
|
|
|||
|
|
@ -638,7 +638,9 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests
|
|||
}
|
||||
Assert.That(mapRenderers, Is.Not.Empty, "The live provider prefab has no renderer assigned to its advertised map channel.");
|
||||
|
||||
target = new RenderTexture(640, 360, 24, RenderTextureFormat.ARGB32);
|
||||
const int captureWidth = 1280;
|
||||
const int captureHeight = 720;
|
||||
target = new RenderTexture(captureWidth, captureHeight, 24, RenderTextureFormat.ARGB32);
|
||||
camera.targetTexture = target;
|
||||
var cameraRig = cameraObject.AddComponent<EveUnityPlayableWorldCameraRig>();
|
||||
cameraRig.Host = host;
|
||||
|
|
@ -697,11 +699,22 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests
|
|||
var mapCamera = mapCameraObject.AddComponent<Camera>();
|
||||
mapCamera.cullingMask = 1 << mapLayer;
|
||||
Assert.That(mapCamera.cullingMask, Is.EqualTo(1 << mapLayer));
|
||||
yield return null;
|
||||
var captureFieldVolume = root.GetComponent<EveUnityFieldsVolumeRenderer>();
|
||||
Assert.That(captureFieldVolume, Is.Not.Null,
|
||||
"The generic client did not install its Fields volume lowerer before temporal settling.");
|
||||
const int temporalSettlingFrames = 128;
|
||||
var initialCompositeCount = captureFieldVolume.CompositeCount;
|
||||
var temporalSettlingDeadline = Time.realtimeSinceStartup + 20f;
|
||||
while (captureFieldVolume.CompositeCount - initialCompositeCount < temporalSettlingFrames &&
|
||||
Time.realtimeSinceStartup < temporalSettlingDeadline)
|
||||
yield return null;
|
||||
Assert.That(captureFieldVolume.CompositeCount - initialCompositeCount,
|
||||
Is.GreaterThanOrEqualTo(temporalSettlingFrames),
|
||||
"The pilot capture ran before the advertised temporal reconstruction had settled.");
|
||||
camera.Render();
|
||||
RenderTexture.active = target;
|
||||
pixels = new Texture2D(640, 360, TextureFormat.RGB24, false);
|
||||
pixels.ReadPixels(new Rect(0, 0, 640, 360), 0, 0);
|
||||
pixels = new Texture2D(captureWidth, captureHeight, TextureFormat.RGB24, false);
|
||||
pixels.ReadPixels(new Rect(0, 0, captureWidth, captureHeight), 0, 0);
|
||||
pixels.Apply();
|
||||
var pilotChangedPixels = CountChangedPixels(pixels, camera.backgroundColor);
|
||||
MeasureLuminance(pixels, out var pilotAverageLuminance, out var pilotBrightPixelCount);
|
||||
|
|
@ -749,7 +762,7 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests
|
|||
Assert.That(particleMapCameraIsolated, Is.True,
|
||||
"The map camera executed the pilot-only field-particle pass.");
|
||||
RenderTexture.active = target;
|
||||
pixels.ReadPixels(new Rect(0, 0, 640, 360), 0, 0);
|
||||
pixels.ReadPixels(new Rect(0, 0, captureWidth, captureHeight), 0, 0);
|
||||
pixels.Apply();
|
||||
var mapChangedPixels = CountChangedPixels(pixels, mapCamera.backgroundColor);
|
||||
Assert.That(mapChangedPixels, Is.GreaterThan(25), "The map-only camera rendered no provider-authored map glyph pixels.");
|
||||
|
|
|
|||
|
|
@ -41,6 +41,18 @@ effectively unchanged while mean neighboring-pixel variation falls from
|
|||
to `0.0531`. This proves the temporal history is accumulating and that its
|
||||
bootstrap seed mattered. The remaining cyan/tonemap mismatch is still open.
|
||||
|
||||
The cold HD witness in `artifacts/aetheria-daemon-fog-alpha-cold-hd` then
|
||||
transfers the rebuilt 56,168,970-byte provider bundle
|
||||
`a829e57731fbe08f4564fa131468148e99f6b4204708ad3e64498885532b5091`
|
||||
through `SharedFileMapping` and captures after 128 temporal composites at
|
||||
1280x720. It restores the historical fog history ABI: the temporal pass stores
|
||||
density directly in alpha, so the composite consumes that density directly
|
||||
instead of decoding it as the raymarch pass's packed distance/density payload.
|
||||
The flat grey opacity slabs disappear. The released client test passes in 52.7
|
||||
seconds with 238 fog composites and Stardust draws; the pilot camera still
|
||||
excludes map renderers and the map camera includes them. Remaining visual work
|
||||
is color/composition parity, not broken fog opacity or an unsettled witness.
|
||||
|
||||
Current released-package evidence is in
|
||||
`artifacts/aetheria-daemon-mapped-body-cold`; despite that retained directory
|
||||
name, `runtime-witness.warm.json` is the current passing run. The warm PlayMode test
|
||||
|
|
|
|||
|
|
@ -346,8 +346,8 @@ try {
|
|||
assertions = $facts
|
||||
receipts = @($facts.receipts)
|
||||
screenshotMetrics = [ordered]@{
|
||||
width = 640
|
||||
height = 360
|
||||
width = 1280
|
||||
height = 720
|
||||
encodedSizeBytes = $capture.Length
|
||||
sha256 = (Get-FileHash -LiteralPath $capture.FullName -Algorithm SHA256).Hash.ToLowerInvariant()
|
||||
mapEncodedSizeBytes = $mapCapture.Length
|
||||
|
|
@ -360,16 +360,16 @@ try {
|
|||
path = $capture.Name
|
||||
sha256 = (Get-FileHash -LiteralPath $capture.FullName -Algorithm SHA256).Hash.ToLowerInvariant()
|
||||
sizeBytes = $capture.Length
|
||||
width = 640
|
||||
height = 360
|
||||
width = 1280
|
||||
height = 720
|
||||
},
|
||||
[ordered]@{
|
||||
kind = "unity-map-channel-png"
|
||||
path = $mapCapture.Name
|
||||
sha256 = (Get-FileHash -LiteralPath $mapCapture.FullName -Algorithm SHA256).Hash.ToLowerInvariant()
|
||||
sizeBytes = $mapCapture.Length
|
||||
width = 640
|
||||
height = 360
|
||||
width = 1280
|
||||
height = 720
|
||||
},
|
||||
[ordered]@{
|
||||
kind = "unity-test-results"
|
||||
|
|
|
|||
Reference in a new issue