✦ SPIELWELTENMoto Racer - Rampage ↗

Paired native albedo diagnosis

-rampageAlbedoQA is an explicit diagnostic-only addition to CampaignQA. It requires both -rampageCampaignQA and -rampageTest, the isolated QA application/profile, actual HDRP rendering and screenshots. No UI, app, bike, material, light, route or Rigidbody implementation is changed by the capture helper. Ordinary campaign runs without this flag retain ordinary screenshots.

Why a separate build is required

The installed package is HDRP 17.3.0, cache 700710090fa9. Its public APIs are:

HDRenderPipeline.debugDisplaySettings
DebugDisplaySettings.SetDebugViewCommonMaterialProperty(
    UnityEngine.Rendering.HighDefinition.Attributes.MaterialSharedProperty.Albedo)

HDRPBuildData.cs computes debug stripping as !isDevelopmentBuild || ShaderStrippingSetting.stripRuntimeDebugShaders. HDRPPreprocessShaders.cs removes DEBUG_DISPLAY variants when stripped unless runtime AOV support was explicitly enabled. The production HDRP asset has supportRuntimeAOVAPI: 0. Therefore this helper refuses a Release player or a player reporting stripped debug shaders; it does not produce misleading normal images and label them albedo.

The separate AlbedoDiagnosticBuild.Run editor entry point creates a Development Build at Builds/Diagnostics/Albedo/Rampage.exe, temporarily sets stripRuntimeDebugShaders=false, and restores the production settings in finally. The regular Windows release path/settings remain separate. Tools/campaign-test.ps1 -DiagnosticAlbedo selects that build and records its actual assembly hash.

No private HDRP reflection is used in the runtime implementation. The offline proof records hashes of the exact installed API and shader-stripper sources.

Capture positions and state

The run is bounded to one selected stage, one pass and three image pairs. Default diagnostic stage/pass are alps-01/1; explicit incompatible stage/pass counts fail. Normal campaign setup still records unlock seeding and preserves production profiles in campaign-report.json.

At 6%, 48% and 85% of actual verified driving distance, the helper waits for the production frame to finish. It records the current MainCamera position, rotation, FOV, near/far planes, projection matrix and framebuffer dimensions, plus actual body position/velocity and race distance/time. It uses no reconstructed or invented photo pose.

For that pair only, simulation time is set to zero and the existing RideCamera/CinemachineBrain are disabled. No Rigidbody position, rotation, velocity, collision state or material/light property is assigned. The completed normal framebuffer is saved, the HDRP shared Albedo view is enabled, and three real MainCamera renders are awaited before the albedo framebuffer is saved. The helper rejects camera/frustum/dimension drift, body movement, absent material-debug state, fewer than three rendered frames or byte-identical images.

The returned Albedo view is HDRP's material-property diagnostic, with HDRP's usual removal of lighting-dependent postprocessing/exposure. It is not a separately graded beauty render. Custom shader coverage still requires image inspection; different hashes alone do not prove every visible shader supports albedo debugging.

All changes are inside try/finally. The original complete MaterialDebugSettings object is retained untouched and restored by reference, preserving private buffers and indices. A temporary debug object receives Albedo. The three public exclusive modes touched by HDRP's setter—fullscreen, lighting-debug mode and mip-debug mode—are restored exactly. Driver enable states and time scale are restored, and the render callback is removed. Screenshot textures are destroyed in their own finally.

CampaignQA now disposes nested enumerators on failure so their capture finally blocks execute. Helper disposal in Finish/disable/destroy supplies an additional cleanup path. A hard process/OS termination cannot run managed cleanup; such an incomplete report is not a successful diagnosis.

Files and interpretation

Each run writes a separate albedo-diagnostic/ directory, for example:

alps-01-pass0-view0-original.png
alps-01-pass0-view0-albedo.png
alps-01-pass0-view1-original.png
alps-01-pass0-view1-albedo.png
alps-01-pass0-view2-original.png
alps-01-pass0-view2-albedo.png
albedo-diagnostic-report.json

The report explicitly declares diagnosticOnly=true, performanceAcceptance=false, artAcceptance=false, and links the campaign setup report. Each pair includes PNG SHA-256 values, camera metadata, material-debug indices, actual rendered-frame count and pause duration. The required structural flags are cameraMatched, bodyUnchanged, materialDebugActive, debugRestored, cameraDriversRestored, timeScaleRestored and filesDiffer; all must be true. Pair status remains visual interpretation pending even when acquisition succeeds. The enclosing campaign report also marks that diagnostic pauses invalidate uninterrupted-driving/FPS acceptance.

Use a rendered solo run for the intended ground/forest/mountain material comparison:

& 'Tools/campaign-test.ps1' -DiagnosticAlbedo -Stages 'alps-01' -Passes 1 -Solo -GraphicsApi Direct3D11 -DeviceIndex 1

The device index is the already-used local Intel diagnostic adapter selection; the runner records the actual renderer/device. Root serializes editor/player execution. A complete native result still needs the correct device, six readable images, three valid pairs, profile integrity, clean process exit and subsequent visual comparison of ground, forest floor and limestone.

Offline evidence

albedo-capture-offline.json: 28/28 checks, zero failures. These execute the compiled opt-in truth table, exact flag matching, same-camera/frustum/dimension predicates including nonfinite rejection, and inspect the installed public API contract. Runtime 90 and Editor 20 files compiled without warnings/errors at this source checkpoint. These offline checks did not establish framebuffer or art quality; the subsequent native acquisition is recorded below.

Reproduce the offline check with Tools/Verification/verify-albedo-capture.ps1.

Native acquisition: PASS, 15 September 2026

Evidence: invocation, paired diagnostic report, and campaign setup/results. The run started at 16:19:17 Europe/Vienna (14:19:17Z), with the report created at 14:19:29Z. It rendered on Intel UHD Graphics, Direct3D11, 1920 × 1080, using the explicit solo/albedo/test flags and device index 1. Exit code was 0, production profiles were unchanged, and the invocation recorded no driver events or error.

Build identity: Rampage 0.1.0, Unity 6000.3.24f1, HDRP 17.3.0 / 700710090fa9; Development Build GUID 4a3f58cf26c14a77bd68374d0e167a4c. Invocation SHA-256 and the independently checked diagnostic Assembly-CSharp.dll both equal E0063B07F917218E8E23409E143486782940E757F5A3F62B4221E8CF3841800F. The separate diagnostic build manifest, dated 14:03:31Z, records success, retained debug shaders and restored stripping settings. This identifies the diagnostic build, not a new release build.

Pair Verified distance Race time Diagnostic pause Albedo frames
view0 218.353 m 6.508 s 3.048 s 3
view1 1742.385 m 35.034 s 2.405 s 3
view2 3082.614 m 61.443 s 0.756 s 3

All three pairs have identical camera/frustum/framebuffer metadata and zero body position, rotation and velocity deltas. cameraMatched, bodyUnchanged, materialDebugActive, debugRestored, cameraDriversRestored, timeScaleRestored and filesDiffer are true for each pair. All six PNG SHA-256 values were independently recomputed and match the report. The helper reports disposed=true; Development Build and retained-debug-shader guards are true.

The enclosing isolated campaign setup lists no seeded stages and reports a completed Alps 1-1 solo route, zero crashes/recoveries/missed-checkpoint frames, stable dimensions and no errors. The diagnostic pauses explicitly exclude this run from uninterrupted-driving or FPS acceptance. diagnosticOnly=true, artAcceptance=false and performanceAcceptance=false remain the controlling scope; raw pair statuses are retained unchanged.

Visual interpretation of view0 and view1

Both original/albedo pairs were viewed at their native 1920 × 1080 dimensions:

Result: native diagnostic acquisition passed; the images demonstrate remaining visual defects. This is not graphics or AAA acceptance.