		float lod0 = ComputeLOD(texCoord, u_texSize0);
		float lod1 = ComputeLOD(texCoord, u_texSize1);
		vec3 viewDirNrm = normalize(eyeVec);
		vec2 scale = viewDirNrm.xy * HEIGHT_SCALE / max(viewDirNrm.z * NUM_STEPSf, 0.01);

		pt_eye0.xy = texCoord - scale * vec2(TextureLod(u_HeightMap0, texCoord, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy = texCoord - scale * vec2(TextureLod(u_HeightMap1, texCoord, lod1, u_HeightMap1Swizzle).r * Scale);
#if NUM_STEPS > 1
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 2
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 3
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 4
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 5
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 6
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 7
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 8
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 9
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 10
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 11
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 12
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 13
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 14
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
#if NUM_STEPS > 15
		pt_eye0.xy -= scale * vec2(TextureLod(u_HeightMap0, pt_eye0.xy, lod0, u_HeightMap0Swizzle).r * Scale);
		pt_eye1.xy -= scale * vec2(TextureLod(u_HeightMap1, pt_eye1.xy, lod1, u_HeightMap1Swizzle).r * Scale);
#endif
