Implementación de un sombreador de vértices de mapa de altura de 32 bits en threejs

Estoy intentando reutilizar el ejemplo de sombreador de mapa de altura encontradoaquí en uno que funcionará con 32 bits de precisión en lugar de 8. El código de trabajo en progreso está en github:https://github.com/bgourlie/three_heightmap

El mapa de altura se está generando en .NET. Las alturas están dentro de 0f ... 200f y se convierten en un valor de color de 32 bits (Unity'sEstructura de color) utilizando el siguiente método:

private static Color DepthToColor(float height)
{
    var depthBytes = BitConverter.GetBytes(height);
    int enc = BitConverter.ToInt32(depthBytes, 0);
    return new Color((enc >> 24 & 255)/255f, (enc >> 16 & 255)/255f, (enc >> 8 & 255)/255f,
            (enc & 255)/255f);
}

Los datos de color se codifican como png, y el resultado se ve así:

El sombreador de vértices está tomando estos datos de imagen y convirtiendo los valores RBGA de nuevo al valor de altura original (usando la técnica respondida en mi preguntaaquí):

uniform sampler2D bumpTexture; // defined in heightmap.js
varying float vAmount;
varying vec2 vUV;

void main()
{
  vUV = uv;
  vec4 bumpData = texture2D( bumpTexture, uv );
  vAmount = dot(bumpData, vec4(1.0, 255.0, 65025.0, 16581375.0));
  // Uncomment to see a "flatter" version
  //vAmount = dot(bumpData, vec4(1.0, 1.0/255.0, 1.0/65025.0, 1.0/160581375.0));

  // move the position along the normal
  vec3 newPosition = position + normal * vAmount;
  gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );
}

El resultado definitivamente está en mal estado:

Puedo hacerlo más plano cambiando esta línea:

vAmount = dot(bumpData, vec4(1.0, 1.0/255.0, 1.0/65025.0, 1.0/16581375.0));

Esto me dará una imagen mucho más plana, que al menos muestra un buen contorno del terreno generado, pero con un plano casi completamente plano (hay una ligera variación, aunque imperceptible):

Supongo que estoy haciendo algunas cosas mal, simplemente no sé qué. No estoy seguro de si estoy codificando el flotador original correctamente. No estoy seguro de si lo estoy decodificando correctamente en el sombreador de vértices (el valor que obtengo está ciertamente fuera del rango de 0 ... 200). Tampoco tengo mucha experiencia en gráficos 3D en general. Por lo tanto, cualquier sugerencia sobre lo que estoy haciendo mal o, en general, cómo lograr esto sería muy apreciado.

Nuevamente, el código autónomo de trabajo en progreso se puede encontrar aquí:https://github.com/bgourlie/three_heightmap