|
62 | 62 | import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js'; |
63 | 63 | import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js'; |
64 | 64 | import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; |
| 65 | + import { RoomEnvironment } from 'three/addons/environments/RoomEnvironment.js'; |
65 | 66 |
|
66 | 67 | const BLOOM_SCENE = 1; |
67 | 68 |
|
|
78 | 79 | const darkMaterial = new THREE.MeshBasicMaterial( { color: 'black' } ); |
79 | 80 | const materials = {}; |
80 | 81 |
|
81 | | - const renderer = new THREE.WebGLRenderer( { antialias: true } ); |
| 82 | + const renderer = new THREE.WebGLRenderer( { antialias: false } ); |
82 | 83 | renderer.setPixelRatio( window.devicePixelRatio ); |
83 | 84 | renderer.setSize( window.innerWidth, window.innerHeight ); |
84 | | - renderer.toneMapping = THREE.ReinhardToneMapping; |
| 85 | + renderer.toneMapping = THREE.NeutralToneMapping; |
85 | 86 | document.body.appendChild( renderer.domElement ); |
86 | 87 |
|
87 | 88 | const scene = new THREE.Scene(); |
| 89 | + const pmremGenerator = new THREE.PMREMGenerator( renderer ); |
| 90 | + scene.environment = pmremGenerator.fromScene( new RoomEnvironment(), 0.04 ).texture; |
88 | 91 |
|
89 | 92 | const camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 200 ); |
90 | 93 | camera.position.set( 0, 0, 20 ); |
|
103 | 106 | bloomPass.strength = params.strength; |
104 | 107 | bloomPass.radius = params.radius; |
105 | 108 |
|
106 | | - const bloomComposer = new EffectComposer( renderer ); |
| 109 | + const bloomRenderTarget = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, { type: THREE.HalfFloatType } ); |
| 110 | + const bloomComposer = new EffectComposer( renderer, bloomRenderTarget ); |
107 | 111 | bloomComposer.renderToScreen = false; |
108 | 112 | bloomComposer.addPass( renderScene ); |
109 | 113 | bloomComposer.addPass( bloomPass ); |
|
123 | 127 |
|
124 | 128 | const outputPass = new OutputPass(); |
125 | 129 |
|
126 | | - const finalComposer = new EffectComposer( renderer ); |
| 130 | + const finalRenderTarget = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, { type: THREE.HalfFloatType, samples: 4 } ); |
| 131 | + const finalComposer = new EffectComposer( renderer, finalRenderTarget ); |
127 | 132 | finalComposer.addPass( renderScene ); |
128 | 133 | finalComposer.addPass( mixPass ); |
129 | 134 | finalComposer.addPass( outputPass ); |
|
216 | 221 | const color = new THREE.Color(); |
217 | 222 | color.setHSL( Math.random(), 0.7, Math.random() * 0.2 + 0.05 ); |
218 | 223 |
|
219 | | - const material = new THREE.MeshBasicMaterial( { color: color } ); |
| 224 | + const material = new THREE.MeshStandardMaterial( { color: color, roughness: 1, metalness: 1 } ); |
220 | 225 | const sphere = new THREE.Mesh( geometry, material ); |
221 | 226 | sphere.position.x = Math.random() * 10 - 5; |
222 | 227 | sphere.position.y = Math.random() * 10 - 5; |
|
0 commit comments