Skip to content

Commit fea08f8

Browse files
authored
Examples: Added bloom to ocean examples. (#32680)
1 parent 98a7dd5 commit fea08f8

4 files changed

Lines changed: 52 additions & 9 deletions

File tree

-5.96 KB
Loading
-4.65 KB
Loading

examples/webgl_shaders_ocean.html

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,11 @@
3232
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
3333
import { Water } from 'three/addons/objects/Water.js';
3434
import { Sky } from 'three/addons/objects/Sky.js';
35+
import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js';
3536

3637
let container, stats;
3738
let camera, scene, renderer;
38-
let controls, water, sun, mesh;
39+
let controls, water, sun, mesh, bloomPass;
3940

4041
init();
4142

@@ -45,14 +46,20 @@
4546

4647
//
4748

48-
renderer = new THREE.WebGLRenderer();
49+
renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } );
4950
renderer.setPixelRatio( window.devicePixelRatio );
5051
renderer.setSize( window.innerWidth, window.innerHeight );
5152
renderer.setAnimationLoop( animate );
5253
renderer.toneMapping = THREE.ACESFilmicToneMapping;
53-
renderer.toneMappingExposure = 0.5;
54+
renderer.toneMappingExposure = 0.1;
5455
container.appendChild( renderer.domElement );
5556

57+
bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ) );
58+
bloomPass.threshold = 0;
59+
bloomPass.strength = 0.1;
60+
bloomPass.radius = 0;
61+
renderer.setEffects( [ bloomPass ] );
62+
5663
//
5764

5865
scene = new THREE.Scene();
@@ -105,7 +112,8 @@
105112

106113
const parameters = {
107114
elevation: 2,
108-
azimuth: 180
115+
azimuth: 180,
116+
exposure: 0.1
109117
};
110118

111119
const pmremGenerator = new THREE.PMREMGenerator( renderer );
@@ -164,6 +172,11 @@
164172
const folderSky = gui.addFolder( 'Sky' );
165173
folderSky.add( parameters, 'elevation', 0, 90, 0.1 ).onChange( updateSun );
166174
folderSky.add( parameters, 'azimuth', - 180, 180, 0.1 ).onChange( updateSun );
175+
folderSky.add( parameters, 'exposure', 0, 1, 0.0001 ).onChange( function ( value ) {
176+
177+
renderer.toneMappingExposure = value;
178+
179+
} );
167180
folderSky.open();
168181

169182
const waterUniforms = water.material.uniforms;
@@ -173,6 +186,11 @@
173186
folderWater.add( waterUniforms.size, 'value', 0.1, 10, 0.1 ).name( 'size' );
174187
folderWater.open();
175188

189+
const folderBloom = gui.addFolder( 'Bloom' );
190+
folderBloom.add( bloomPass, 'strength', 0, 3, 0.01 );
191+
folderBloom.add( bloomPass, 'radius', 0, 1, 0.01 );
192+
folderBloom.open();
193+
176194
//
177195

178196
window.addEventListener( 'resize', onWindowResize );

examples/webgpu_ocean.html

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
<script type="module">
3737

3838
import * as THREE from 'three/webgpu';
39+
import { pass } from 'three/tsl';
40+
import { bloom } from 'three/addons/tsl/display/BloomNode.js';
3941

4042
import { Inspector } from 'three/addons/inspector/Inspector.js';
4143

@@ -44,8 +46,8 @@
4446
import { SkyMesh } from 'three/addons/objects/SkyMesh.js';
4547

4648
let container;
47-
let camera, scene, renderer;
48-
let controls, water, sun, mesh;
49+
let camera, scene, renderer, postProcessing;
50+
let controls, water, sun, mesh, bloomPass;
4951

5052
init();
5153

@@ -60,7 +62,7 @@
6062
renderer.setSize( window.innerWidth, window.innerHeight );
6163
renderer.setAnimationLoop( render );
6264
renderer.toneMapping = THREE.ACESFilmicToneMapping;
63-
renderer.toneMappingExposure = 0.5;
65+
renderer.toneMappingExposure = 0.1;
6466
renderer.inspector = new Inspector();
6567
container.appendChild( renderer.domElement );
6668

@@ -71,6 +73,20 @@
7173
camera = new THREE.PerspectiveCamera( 55, window.innerWidth / window.innerHeight, 1, 20000 );
7274
camera.position.set( 30, 30, 100 );
7375

76+
// Post-processing
77+
78+
postProcessing = new THREE.PostProcessing( renderer );
79+
80+
const scenePass = pass( scene, camera );
81+
const scenePassColor = scenePass.getTextureNode( 'output' );
82+
83+
bloomPass = bloom( scenePassColor );
84+
bloomPass.threshold.value = 0;
85+
bloomPass.strength.value = 0.1;
86+
bloomPass.radius.value = 0;
87+
88+
postProcessing.outputNode = scenePassColor.add( bloomPass );
89+
7490
//
7591

7692
sun = new THREE.Vector3();
@@ -110,7 +126,8 @@
110126

111127
const parameters = {
112128
elevation: 2,
113-
azimuth: 180
129+
azimuth: 180,
130+
exposure: 0.1
114131
};
115132

116133
const pmremGenerator = new THREE.PMREMGenerator( renderer );
@@ -164,12 +181,20 @@
164181
const folderSky = gui.addFolder( 'Sky' );
165182
folderSky.add( parameters, 'elevation', 0, 90, 0.1 ).onChange( updateSun );
166183
folderSky.add( parameters, 'azimuth', - 180, 180, 0.1 ).onChange( updateSun );
184+
folderSky.add( parameters, 'exposure', 0, 1, 0.0001 ).onChange( function ( value ) {
185+
186+
renderer.toneMappingExposure = value;
167187

188+
} );
168189

169190
const folderWater = gui.addFolder( 'Water' );
170191
folderWater.add( water.distortionScale, 'value', 0, 8, 0.1 ).name( 'distortionScale' );
171192
folderWater.add( water.size, 'value', 0.1, 10, 0.1 ).name( 'size' );
172193

194+
const folderBloom = gui.addFolder( 'Bloom' );
195+
folderBloom.add( bloomPass.strength, 'value', 0, 3, 0.01 ).name( 'strength' );
196+
folderBloom.add( bloomPass.radius, 'value', 0, 1, 0.01 ).name( 'radius' );
197+
173198
//
174199

175200
window.addEventListener( 'resize', onWindowResize );
@@ -193,7 +218,7 @@
193218
mesh.rotation.x = time * 0.5;
194219
mesh.rotation.z = time * 0.51;
195220

196-
renderer.render( scene, camera );
221+
postProcessing.render();
197222

198223
}
199224

0 commit comments

Comments
 (0)