-" //vec3 OffsetVector = vec3(EyeVectorFogDepth.xy * ((1.0 / EyeVectorFogDepth.z) * OffsetMapping_Scale) * vec2(-1, 1), -1);\n"
-" //vec3 OffsetVector = vec3(normalize(EyeVectorFogDepth.xy) * OffsetMapping_Scale * vec2(-1, 1), -1);\n"
-" vec3 OffsetVector = vec3(normalize(EyeVectorFogDepth.xyz).xy * OffsetMapping_Scale * vec2(-1, 1), -1);\n"
-" vec3 RT = vec3(TexCoord, 1);\n"
-" OffsetVector *= 0.1;\n"
-" RT += OffsetVector * step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
-" RT += OffsetVector * step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
-" RT += OffsetVector * step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
-" RT += OffsetVector * step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
-" RT += OffsetVector * step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
-" RT += OffsetVector * step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
-" RT += OffsetVector * step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
-" RT += OffsetVector * step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
-" RT += OffsetVector * step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
-" RT += OffsetVector * (step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z) - 0.5);\n"
-" RT += OffsetVector * (step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z) * 0.5 - 0.25);\n"
-" RT += OffsetVector * (step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z) * 0.25 - 0.125);\n"
-" RT += OffsetVector * (step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z) * 0.125 - 0.0625);\n"
-" RT += OffsetVector * (step(textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z) * 0.0625 - 0.03125);\n"
+" //vec3 OffsetVector = vec3(EyeVectorFogDepth.xy * ((1.0 / EyeVectorFogDepth.z) * ScaleSteps.x) * vec2(-1, 1), -1);\n"
+" //vec3 OffsetVector = vec3(normalize(EyeVectorFogDepth.xy) * ScaleSteps.x * vec2(-1, 1), -1);\n"
+" vec3 OffsetVector = vec3(normalize(EyeVectorFogDepth.xyz).xy * ScaleSteps.x * vec2(-1, 1), -1);\n"
+" vec3 RT = vec3(vec2(TexCoord.xy - OffsetVector.xy*OffsetMapping_Bias), 1);\n"
+" OffsetVector *= ScaleSteps.z;\n"
+" for(i = 1.0; i < ScaleSteps.y; ++i)\n"
+" RT += OffsetVector * step(dp_textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z);\n"
+" for(i = 0.0, f = 1.0; i < ScaleSteps.w; ++i, f *= 0.5)\n"
+" RT += OffsetVector * (step(dp_textureGrad(Texture_Normal, RT.xy, dPdx, dPdy).a, RT.z) * f - 0.5 * f);\n"