Browse Source

fix bug in encodings.glsl

Ben Houston 9 years ago
parent
commit
964e08beef

+ 8 - 2
examples/js/pmrem/PMREMGenerator.js

@@ -82,7 +82,7 @@ THREE.PMREMGenerator.prototype = {
 
     renderer.gammaInput = renderer.gammaInput;
     renderer.gammaOutput = renderer.gammaOutput;
-    
+
 	},
 
 	renderToCubeMapTarget: function( renderer, renderTarget ) {
@@ -219,7 +219,13 @@ THREE.PMREMGenerator.prototype = {
            rgbColor /= float(NumSamples);\n\
            //rgbColor = testColorMap( roughness ).rgb;\n\
            gl_FragColor = linearToOutputTexel( vec4( rgbColor, 1.0 ) );\n\
-        }"
+        }",
+        blending: THREE.CustomBlending,
+        blendSrc: THREE.OneFactor,
+        blendDst: THREE.ZeroFactor,
+        blendSrcAlpha: THREE.OneFactor,
+        blendDstAlpha: THREE.ZeroFactor,
+        blendEquation: THREE.AddEquation
       }
     );
   }

+ 1 - 2
examples/js/pmrem/PMREM_CubeUVPacker.js

@@ -11,7 +11,7 @@ THREE.PMREM_CubeUVPacker = function( cubeTextureLods, numLods ) {
 	var size = cubeTextureLods[ 0 ].width * 4;
 
 	this.CubeUVRenderTarget = new THREE.WebGLRenderTarget( size, size,
-	{ format: THREE.RGBAFormat, magFilter: THREE.LinearFilter, minFilter: THREE.LinearFilter, type:cubeTextureLods[ 0 ].type } );
+	{ format: THREE.RGBAFormat, magFilter: THREE.LinearFilter, minFilter: THREE.LinearFilter, type: cubeTextureLods[ 0 ].texture.type } );
 	this.CubeUVRenderTarget.texture.generateMipmaps = false;
   this.CubeUVRenderTarget.mapping = THREE.CubeUVReflectionMapping;
 	this.camera = new THREE.OrthographicCamera( - size * 0.5, size * 0.5, - size * 0.5, size * 0.5, 0.0, 1000 );
@@ -96,7 +96,6 @@ THREE.PMREM_CubeUVPacker.prototype = {
 
     renderer.gammaInput = renderer.gammaInput;
     renderer.gammaOutput = renderer.gammaOutput;
-
 	},
 
   getShader: function() {

+ 5 - 2
examples/webgl_materials_envmaps_hdr.html

@@ -99,20 +99,23 @@
 				renderer = new THREE.WebGLRenderer( { alpha:true, antialias: true } );
 
 				var hdrType = THREE.UnsignedByteType;
-		  /*  if ( renderer.extensions.get( 'OES_texture_half_float' ) && renderer.extensions.get( 'OES_texture_half_float_linear' ) ) {
+		    if ( renderer.extensions.get( 'OES_texture_half_float' ) && renderer.extensions.get( 'OES_texture_half_float_linear' ) ) {
 		      hdrType = THREE.HalfFloatType;
 		    }
 				else if ( renderer.extensions.get( 'OES_texture_float' ) && renderer.extensions.get( 'OES_texture_float_linear' ) ) {
 		      hdrType = THREE.FloatType;
-		    }*/
+		    }
 
 				var hdrCubeMap = new THREE.HDRCubeMapLoader().load( hdrType, hdrurls, function ( hdrCubeMap ) {
+
 				  var pmremGenerator = new THREE.PMREMGenerator( hdrCubeMap );
 					pmremGenerator.update(renderer);
 
+
 				  var pmremCubeUVPacker = new THREE.PMREM_CubeUVPacker(pmremGenerator.cubeLods);
 				  pmremCubeUVPacker.update(renderer);
 
+
 				  var roughnessTexture = THREE.ImageUtils.loadTexture( "../examples/textures/roughness_map.jpg" );
 				  roughnessTexture.wrapS = THREE.RepeatWrapping;
 				  roughnessTexture.wrapT = THREE.RepeatWrapping;

+ 3 - 3
src/renderers/shaders/ShaderChunk/encodings.glsl

@@ -19,12 +19,12 @@ vec4 LinearTosRGB( in vec4 value ) {
 }
 
 vec4 RGBEToLinear( in vec4 value ) {
-  return vec4( value.rgb * exp2( value.a * 256.0 - 128.0 ), 1.0 );
+  return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );
 }
 vec4 LinearToRGBE( in vec4 value ) {
   float maxComponent = max( max( value.r, value.g ), value.b );
-  float fExp = ceil( log2( maxComponent ) );
-  return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 256.0 );
+  float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );
+  return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );
 //  return vec4( value.brg, ( 3.0 + 128.0 ) / 256.0 );
 }