Z fighting is worse as we move away from the origin

This is an odd one, and it implies there might be a peculiarity in the way that PlayCanvas handles depth buffering.
I have a motorcycle with a rider, riding along a straight road. The bike and rider move through the world, the camera is offset from the bike. At the start and for quite a long way, it looks fine… but after a while we see worse and worse z-fighting interaction where the rider contacts the seat.
Here’s a screenshot:
image
Compared with the start:
image

I’m going to modify this project so that the world moves instead of the bike, but it shouldn’t be necessary. In a normal camera set-up, the distance buffer is calculated using the difference between the camera location and the objects in view… so the distance from origin should only become a problem when you get far enough for the floating point numbers to separate, and that affects object position and not the depth (and is a HUGE number).

I just checked and the Z distance for this image is only 33891:
image

Moving the world instead of the bike fixed the problem. Might be worth a look at what numbers are being plugged into the depth buffer… I have a feeling there’s a reference to absolute values that should be local/relative.