Three js - Clonando un shader y cambiando valores uniformes

Estoy trabajando en la creación de un sombreado para generar terreno con sombras.

Mi punto de partida es clonar el sombreador lambert y usar un ShaderMaterial para personalizarlo eventualmente con mi propio script.

El método estándar funciona bien:

var material = new MeshLambertMaterial({map:THREE.ImageUtils.loadTexture('images/texture.jpg')});

var mesh = new THREE.Mesh(geometry, material);

etc

El resultado:

Sin embargo, me gustaría usar el material de lambert como base y trabajar sobre él, así que intenté esto:

var lambertShader = THREE.ShaderLib['lambert'];
var uniforms = THREE.UniformsUtils.clone(lambertShader.uniforms);

var texture = THREE.ImageUtils.loadTexture('images/texture.jpg');
uniforms['map'].texture = texture;

var material = new THREE.ShaderMaterial({
    uniforms: uniforms,
    vertexShader: lambertShader.vertexShader,
    fragmentShader: lambertShader.fragmentShader,
    lights:true,
    fog: true
});

var mesh = new THREE.Mesh(geometry, material);

El resultado para este:

Parece que el sombreador no está tomando en cuenta la nueva textura que he agregado, sin embargo, mirando al inspector cuando registré los uniformes, el objeto del mapa tiene los valores correctos.

Soy bastante nuevo para los tres, así que podría estar haciendo algo fundamentalmente incorrecto, si alguien pudiera señalarme la dirección correcta aquí, sería genial.

También puedo poner enlaces de demostración si eso sería útil?

Gracias will

EDITAR:

Aquí hay algunos enlaces de demostración.

Demo con material de sombreado:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-shader-material.html

Demo con material de lambert de trabajo:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-lambert-material.html

Respuestas a la pregunta(1)

Su respuesta a la pregunta