|
33 | 33 | <a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> - GLTFLoader<br /> |
34 | 34 | Battle Damaged Sci-fi Helmet by |
35 | 35 | <a href="https://sketchfab.com/theblueturtle_" target="_blank" rel="noopener">theblueturtle_</a><br /> |
| 36 | + <a href="https://hdrihaven.com/hdri/?h=pedestrian_overpass" target="_blank" rel="noopener">Pedestrian Overpass</a> by <a href="https://hdrihaven.com/" target="_blank" rel="noopener">HDRI Haven</a> |
36 | 37 | </div> |
37 | 38 |
|
38 | 39 | <script src="../build/three.js"></script> |
39 | 40 |
|
40 | 41 | <script src="js/controls/OrbitControls.js"></script> |
41 | 42 | <script src="js/loaders/GLTFLoader.js"></script> |
42 | 43 |
|
| 44 | + <script src="js/loaders/EquirectangularToCubeGenerator.js"></script> |
| 45 | + <script src="js/loaders/RGBELoader.js"></script> |
| 46 | + |
| 47 | + <script src="js/pmrem/PMREMGenerator.js"></script> |
| 48 | + <script src="js/pmrem/PMREMCubeUVPacker.js"></script> |
| 49 | + |
43 | 50 | <script src="js/WebGL.js"></script> |
44 | 51 | <script src="js/libs/stats.min.js"></script> |
45 | 52 |
|
|
71 | 78 |
|
72 | 79 | scene = new THREE.Scene(); |
73 | 80 |
|
74 | | - var urls = [ 'posx.jpg', 'negx.jpg', 'posy.jpg', 'negy.jpg', 'posz.jpg', 'negz.jpg' ]; |
75 | | - var loader = new THREE.CubeTextureLoader().setPath( 'textures/cube/Bridge2/' ); |
76 | | - loader.load( urls, function ( texture ) { |
77 | | - |
78 | | - texture.encoding = THREE.sRGBEncoding; |
79 | | - |
80 | | - // light probe |
81 | | - |
82 | | - var sh = new THREE.SphericalHarmonics3(); |
83 | | - // Coefficients computed with LightProbeGenerator.fromCubeTexture() and sh.toArray() |
84 | | - sh.fromArray( |
85 | | - [ 0.30350402186576847, 0.4695020609740584, 0.6617666153025029, |
86 | | - 0.08320329629560637, 0.17400245533281114, 0.3453152275957874, |
87 | | - 0.12158824672933624, 0.10353622444396401, 0.06530153583524678, |
88 | | - 0.013607857556048842, 0.019188302420841814, 0.01874813525865349, |
89 | | - 0.010822144860690035, 0.01574198289465548, 0.01742654587405097, |
90 | | - 0.06310934215371257, 0.061061933521237545, 0.044428745834389806, |
91 | | - 0.19958014705624538, 0.22020936865062024, 0.19468224569437417, |
92 | | - 0.019647224115989702, 0.032414009820739324, 0.043555315974879015, |
93 | | - 0.13316051440231733, 0.1964793374921572, 0.2189213184804167 |
94 | | - ] |
95 | | - ); |
96 | | - var lightProbe = new THREE.LightProbe( sh ); |
97 | | - scene.add( lightProbe ); |
| 81 | + var loader = new THREE.RGBELoader().setPath( 'textures/equirectangular/' ); |
| 82 | + loader.load( 'pedestrian_overpass_2k.hdr', function ( texture ) { |
| 83 | + |
| 84 | + texture.encoding = THREE.RGBEEncoding; |
| 85 | + texture.minFilter = THREE.NearestFilter; |
| 86 | + texture.magFilter = THREE.NearestFilter; |
| 87 | + texture.flipY = true; |
| 88 | + |
| 89 | + var cubeGenerator = new THREE.EquirectangularToCubeGenerator( texture, { resolution: 1024 } ); |
| 90 | + cubeGenerator.update( renderer ); |
| 91 | + |
| 92 | + var pmremGenerator = new THREE.PMREMGenerator( cubeGenerator.renderTarget.texture ); |
| 93 | + pmremGenerator.update( renderer ); |
| 94 | + |
| 95 | + var pmremCubeUVPacker = new THREE.PMREMCubeUVPacker( pmremGenerator.cubeLods ); |
| 96 | + pmremCubeUVPacker.update( renderer ); |
| 97 | + |
| 98 | + var envMap = pmremCubeUVPacker.CubeUVRenderTarget.texture; |
98 | 99 |
|
99 | 100 | // model |
100 | 101 |
|
|
105 | 106 |
|
106 | 107 | if ( child.isMesh ) { |
107 | 108 |
|
108 | | - child.material.envMap = texture; |
| 109 | + child.material.envMap = envMap; |
109 | 110 |
|
110 | 111 | } |
111 | 112 |
|
|
115 | 116 |
|
116 | 117 | } ); |
117 | 118 |
|
118 | | - scene.background = texture; |
| 119 | + pmremGenerator.dispose(); |
| 120 | + pmremCubeUVPacker.dispose(); |
| 121 | + |
| 122 | + scene.background = cubeGenerator.renderTarget; |
119 | 123 |
|
120 | 124 | } ); |
121 | 125 |
|
122 | 126 | renderer = new THREE.WebGLRenderer( { antialias: true } ); |
123 | 127 | renderer.setPixelRatio( window.devicePixelRatio ); |
124 | 128 | renderer.setSize( window.innerWidth, window.innerHeight ); |
125 | 129 | renderer.gammaOutput = true; |
126 | | - renderer.gammaFactor = 2.2; // approximate sRGB |
127 | 130 | container.appendChild( renderer.domElement ); |
128 | 131 |
|
129 | 132 | window.addEventListener( 'resize', onWindowResize, false ); |
|
0 commit comments