I wrote some custom shader but don't want to loose all shading/lightning stuff that is in materials like phong or lambert. So I'm searching for a way to extend native materials. I suppose that for this purposes I can run THREE.ShaderMaterial with data from THREE.ShaderLib['lambert']. So this is how I do it:
class LandscapeMaterial extends THREE.ShaderMaterial{
constructor(config){
var getShader = function( shaderStr ) {
return shaderStr.replace( /#include\s+\<(\S+)\>/gi, function( match, p1 ){
var chunk = THREE.ShaderChunk[ p1 ];
return chunk ? chunk : "";
});
};
var lambertShader = THREE.ShaderLib['lambert'];
var uniforms = lambertShader.uniforms;
var params = {
side: THREE.DoubleSide,
uniforms: uniforms,
vertexShader: getShader(lambertShader.vertexShader),
fragmentShader: getShader(lambertShader.fragmentShader),
};
super(params);
}
}
However this code trow an error: WebGL: INVALID_VALUE: uniform3fv: no array. How do I fix it?