|
35 | 35 |
|
36 | 36 | import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; |
37 | 37 |
|
38 | | - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; |
39 | 38 | import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js'; |
40 | | - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; |
41 | 39 | import { TAARenderPass } from 'three/addons/postprocessing/TAARenderPass.js'; |
42 | 40 |
|
43 | | - let composer, camera, scene, renderer; |
| 41 | + let camera, scene, renderer; |
44 | 42 | let gui, dirLight, pointLight, controls, bloomPass, taaPass; |
45 | 43 | let ready = false; |
46 | 44 |
|
|
53 | 51 | metalness: 1.0, |
54 | 52 | opacity: 0.4, |
55 | 53 | threshold: 0, |
56 | | - strength: 0.08, |
| 54 | + strength: 0.007, |
57 | 55 | radius: 0.0, |
58 | 56 | postProcess: false |
59 | 57 | }; |
|
69 | 67 |
|
70 | 68 | scene = new THREE.Scene(); |
71 | 69 |
|
72 | | - renderer = new THREE.WebGLRenderer( { antialias: true } ); |
| 70 | + renderer = new THREE.WebGLRenderer( { antialias: true, outputBufferType: THREE.HalfFloatType } ); |
73 | 71 | renderer.setPixelRatio( window.devicePixelRatio ); |
74 | 72 | renderer.setSize( window.innerWidth, window.innerHeight ); |
75 | 73 | renderer.setAnimationLoop( animate ); |
|
79 | 77 | renderer.shadowMap.type = THREE.VSMShadowMap; |
80 | 78 | container.appendChild( renderer.domElement ); |
81 | 79 |
|
| 80 | + taaPass = new TAARenderPass( scene, camera ); |
| 81 | + taaPass.sampleLevel = 2; |
| 82 | + |
| 83 | + bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 ); |
| 84 | + bloomPass.threshold = setting.threshold; |
| 85 | + bloomPass.strength = setting.strength; |
| 86 | + bloomPass.radius = setting.radius; |
| 87 | + |
82 | 88 | new HDRLoader() |
83 | 89 | .setPath( 'textures/equirectangular/' ) |
84 | 90 | .load( 'lobe.hdr', function ( texture ) { |
|
213 | 219 |
|
214 | 220 | if ( b ) { |
215 | 221 |
|
216 | | - if ( composer ) return; |
217 | | - |
218 | | - bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 ); |
219 | | - bloomPass.threshold = setting.threshold; |
220 | | - bloomPass.strength = setting.strength; |
221 | | - bloomPass.radius = setting.radius; |
222 | | - |
223 | | - taaPass = new TAARenderPass( scene, camera ); |
224 | | - taaPass.sampleLevel = 2; |
225 | | - taaPass.unbiased = false; |
226 | | - |
227 | | - composer = new EffectComposer( renderer ); |
228 | | - composer.setPixelRatio( window.devicePixelRatio ); |
229 | | - composer.setSize( window.innerWidth, window.innerHeight ); |
230 | | - |
231 | | - composer.addPass( taaPass ); |
232 | | - composer.addPass( bloomPass ); |
233 | | - composer.addPass( new OutputPass() ); |
| 222 | + renderer.setEffects( [ taaPass, bloomPass ] ); |
234 | 223 |
|
235 | 224 | } else { |
236 | 225 |
|
237 | | - if ( ! composer ) return; |
238 | | - composer.dispose(); |
239 | | - composer = null; |
240 | | - bloomPass = null; |
241 | | - taaPass = null; |
| 226 | + renderer.setEffects( null ); |
242 | 227 |
|
243 | 228 | } |
244 | 229 |
|
|
255 | 240 |
|
256 | 241 | gui.add( setting, 'postProcess' ).onChange( postProcess ); |
257 | 242 | gui.add( setting, 'threshold', 0, 1, 0.01 ).onChange( upBloom ); |
258 | | - gui.add( setting, 'strength', 0, 3, 0.01 ).onChange( upBloom ); |
| 243 | + gui.add( setting, 'strength', 0, 0.1, 0.001 ).onChange( upBloom ); |
259 | 244 | gui.add( setting, 'radius', 0, 1, 0.01 ).onChange( upBloom ); |
260 | 245 |
|
261 | 246 | } |
|
306 | 291 | camera.aspect = width / height; |
307 | 292 | camera.updateProjectionMatrix(); |
308 | 293 | renderer.setSize( width, height ); |
309 | | - if ( composer ) { |
310 | | - |
311 | | - composer.setSize( width, height ); |
312 | | - |
313 | | - } |
314 | 294 |
|
315 | 295 | } |
316 | 296 |
|
|
322 | 302 |
|
323 | 303 | TWEEN.update(); |
324 | 304 |
|
325 | | - if ( composer ) composer.render(); |
326 | | - else renderer.render( scene, camera ); |
| 305 | + renderer.render( scene, camera ); |
327 | 306 |
|
328 | 307 | if ( ready ) getTime(); |
329 | 308 |
|
|
0 commit comments