|
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 |
|
|
69 | 67 |
|
70 | 68 | scene = new THREE.Scene(); |
71 | 69 |
|
72 | | - renderer = new THREE.WebGLRenderer( { antialias: true } ); |
| 70 | + renderer = new THREE.WebGLRenderer( { antialias: true, colorBufferType: THREE.HalfFloatType } ); |
73 | 71 | renderer.setPixelRatio( window.devicePixelRatio ); |
74 | 72 | renderer.setSize( window.innerWidth, window.innerHeight ); |
75 | 73 | renderer.setAnimationLoop( animate ); |
|
213 | 211 |
|
214 | 212 | if ( b ) { |
215 | 213 |
|
216 | | - if ( composer ) return; |
| 214 | + if ( bloomPass ) return; |
| 215 | + |
| 216 | + taaPass = new TAARenderPass( scene, camera ); |
| 217 | + taaPass.sampleLevel = 2; |
217 | 218 |
|
218 | 219 | bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 ); |
219 | 220 | bloomPass.threshold = setting.threshold; |
220 | 221 | bloomPass.strength = setting.strength; |
221 | 222 | bloomPass.radius = setting.radius; |
222 | 223 |
|
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() ); |
| 224 | + renderer.setEffects( [ taaPass, bloomPass ] ); |
234 | 225 |
|
235 | 226 | } else { |
236 | 227 |
|
237 | | - if ( ! composer ) return; |
238 | | - composer.dispose(); |
239 | | - composer = null; |
240 | | - bloomPass = null; |
| 228 | + if ( ! bloomPass ) return; |
| 229 | + taaPass.dispose(); |
241 | 230 | taaPass = null; |
| 231 | + bloomPass.dispose(); |
| 232 | + bloomPass = null; |
| 233 | + |
| 234 | + renderer.setEffects( null ); |
242 | 235 |
|
243 | 236 | } |
244 | 237 |
|
|
306 | 299 | camera.aspect = width / height; |
307 | 300 | camera.updateProjectionMatrix(); |
308 | 301 | renderer.setSize( width, height ); |
309 | | - if ( composer ) { |
310 | 302 |
|
311 | | - composer.setSize( width, height ); |
| 303 | + if ( taaPass ) { |
| 304 | + |
| 305 | + taaPass.setSize( width, height ); |
| 306 | + bloomPass.setSize( width, height ); |
312 | 307 |
|
313 | 308 | } |
314 | 309 |
|
|
322 | 317 |
|
323 | 318 | TWEEN.update(); |
324 | 319 |
|
325 | | - if ( composer ) composer.render(); |
326 | | - else renderer.render( scene, camera ); |
| 320 | + renderer.render( scene, camera ); |
327 | 321 |
|
328 | 322 | if ( ready ) getTime(); |
329 | 323 |
|
|
0 commit comments