# Player retail car-shader WebGL experiment, r404

## Result

The decompiled programmable-car shader equations were added behind the opt-in
URL parameter `?carShader=retail-fallback`. The ordinary viewer path is
unchanged. The experiment compiles and runs in host Chrome/WebGL2, but its car
body is substantially darker than the existing renderer and still looks flat.
It is not promoted as a rendering improvement or a retail match.

The XP guest was not used to render this experiment. Its GPU cannot run the
retail game, so it remains useful only for files and static inspection. Chrome
on the Linux host with the Quadro GPU provides the WebGL rendering check.

## What was applied

For batches marked as the player's unresolved `paint_body`, the opt-in branch
uses the equations recovered in
[`car-programmable-shaders-r267.md`](car-programmable-shaders-r267.md):

- `q=max(dot(E,N),0.01)` and `R=normalize(2*q*N-E)`;
- the 10-term quadratic harmonic polynomial for diffuse and reflected
  directions;
- `B=2*T*D` and `out.rgb=B.rgb+2*B.a*J` with the recovered environment/specular
  combination.

The branch uses the `DEFAULT` state payload and coefficients from
[`car-harmonics-l4ra-fallback-reference.json`](car-harmonics-l4ra-fallback-reference.json),
which is a conditional offline calculation at the default L4RA spawn. It does
not use an active player paint descriptor, confirmed shader selection, a
captured light packet, or a source body paint texture. The environment comes
from the viewer's current local probe when available, with the extracted sky
panorama as fallback. The coefficient rows are held fixed as the car moves.

Those are significant unresolved inputs, documented in
[`paint-state-payload-audit-r357.md`](paint-state-payload-audit-r357.md). The
result demonstrates that the algebra alone cannot recover the player's
appearance: the missing live state and texture/technique handoff matter.

## Host Chrome comparison

Both captures were made at 1280×720 with the same packaged viewer, selected
240SX and a short W hold. Chrome reported the city ready with 223/223 textures,
89,205 nearby triangles, and no page exceptions or console errors. The default
render shows a pale gray body. The experimental body becomes dark graphite.

- [Default shader capture](../webgl-city/review/images/545-r404-default-shader.png)
- [Retail-fallback experiment capture](../webgl-city/review/images/544-r404-retail-fallback-shader.png)
- [Scrollable visual review feed](../webgl-city/review/)

This is a browser render check only; it does not establish that the XP guest can
run the game or that the reconstructed car appearance matches retail.
