This was caused by camera background being rendered in world space, causing floating point imprecision issues when camera was far from origin. Adding a uniform to change vertex shader to process everything in viewspace to fix the problem.