Нормали GLSL webgl lerp от смещения uv

У меня есть карта смещения на плоскости 512px * 512px (100x100 сегментов), так как изображение для прокрутки карты смещения оставляет привязку вершин к положению высоты, не смешиваясь плавно, я смотрел на функцию mix() и smooth-step(), чтобы преобразовать нормали к их положениям с течением времени, но я с трудом реализую его.

    uniform sampler2D heightText;  //texture greyscale 512x512
    uniform float displace;        
    uniform float time;
    uniform float speed;

    varying vec2 vUV;
    varying float scaleDisplace;

    void main() { 
        vUV = uv;
        vec2 uvOffset = vUV + vec2( 0.1, 0.1)* time;    // animates offset
        vec2 uvCo = vUV + vec2( 0.0, 0.0);
        vec2 texSize = vec2(-0.8, 0.8);        // scales image larger

        vec4 data = texture2D( heightText, uvOffset + fract(uvCo)*texSize.x);
        scaleDisplace = data.r; 

        //vec3 possy = normal  * displace  * scaleDisplace;

        vec3 morphPossy = mix( position, normal *displace , scaleDisplace)* time ;

        gl_Position = projectionMatrix * modelViewMatrix * vec4(morphPossy, 1.0 );


   }

Использование Three.js 71 с вершиной и пикселем:

Цель иллюстрации:

uv offset Любая помощь ценится...

Ответ 1

Поскольку вы используете текстуру в качестве карты высот, вы должны убедиться, что:

heightText.magFilter = THREE.LinearFilter; // This is the default value.

так что полученные значения сглаживаются от текселя к текселю.