|
6 | 6 | <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> |
7 | 7 | <style> |
8 | 8 | body { |
9 | | - color: #000; |
| 9 | + color: #fff; |
10 | 10 | font-family:Monospace; |
11 | 11 | font-size:13px; |
12 | 12 | text-align:center; |
|
33 | 33 |
|
34 | 34 | <script src="../build/three.js"></script> |
35 | 35 | <script src="js/controls/OrbitControls.js"></script> |
| 36 | + |
36 | 37 | <script src="js/loaders/RGBELoader.js"></script> |
37 | 38 | <script src="js/loaders/HDRCubeTextureLoader.js"></script> |
38 | 39 |
|
|
43 | 44 | <script src="js/pmrem/PMREMCubeUVPacker.js"></script> |
44 | 45 | <script src="js/libs/dat.gui.min.js"></script> |
45 | 46 |
|
46 | | - <script src="js/postprocessing/EffectComposer.js"></script> |
47 | | - <script src="js/postprocessing/RenderPass.js"></script> |
48 | | - <script src="js/postprocessing/MaskPass.js"></script> |
49 | | - <script src="js/postprocessing/ShaderPass.js"></script> |
50 | | - <script src="js/shaders/CopyShader.js"></script> |
51 | | - <script src="js/shaders/FXAAShader.js"></script> |
52 | | - <script src="js/postprocessing/BloomPass.js"></script> |
53 | | - <script src="js/shaders/ConvolutionShader.js"></script> |
54 | | - |
55 | 47 | <script> |
56 | 48 |
|
57 | 49 | if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); |
58 | 50 |
|
59 | 51 | var container, stats; |
60 | 52 | var params = { |
61 | | - envMap: "HDR", |
62 | | - projection: 'normal', |
63 | | - roughness: 1.0, |
64 | | - bumpScale: 0.3, |
65 | | - background: false, |
66 | | - exposure: 1.0, |
67 | | - side: 'front' |
| 53 | + envMap: 'HDR', |
| 54 | + roughness: 0.0, |
| 55 | + metalness: 0.0, |
| 56 | + exposure: 1.0 |
68 | 57 | }; |
69 | 58 | var camera, scene, renderer, controls, objects = []; |
70 | | - var hdrCubeMap; |
71 | | - var composer; |
72 | 59 | var standardMaterial, floorMaterial; |
73 | 60 | var ldrCubeRenderTarget, hdrCubeRenderTarget, rgbmCubeRenderTarget; |
74 | 61 |
|
|
80 | 67 | container = document.createElement( 'div' ); |
81 | 68 | document.body.appendChild( container ); |
82 | 69 |
|
83 | | - camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 2000 ); |
84 | | - camera.position.set( 0.0, 40, 40 * 3.5 ); |
| 70 | + camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 1000 ); |
| 71 | + camera.position.set( 0.0, 0, 120 ); |
85 | 72 |
|
86 | 73 | scene = new THREE.Scene(); |
87 | | - scene.background = new THREE.Color( 0xffffff ); |
| 74 | + scene.background = new THREE.Color( 0x000000 ); |
88 | 75 |
|
89 | 76 | renderer = new THREE.WebGLRenderer(); |
90 | 77 | renderer.toneMapping = THREE.LinearToneMapping; |
91 | 78 |
|
92 | 79 | standardMaterial = new THREE.MeshStandardMaterial( { |
93 | 80 | map: null, |
94 | | - bumpScale: - 0.05, |
95 | | - color: 0xff4444, |
96 | | - metalness: 0.5, |
97 | | - roughness: 1.0 |
| 81 | + color: 0xffffff, |
| 82 | + metalness: params.metalness, |
| 83 | + roughness: params.roughness |
98 | 84 | } ); |
99 | 85 |
|
100 | | - var geometry = new THREE.TorusKnotGeometry( 18, 8, 150, 20 ); |
| 86 | + var geometry = new THREE.TorusKnotBufferGeometry( 18, 8, 150, 20 ); |
| 87 | + |
101 | 88 | var torusMesh1 = new THREE.Mesh( geometry, standardMaterial ); |
102 | | - torusMesh1.position.x = 0.0; |
103 | | - torusMesh1.castShadow = true; |
104 | | - torusMesh1.receiveShadow = true; |
| 89 | + |
105 | 90 | scene.add( torusMesh1 ); |
106 | 91 | objects.push( torusMesh1 ); |
107 | 92 |
|
108 | | - floorMaterial = new THREE.MeshStandardMaterial( { |
109 | | - map: null, |
110 | | - roughnessMap: null, |
| 93 | + floorMaterial = new THREE.MeshBasicMaterial( { |
111 | 94 | color: 0xffffff, |
112 | | - metalness: 0.0, |
113 | | - roughness: 0.0 |
114 | 95 | } ); |
115 | 96 |
|
116 | 97 | var planeGeometry = new THREE.PlaneBufferGeometry( 200, 200 ); |
117 | 98 | var planeMesh1 = new THREE.Mesh( planeGeometry, floorMaterial ); |
118 | 99 | planeMesh1.position.y = - 50; |
119 | 100 | planeMesh1.rotation.x = - Math.PI * 0.5; |
120 | | - planeMesh1.receiveShadow = true; |
121 | 101 | scene.add( planeMesh1 ); |
122 | 102 |
|
123 | | - var textureLoader = new THREE.TextureLoader(); |
124 | | - textureLoader.load( "./textures/roughness_map.jpg", function( map ) { |
125 | | - map.wrapS = THREE.RepeatWrapping; |
126 | | - map.wrapT = THREE.RepeatWrapping; |
127 | | - map.anisotropy = 4; |
128 | | - map.repeat.set( 9, 2 ); |
129 | | - standardMaterial.map = map; |
130 | | - standardMaterial.roughnessMap = map; |
131 | | - standardMaterial.bumpMap = map; |
132 | | - standardMaterial.needsUpdate = true; |
133 | | - } ); |
134 | | - |
135 | 103 | var genCubeUrls = function( prefix, postfix ) { |
136 | 104 | return [ |
137 | 105 | prefix + 'px' + postfix, prefix + 'nx' + postfix, |
|
140 | 108 | ]; |
141 | 109 | }; |
142 | 110 |
|
143 | | - var hdrUrls = genCubeUrls( "./textures/cube/pisaHDR/", ".hdr" ); |
| 111 | + var hdrUrls = genCubeUrls( './textures/cube/pisaHDR/', '.hdr' ); |
144 | 112 | new THREE.HDRCubeTextureLoader().load( THREE.UnsignedByteType, hdrUrls, function ( hdrCubeMap ) { |
145 | 113 |
|
146 | 114 | var pmremGenerator = new THREE.PMREMGenerator( hdrCubeMap ); |
|
153 | 121 |
|
154 | 122 | } ); |
155 | 123 |
|
156 | | - var ldrUrls = genCubeUrls( "./textures/cube/pisa/", ".png" ); |
| 124 | + var ldrUrls = genCubeUrls( './textures/cube/pisa/', '.png' ); |
157 | 125 | new THREE.CubeTextureLoader().load( ldrUrls, function ( ldrCubeMap ) { |
158 | 126 |
|
159 | 127 | ldrCubeMap.encoding = THREE.GammaEncoding; |
|
169 | 137 | } ); |
170 | 138 |
|
171 | 139 |
|
172 | | - var rgbmUrls = genCubeUrls( "./textures/cube/pisaRGBM16/", ".png" ); |
| 140 | + var rgbmUrls = genCubeUrls( './textures/cube/pisaRGBM16/', '.png' ); |
173 | 141 | new THREE.CubeTextureLoader().load( rgbmUrls, function ( rgbmCubeMap ) { |
174 | 142 |
|
175 | 143 | rgbmCubeMap.encoding = THREE.RGBM16Encoding; |
|
184 | 152 |
|
185 | 153 | } ); |
186 | 154 |
|
187 | | - // Lights |
188 | | - |
189 | | - scene.add( new THREE.AmbientLight( 0x222222 ) ); |
190 | | - |
191 | | - var spotLight = new THREE.SpotLight( 0xffffff ); |
192 | | - spotLight.position.set( 50, 100, 50 ); |
193 | | - spotLight.angle = Math.PI / 7; |
194 | | - spotLight.penumbra = 0.8; |
195 | | - spotLight.castShadow = true; |
196 | | - scene.add( spotLight ); |
197 | | - |
198 | 155 | renderer.setPixelRatio( window.devicePixelRatio ); |
199 | 156 | renderer.setSize( window.innerWidth, window.innerHeight ); |
200 | | - renderer.shadowMap.enabled = true; |
201 | 157 | container.appendChild( renderer.domElement ); |
202 | 158 |
|
203 | 159 | //renderer.toneMapping = THREE.ReinhardToneMapping; |
204 | | - renderer.gammaInput = true; |
| 160 | + renderer.gammaInput = true; // ??? |
205 | 161 | renderer.gammaOutput = true; |
206 | 162 |
|
207 | 163 | stats = new Stats(); |
208 | 164 | container.appendChild( stats.dom ); |
209 | 165 |
|
210 | 166 | controls = new THREE.OrbitControls( camera, renderer.domElement ); |
| 167 | + controls.minDistance = 50; |
| 168 | + controls.maxDistance = 300; |
211 | 169 |
|
212 | 170 | window.addEventListener( 'resize', onWindowResize, false ); |
213 | 171 |
|
214 | 172 | var gui = new dat.GUI(); |
215 | 173 |
|
216 | | - gui.add( params, 'envMap', [ 'None', 'LDR', 'HDR', 'RGBM16' ] ); |
| 174 | + gui.add( params, 'envMap', [ 'LDR', 'HDR', 'RGBM16' ] ); |
217 | 175 | gui.add( params, 'roughness', 0, 1 ); |
218 | | - gui.add( params, 'bumpScale', - 1, 1 ); |
219 | | - gui.add( params, 'exposure', 0.1, 2 ); |
220 | | - gui.add( params, 'side', [ 'front', 'back', 'double' ] ); |
| 176 | + gui.add( params, 'metalness', 0, 1 ); |
| 177 | + gui.add( params, 'exposure', 0, 2 ); |
221 | 178 | gui.open(); |
222 | 179 |
|
223 | 180 | } |
|
234 | 191 |
|
235 | 192 | } |
236 | 193 |
|
237 | | - // |
238 | | - |
239 | 194 | function animate() { |
240 | 195 |
|
241 | 196 | requestAnimationFrame( animate ); |
|
251 | 206 | if ( standardMaterial !== undefined ) { |
252 | 207 |
|
253 | 208 | standardMaterial.roughness = params.roughness; |
254 | | - standardMaterial.bumpScale = - 0.05 * params.bumpScale; |
| 209 | + standardMaterial.metalness = params.metalness; |
255 | 210 |
|
256 | 211 | var newEnvMap = standardMaterial.envMap; |
257 | 212 |
|
258 | 213 | switch( params.envMap ) { |
259 | 214 |
|
260 | | - case 'None': newEnvMap = null; break; |
261 | 215 | case 'LDR': newEnvMap = ldrCubeRenderTarget ? ldrCubeRenderTarget.texture : null; break; |
262 | 216 | case 'HDR': newEnvMap = hdrCubeRenderTarget ? hdrCubeRenderTarget.texture : null; break; |
263 | 217 | case 'RGBM16': newEnvMap = rgbmCubeRenderTarget ? rgbmCubeRenderTarget.texture : null; break; |
264 | 218 |
|
265 | 219 | } |
266 | 220 |
|
267 | | - if( newEnvMap !== standardMaterial.envMap ) { |
| 221 | + if ( newEnvMap !== standardMaterial.envMap ) { |
268 | 222 |
|
269 | 223 | standardMaterial.envMap = newEnvMap; |
270 | 224 | standardMaterial.needsUpdate = true; |
271 | | - floorMaterial.emissive = new THREE.Color( 1, 1, 1 ); |
272 | | - floorMaterial.emissiveMap = newEnvMap; |
273 | | - floorMaterial.needsUpdate = true; |
274 | 225 |
|
275 | | - } |
276 | | - |
277 | | - |
278 | | - var side = standardMaterial.side; |
279 | | - |
280 | | - switch ( params.side ) { |
281 | | - |
282 | | - case 'front': side = THREE.FrontSide; break; |
283 | | - case 'back': side = THREE.BackSide; break; |
284 | | - case 'double': side = THREE.DoubleSide; break; |
| 226 | + floorMaterial.map = newEnvMap; |
| 227 | + floorMaterial.needsUpdate = true; |
285 | 228 |
|
286 | 229 | } |
287 | 230 |
|
288 | | - if( standardMaterial.side !== side ) { |
289 | | - |
290 | | - standardMaterial.side = side; |
291 | | - standardMaterial.needsUpdate = true; |
292 | | - |
293 | | - } |
294 | 231 | } |
295 | 232 |
|
296 | | - renderer.toneMappingExposure = Math.pow( params.exposure, 4.0 ); |
297 | | - |
298 | | - var timer = Date.now() * 0.00025; |
299 | | - |
300 | | - camera.lookAt( scene.position ); |
| 233 | + renderer.toneMappingExposure = params.exposure; |
301 | 234 |
|
302 | 235 | for ( var i = 0, l = objects.length; i < l; i ++ ) { |
303 | 236 |
|
|
0 commit comments