diff --git a/src/renderers/shaders/ShaderChunk/fog_fragment.glsl b/src/renderers/shaders/ShaderChunk/fog_fragment.glsl index 46cc3788640aff..ad12ba20f7c7ca 100644 --- a/src/renderers/shaders/ShaderChunk/fog_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/fog_fragment.glsl @@ -1,6 +1,9 @@ #ifdef USE_FOG - float fogDepth = length( vFogPosition ); + // divide then multiply by max component to try to avoid saturating mediump precision + vec3 fogPositionAbs = abs( vFogPosition ); + float fogMaxComponent = max( fogPositionAbs.x, max( fogPositionAbs.y, fogPositionAbs.z ) ); + float fogDepth = length( vFogPosition / fogMaxComponent ) * fogMaxComponent; #ifdef FOG_EXP2