Browse Source

envMaps work as backgrounds

Emmett Lalish 5 years ago
parent
commit
42946424ae

File diff suppressed because it is too large
+ 0 - 0
build/three.js


File diff suppressed because it is too large
+ 0 - 0
build/three.module.js


+ 4 - 0
src/renderers/WebGLRenderer.js

@@ -1983,6 +1983,10 @@ function WebGLRenderer( parameters ) {
 				m_uniforms.color.value.copy( material.color );
 				m_uniforms.opacity.value = material.opacity;
 
+			} else if ( material.envMap ) {
+
+				refreshUniformsCommon( m_uniforms, material );
+
 			}
 
 			// RectAreaLight Texture

+ 9 - 1
src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js

@@ -38,6 +38,10 @@ export default /* glsl */`
 
 		vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
 
+	#elif defined( ENVMAP_TYPE_CUBE_UV )
+
+		vec4 envColor = textureCubeUV( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ), 0.0 );
+
 	#elif defined( ENVMAP_TYPE_EQUIREC )
 
 		vec2 sampleUV;
@@ -64,7 +68,11 @@ export default /* glsl */`
 
 	#endif
 
-	envColor = envMapTexelToLinear( envColor );
+	#ifndef ENVMAP_TYPE_CUBE_UV
+
+		envColor = envMapTexelToLinear( envColor );
+
+	#endif
 
 	#ifdef ENVMAP_BLENDING_MULTIPLY
 

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

@@ -211,11 +211,12 @@ var ShaderLib = {
 
 	cube: {
 
-		uniforms: {
-			tCube: { value: null },
-			tFlip: { value: - 1 },
-			opacity: { value: 1.0 }
-		},
+		uniforms: mergeUniforms( [
+			UniformsLib.envmap,
+			{
+				opacity: { value: 1.0 }
+			}
+		] ),
 
 		vertexShader: ShaderChunk.cube_vert,
 		fragmentShader: ShaderChunk.cube_frag

+ 7 - 4
src/renderers/shaders/ShaderLib/cube_frag.glsl.js

@@ -1,15 +1,18 @@
 export default /* glsl */`
-uniform samplerCube tCube;
-uniform float tFlip;
+
+#include <envmap_common_pars_fragment>
 uniform float opacity;
 
 varying vec3 vWorldDirection;
 
+#include <cube_uv_reflection_fragment>
+
 void main() {
 
-	vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );
+	vec3 vReflect = vWorldDirection;
+	#include <envmap_fragment>
 
-	gl_FragColor = mapTexelToLinear( texColor );
+	gl_FragColor = envColor;
 	gl_FragColor.a *= opacity;
 
 	#include <tonemapping_fragment>

+ 1 - 0
src/renderers/shaders/ShaderLib/meshbasic_frag.glsl.js

@@ -18,6 +18,7 @@ uniform float opacity;
 #include <lightmap_pars_fragment>
 #include <envmap_common_pars_fragment>
 #include <envmap_pars_fragment>
+#include <cube_uv_reflection_fragment>
 #include <fog_pars_fragment>
 #include <specularmap_pars_fragment>
 #include <logdepthbuf_pars_fragment>

+ 1 - 0
src/renderers/shaders/ShaderLib/meshlambert_frag.glsl.js

@@ -25,6 +25,7 @@ varying vec3 vIndirectFront;
 #include <emissivemap_pars_fragment>
 #include <envmap_common_pars_fragment>
 #include <envmap_pars_fragment>
+#include <cube_uv_reflection_fragment>
 #include <bsdfs>
 #include <lights_pars_begin>
 #include <fog_pars_fragment>

+ 1 - 0
src/renderers/shaders/ShaderLib/meshphong_frag.glsl.js

@@ -20,6 +20,7 @@ uniform float opacity;
 #include <emissivemap_pars_fragment>
 #include <envmap_common_pars_fragment>
 #include <envmap_pars_fragment>
+#include <cube_uv_reflection_fragment>
 #include <gradientmap_pars_fragment>
 #include <fog_pars_fragment>
 #include <bsdfs>

+ 4 - 5
src/renderers/webgl/WebGLBackground.js

@@ -2,7 +2,7 @@
  * @author mrdoob / http://mrdoob.com/
  */
 
-import { BackSide, FrontSide } from '../../constants.js';
+import { BackSide, FrontSide, CubeUVReflectionMapping } from '../../constants.js';
 import { BoxBufferGeometry } from '../../geometries/BoxGeometry.js';
 import { PlaneBufferGeometry } from '../../geometries/PlaneGeometry.js';
 import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
@@ -60,7 +60,7 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 
 		}
 
-		if ( background && ( background.isCubeTexture || background.isWebGLRenderTargetCube ) ) {
+		if ( background && ( background.isCubeTexture || background.isWebGLRenderTargetCube || background.mapping === CubeUVReflectionMapping ) ) {
 
 			if ( boxMesh === undefined ) {
 
@@ -92,7 +92,7 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 
 					get: function () {
 
-						return this.uniforms.tCube.value;
+						return this.envMap.value;
 
 					}
 
@@ -103,8 +103,7 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 			}
 
 			var texture = background.isWebGLRenderTargetCube ? background.texture : background;
-			boxMesh.material.uniforms.tCube.value = texture;
-			boxMesh.material.uniforms.tFlip.value = ( background.isWebGLRenderTargetCube ) ? 1 : - 1;
+			boxMesh.material.envMap = texture;
 
 			if ( currentBackground !== background ||
 			     currentBackgroundVersion !== texture.version ) {

+ 1 - 1
src/renderers/webgl/WebGLProgram.js

@@ -351,7 +351,7 @@ function generateEnvMapModeDefine( parameters ) {
 
 function generateEnvMapBlendingDefine( parameters ) {
 
-	var envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';
+	var envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';
 
 	if ( parameters.envMap ) {
 

Some files were not shown because too many files changed in this diff