Hi @Evgeni_Popov — here are the screenshots you asked for, plus pixel measurements, because “looks the same” is hard to judge by eye on this one.
On Babylon 9.18.2 I can no longer reproduce any WebGL vs WebGPU difference.

Top row WebGL2, bottom row WebGPU1, same PG (#Z6CF57#0), same machine, same session.
Method — instead of clicking the GUI buttons I set light.direction from the console (my synthetic clicks silently did nothing, and I got three identical screenshots that fooled me for a minute), then counted shadow pixels on the ground (luma between 90 and 200) and took the centroid:
light.direction |
WebGL2 |
WebGPU1 |
delta |
(1, -1.3, 0) |
16540 px, cx 472.3 |
16571 px, cx 472.0 |
0.2 % |
(-1, -1.3, 0) |
14513 px, cx 291.9 |
14544 px, cx 292.2 |
0.2 % |
(0.6, -1.3, 0.7) |
30805 px, cx 405.7 |
30841 px, cx 405.7 |
0.1 % |
That 0.1–0.2 % is antialiasing noise.
Is the shadow actually correct, or just consistently wrong? I checked it against geometry rather than against expectation. The box centre is at y = 4, ground at y = 0, so the shadow of the centre must land at world.xz = dir.xz * (4 / |dir.y|). Projecting that point with Vector3.Project and comparing to the measured centroid, in WebGPU:
(1, -1.3, 0) → predicted (1270, 477), measured (1252, 454)
(-1, -1.3, 0) → predicted (1076, 459), measured (1072, 435)
(0.6, -1.3, 0.7) → predicted (1238, 439), measured (1186, 394)
The middle one is the interesting case: it is the one that used to render no shadow at all, and it is now within 4 px in x on a 777 px canvas. The residual y offset is expected — my mask includes the penumbra, so the centroid sits slightly above the analytic point.
Machine: Windows 11 Pro 26200 x64 · Chrome 147 · WebGPU default, no flags · NVIDIA RTX 3080 Laptop (driver 32.0.15.9608) — also reproduced the original bug on the integrated Intel UHD, so it was never driver-specific · Babylon 9.18.2 (the PG default today).
So from here it looks fixed somewhere between the versions I originally filed against and 9.18.2. If it still fails for you and for @Joe_Kerr on the same 9.18.2, then it is narrower than we thought and the differentiator is the machine, not the backend — happy to run any test build or PG you want and report numbers rather than impressions.
For context, we had been shipping a workaround: a shadow-only proxy light rotated into the safe quadrant, with the same rotation baked into the shared transform matrix so it cancels at the receiver. It cost us the cascades (single ortho instead of CSM). If this is really fixed we can drop it, which is a real win — thanks for chasing it.