diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index d253bd9a7e6b4de138ae260131b61986c875795f..59f5eeb352df1f9e30c11d4759ffc9fcdb497fbf 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -4109,6 +4109,8 @@ THREE.WebGLRenderer = function ( parameters ) { specularMap: !! material.specularMap, alphaMap: !! material.alphaMap, + combine: material.combine, + vertexColors: material.vertexColors, fog: fog, @@ -4603,7 +4605,6 @@ THREE.WebGLRenderer = function ( parameters ) { } uniforms.refractionRatio.value = material.refractionRatio; - uniforms.combine.value = material.combine; uniforms.useRefract.value = material.envMap && ( material.envMap.mapping === THREE.CubeRefractionMapping || material.envMap.mapping === THREE.EquirectangularRefractionMapping ); diff --git a/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl b/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl index 9c60459d1098a1fc41ed357956f40fd405d8b124..d5427913dc0c482697b4b96db4bdef7444bf4f6c 100644 --- a/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl @@ -53,18 +53,18 @@ #endif - if ( combine == 1 ) { + #ifdef ENVMAP_BLENDING_MULTIPLY - gl_FragColor.xyz = mix( gl_FragColor.xyz, envColor.xyz, specularStrength * reflectivity ); + gl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * envColor.xyz, specularStrength * reflectivity ); - } else if ( combine == 2 ) { + #elif defined( ENVMAP_BLENDING_MIX ) - gl_FragColor.xyz += envColor.xyz * specularStrength * reflectivity; + gl_FragColor.xyz = mix( gl_FragColor.xyz, envColor.xyz, specularStrength * reflectivity ); - } else { + #elif defined( ENVMAP_BLENDING_ADD ) - gl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * envColor.xyz, specularStrength * reflectivity ); + gl_FragColor.xyz += envColor.xyz * specularStrength * reflectivity; - } + #endif -#endif \ No newline at end of file +#endif diff --git a/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl b/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl index 5fe7f99045086514227593e1463ed56e7d830d31..657f06ba974800f9afaf244d083ee47c38df34fb 100644 --- a/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl @@ -7,7 +7,6 @@ uniform sampler2D envMap; #endif uniform float flipEnvMap; - uniform int combine; #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) @@ -20,4 +19,4 @@ #endif -#endif \ No newline at end of file +#endif diff --git a/src/renderers/shaders/UniformsLib.js b/src/renderers/shaders/UniformsLib.js index e84336bde82b8d8ec842962789802baabb1baeaf..65c7eb57af6b12101ddf88b5ce3fccc5c34cda68 100644 --- a/src/renderers/shaders/UniformsLib.js +++ b/src/renderers/shaders/UniformsLib.js @@ -21,7 +21,6 @@ THREE.UniformsLib = { "useRefract" : { type: "i", value: 0 }, "reflectivity" : { type: "f", value: 1.0 }, "refractionRatio" : { type: "f", value: 0.98 }, - "combine" : { type: "i", value: 0 }, "morphTargetInfluences" : { type: "f", value: 0 } diff --git a/src/renderers/webgl/WebGLProgram.js b/src/renderers/webgl/WebGLProgram.js index a1e2b77382e4abd29c62bde152b57f07006989f0..1c108a1ba9373d14b1abd8c3bfdb158c90dbcc52 100644 --- a/src/renderers/webgl/WebGLProgram.js +++ b/src/renderers/webgl/WebGLProgram.js @@ -84,7 +84,8 @@ THREE.WebGLProgram = ( function () { } - var envMapTypeDefine = null; + var envMapTypeDefine = "ENVMAP_TYPE_CUBE"; + var envMapBlendingDefine = "ENVMAP_BLENDING_MULTIPLY"; if ( parameters.envMap ) { @@ -104,8 +105,20 @@ THREE.WebGLProgram = ( function () { envMapTypeDefine = "ENVMAP_TYPE_SPHERE"; break; - default: - envMapTypeDefine = "ENVMAP_TYPE_CUBE"; + } + + switch ( material.combine ) { + + case THREE.MultiplyOperation: + envMapBlendingDefine = "ENVMAP_BLENDING_MULTIPLY"; + break; + + case THREE.MixOperation: + envMapBlendingDefine = "ENVMAP_BLENDING_MIX"; + break; + + case THREE.AddOperation: + envMapBlendingDefine = "ENVMAP_BLENDING_ADD"; break; } @@ -261,7 +274,8 @@ THREE.WebGLProgram = ( function () { parameters.map ? "#define USE_MAP" : "", parameters.envMap ? "#define USE_ENVMAP" : "", - envMapTypeDefine ? "#define " + envMapTypeDefine : "", + parameters.envMap ? "#define " + envMapTypeDefine : "", + parameters.envMap ? "#define " + envMapBlendingDefine : "", parameters.lightMap ? "#define USE_LIGHTMAP" : "", parameters.bumpMap ? "#define USE_BUMPMAP" : "", parameters.normalMap ? "#define USE_NORMALMAP" : "",