Browse Source

2k -> 1k envMaps

Emmett Lalish 5 năm trước cách đây
mục cha
commit
47afab8038

+ 6 - 7
examples/js/pmrem/PMREMGenerator.js

@@ -23,9 +23,8 @@ THREE.PMREMGenerator = ( function () {
 	// variance #defines in cube_uv_reflection_fragment.glsl.js.
 	var EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
 	var TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;
-	// The maximum length of the blur for loop, chosen to equal the number needed
-	// for GENERATED_SIGMA. Smaller _sigmas will use fewer samples and exit early,
-	// but not recompile the shader.
+	// The maximum length of the blur for loop. Smaller sigmas will use fewer
+	// samples and exit early, but not recompile the shader.
 	var MAX_SAMPLES = 20;
 	var ENCODINGS = {
 		[ THREE.LinearEncoding ]: 0,
@@ -173,10 +172,10 @@ THREE.PMREMGenerator = ( function () {
 
 			}
 			var planes = new THREE.BufferGeometry();
-			planes.addAttribute(
+			planes.setAttribute(
 				'position', new THREE.BufferAttribute( position, positionSize ) );
-			planes.addAttribute( 'uv', new THREE.BufferAttribute( uv, uvSize ) );
-			planes.addAttribute(
+			planes.setAttribute( 'uv', new THREE.BufferAttribute( uv, uvSize ) );
+			planes.setAttribute(
 				'faceIndex', new THREE.BufferAttribute( faceIndex, faceIndexSize ) );
 			_lodPlanes.push( planes );
 
@@ -214,7 +213,7 @@ THREE.PMREMGenerator = ( function () {
 
 		_pingPongRenderTarget.dispose();
 		_renderer.setRenderTarget( null );
-		var size = _renderer.getSize();
+		var size = _renderer.getSize( new THREE.Vector2() );
 		_renderer.setViewport( 0, 0, size.x, size.y );
 
 	}

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

@@ -45,12 +45,12 @@ var PMREMGenerator = ( function () {
 	var SIZE_MAX = Math.pow( 2, LOD_MAX );
 	// The standard deviations (radians) associated with the extra mips. These are
 	// chosen to approximate a Trowbridge-Reitz distribution function times the
-	// geometric shadowing function.
+	// geometric shadowing function. These sigma values squared must match the
+	// variance #defines in cube_uv_reflection_fragment.glsl.js.
 	var EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
 	var TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;
-	// The maximum length of the blur for loop, chosen to equal the number needed
-	// for GENERATED_SIGMA. Smaller _sigmas will use fewer samples and exit early,
-	// but not recompile the shader.
+	// The maximum length of the blur for loop. Smaller sigmas will use fewer
+	// samples and exit early, but not recompile the shader.
 	var MAX_SAMPLES = 20;
 	var ENCODINGS = {
 		[ LinearEncoding ]: 0,
@@ -198,10 +198,10 @@ var PMREMGenerator = ( function () {
 
 			}
 			var planes = new BufferGeometry();
-			planes.addAttribute(
+			planes.setAttribute(
 				'position', new BufferAttribute( position, positionSize ) );
-			planes.addAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
-			planes.addAttribute(
+			planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
+			planes.setAttribute(
 				'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
 			_lodPlanes.push( planes );
 
@@ -239,7 +239,7 @@ var PMREMGenerator = ( function () {
 
 		_pingPongRenderTarget.dispose();
 		_renderer.setRenderTarget( null );
-		var size = _renderer.getSize();
+		var size = _renderer.getSize( new Vector2() );
 		_renderer.setViewport( 0, 0, size.x, size.y );
 
 	}

BIN
examples/textures/equirectangular/pedestrian_overpass_1k.hdr


BIN
examples/textures/equirectangular/pedestrian_overpass_2k.hdr


BIN
examples/textures/equirectangular/venice_sunset_1k.hdr


BIN
examples/textures/equirectangular/venice_sunset_2k.hdr


+ 3 - 3
examples/webgl_loader_gltf.html

@@ -45,12 +45,12 @@
 				new RGBELoader()
 					.setDataType( THREE.UnsignedByteType )
 					.setPath( 'textures/equirectangular/' )
-					.load( 'pedestrian_overpass_2k.hdr', function ( texture ) {
+					.load( 'pedestrian_overpass_1k.hdr', function ( texture ) {
 
 						var pmremGenerator = new PMREMGenerator( renderer );
-						scene.background = pmremGenerator.fromEquirectangular(texture).texture;
+						var envMap = pmremGenerator.fromEquirectangular( texture ).texture;
 
-						var envMap = scene.background;
+						scene.background = envMap;
 
 						// model
 

+ 4 - 18
examples/webgl_loader_gltf_extensions.html

@@ -27,7 +27,6 @@
 			import { DRACOLoader } from './jsm/loaders/DRACOLoader.js';
 			import { RGBELoader } from './jsm/loaders/RGBELoader.js';
 			import { PMREMGenerator } from './jsm/pmrem/PMREMGenerator.js';
-			import { PMREMCubeUVPacker } from './jsm/pmrem/PMREMCubeUVPacker.js';
 
 			var orbitControls;
 			var container, camera, scene, renderer, loader;
@@ -156,25 +155,12 @@
 				new RGBELoader()
 					.setDataType( THREE.UnsignedByteType )
 					.setPath( 'textures/equirectangular/' )
-					.load( 'venice_sunset_2k.hdr', function ( texture ) {
+					.load( 'venice_sunset_1k.hdr', function ( texture ) {
 
-						var options = {
-							minFilter: texture.minFilter,
-							magFilter: texture.magFilter
-						};
+						var pmremGenerator = new PMREMGenerator( renderer );
+						envMap = pmremGenerator.fromEquirectangular( texture ).texture;
 
-						background = new THREE.WebGLRenderTargetCube( 1024, 1024, options ).fromEquirectangularTexture( renderer, texture );
-
-						var pmremGenerator = new PMREMGenerator( background.texture );
-						pmremGenerator.update( renderer );
-
-						var pmremCubeUVPacker = new PMREMCubeUVPacker( pmremGenerator.cubeLods );
-						pmremCubeUVPacker.update( renderer );
-
-						envMap = pmremCubeUVPacker.CubeUVRenderTarget.texture;
-
-						pmremGenerator.dispose();
-						pmremCubeUVPacker.dispose();
+						background = envMap;
 
 						//