docs(vm3): closeout - owner gate brief with the measured curve table; #422 filed; tests pin the shipped defaults
Opus narrow re-review of 51178f7c: APPROVE. Residuals closed: the AR plan
no longer says '<=1 LSB' unqualified (99.99% of pixels; 95 foliage-
silhouette pixels up to 73 LSB, 58 isolated); the campaign doc says the
same; AtmosphericColorPipelineTests now read the SHIPPED exposure/vignette
defaults from BuiltInAtmosphericRenderPack.Descriptor and the graph's named
DefaultVignetteStrengthFallback instead of literals.
Measured for the gate (offline Holtburg hillside, High defaults vs pack
off): mean luminance -17% noon, -44% dusk, p95 unchanged, clip 0.06% both;
neutral High vs pack off: 110,561 px at |d|=1, 95 at >=5 (foliage edges).
Evidence images under docs/research/evidence/vm3/.
#422 filed: one High-default offline capture exited with
STATUS_HEAP_CORRUPTION after a clean managed shutdown; 1 in 8 runs, never
under validation layers. VM7 gate item.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
51178f7c77
commit
a0157693ec
7 changed files with 111 additions and 8 deletions
|
|
@ -151,10 +151,34 @@ public sealed class AtmosphericColorPipelineTests
|
|||
// strength of 0.12 would now produce. See the "vignette-strength"
|
||||
// comment in BuiltInAtmosphericRenderPack.cs for the full
|
||||
// derivation.
|
||||
const float VignetteStrengthDefault = 0.245f;
|
||||
// Read the SHIPPED declaration so the test pins the product, not a copy.
|
||||
float VignetteStrengthDefault = ShippedDefault("vignette-strength");
|
||||
Assert.Equal(0.245f, VignetteStrengthDefault, 3);
|
||||
float cornerMultiplier = 1f - VignetteStrengthDefault;
|
||||
Vector3 displayed = AtmosphericColorPipeline.Encode(
|
||||
new Vector3(cornerMultiplier, cornerMultiplier, cornerMultiplier));
|
||||
Assert.InRange(displayed.X, 0.88f - 0.005f, 0.88f + 0.005f);
|
||||
}
|
||||
private static float ShippedDefault(string settingId)
|
||||
{
|
||||
AcDream.Plugin.Abstractions.Rendering.RenderSettingDeclaration declaration =
|
||||
Assert.Single(
|
||||
AcDream.App.Rendering.Packs.BuiltInAtmosphericRenderPack.Descriptor.Settings,
|
||||
s => s.Id == settingId);
|
||||
return float.Parse(
|
||||
declaration.DefaultValue,
|
||||
System.Globalization.CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ShippedExposureDefaultIsTheDerivedMidtoneValue()
|
||||
{
|
||||
// 0.80 is the value whose linear-light result reproduces the accepted
|
||||
// mid-grey (see BuiltInAtmosphericRenderPack "exposure" derivation).
|
||||
Assert.Equal(0.80f, ShippedDefault("exposure"), 3);
|
||||
Assert.Equal(
|
||||
0.245f,
|
||||
AcDream.App.Rendering.Packs.AtmosphericPostProcessGraph.DefaultVignetteStrengthFallback, 3);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue