Explorar o código

WebGLRenderer: useRefract to defines.

Mr.doob %!s(int64=10) %!d(string=hai) anos
pai
achega
1e716c56b1

+ 1 - 3
src/renderers/WebGLRenderer.js

@@ -4103,6 +4103,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			map: !! material.map,
 			envMap: !! material.envMap,
+			envMapMode: material.envMap && material.envMap.mapping,
 			lightMap: !! material.lightMap,
 			bumpMap: !! material.bumpMap,
 			normalMap: !! material.normalMap,
@@ -4605,9 +4606,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 		}
 
 		uniforms.refractionRatio.value = material.refractionRatio;
-		uniforms.useRefract.value = material.envMap && (
-			material.envMap.mapping === THREE.CubeRefractionMapping ||
-			material.envMap.mapping === THREE.EquirectangularRefractionMapping );
 
 	}
 

+ 5 - 5
src/renderers/shaders/ShaderChunk/envmap_fragment.glsl

@@ -11,15 +11,15 @@
 
 		vec3 worldNormal = normalize( vec3( vec4( normal, 0.0 ) * viewMatrix ) );
 
-		if ( useRefract ) {
+		#ifdef ENVMAP_MODE_REFLECTION
 
-			reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );
+			reflectVec = reflect( cameraToVertex, worldNormal );
 
-		} else { 
+		#elif defined( ENVMAP_MODE_REFRACTION )
 
-			reflectVec = reflect( cameraToVertex, worldNormal );
+			reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );
 
-		}
+		#endif
 
 	#else
 

+ 0 - 1
src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl

@@ -10,7 +10,6 @@
 
 	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )
 
-		uniform bool useRefract;
 		uniform float refractionRatio;
 
 	#else

+ 0 - 1
src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl

@@ -3,6 +3,5 @@
 	varying vec3 vReflect;
 
 	uniform float refractionRatio;
-	uniform bool useRefract;
 
 #endif

+ 6 - 6
src/renderers/shaders/ShaderChunk/envmap_vertex.glsl

@@ -5,14 +5,14 @@
 
 	vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );
 
-	if ( useRefract ) {
+	#ifdef ENVMAP_MODE_REFLECTION
 
-		vReflect = refract( cameraToVertex, worldNormal, refractionRatio );
+		vReflect = reflect( cameraToVertex, worldNormal );
 
-	} else {
+	#elif defined( ENVMAP_MODE_REFRACTION )
 
-		vReflect = reflect( cameraToVertex, worldNormal );
+		vReflect = refract( cameraToVertex, worldNormal, refractionRatio );
 
-	}
+	#endif
 
-#endif
+#endif

+ 5 - 7
src/renderers/shaders/ShaderLib.js

@@ -628,7 +628,6 @@ THREE.ShaderLib = {
 			"shininess": { type: "f", value: 30 },
 			"opacity": { type: "f", value: 1 },
 
-			"useRefract": { type: "i", value: 0 },
 			"refractionRatio": { type: "f", value: 0.98 },
 			"reflectivity": { type: "f", value: 0.5 },
 
@@ -663,7 +662,6 @@ THREE.ShaderLib = {
 
 			"uniform vec2 uNormalScale;",
 
-			"uniform bool useRefract;",
 			"uniform float refractionRatio;",
 			"uniform float reflectivity;",
 
@@ -1031,15 +1029,15 @@ THREE.ShaderLib = {
 			"		vec3 vReflect;",
 			"		vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );",
 
-			"		if ( useRefract ) {",
+			"		#ifdef ENVMAP_MODE_REFLECTION",
 
-			"			vReflect = refract( cameraToVertex, normal, refractionRatio );",
+			"			vReflect = reflect( cameraToVertex, normal );",
 
-			"		} else {",
+			"		#elif defined( ENVMAP_MODE_REFRACTION )",
 
-			"			vReflect = reflect( cameraToVertex, normal );",
+			"			vReflect = refract( cameraToVertex, normal, refractionRatio );",
 
-			"		}",
+			"		#endif",
 
 			"		vec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );",
 

+ 0 - 1
src/renderers/shaders/UniformsLib.js

@@ -18,7 +18,6 @@ THREE.UniformsLib = {
 
 		"envMap" : { type: "t", value: null },
 		"flipEnvMap" : { type: "f", value: - 1 },
-		"useRefract" : { type: "i", value: 0 },
 		"reflectivity" : { type: "f", value: 1.0 },
 		"refractionRatio" : { type: "f", value: 0.98 },
 

+ 12 - 0
src/renderers/webgl/WebGLProgram.js

@@ -85,6 +85,7 @@ THREE.WebGLProgram = ( function () {
 		}
 
 		var envMapTypeDefine = "ENVMAP_TYPE_CUBE";
+		var envMapModeDefine = "ENVMAP_MODE_REFLECTION";
 		var envMapBlendingDefine = "ENVMAP_BLENDING_MULTIPLY";
 
 		if ( parameters.envMap ) {
@@ -107,6 +108,15 @@ THREE.WebGLProgram = ( function () {
 
 			}
 
+			switch ( material.envMap.mapping ) {
+
+				case THREE.CubeRefractionMapping:
+				case THREE.EquirectangularRefractionMapping:
+					envMapModeDefine = "ENVMAP_MODE_REFRACTION";
+					break;
+
+			}
+
 			switch ( material.combine ) {
 
 				case THREE.MultiplyOperation:
@@ -167,6 +177,7 @@ THREE.WebGLProgram = ( function () {
 
 				parameters.map ? "#define USE_MAP" : "",
 				parameters.envMap ? "#define USE_ENVMAP" : "",
+				parameters.envMap ? "#define " + envMapModeDefine : "",
 				parameters.lightMap ? "#define USE_LIGHTMAP" : "",
 				parameters.bumpMap ? "#define USE_BUMPMAP" : "",
 				parameters.normalMap ? "#define USE_NORMALMAP" : "",
@@ -275,6 +286,7 @@ THREE.WebGLProgram = ( function () {
 				parameters.map ? "#define USE_MAP" : "",
 				parameters.envMap ? "#define USE_ENVMAP" : "",
 				parameters.envMap ? "#define " + envMapTypeDefine : "",
+				parameters.envMap ? "#define " + envMapModeDefine : "",
 				parameters.envMap ? "#define " + envMapBlendingDefine : "",
 				parameters.lightMap ? "#define USE_LIGHTMAP" : "",
 				parameters.bumpMap ? "#define USE_BUMPMAP" : "",