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:
Compared with the start:
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: