|
@@ -24,8 +24,10 @@
|
|
import { RGBELoader } from './jsm/loaders/RGBELoader.js';
|
|
import { RGBELoader } from './jsm/loaders/RGBELoader.js';
|
|
import { EffectComposer } from './jsm/postprocessing/EffectComposer.js';
|
|
import { EffectComposer } from './jsm/postprocessing/EffectComposer.js';
|
|
import { RenderPass } from './jsm/postprocessing/RenderPass.js';
|
|
import { RenderPass } from './jsm/postprocessing/RenderPass.js';
|
|
|
|
+ import { ShaderPass } from './jsm/postprocessing/ShaderPass.js';
|
|
import { LUTPass } from './jsm/postprocessing/LUTPass.js';
|
|
import { LUTPass } from './jsm/postprocessing/LUTPass.js';
|
|
import { LUTCubeLoader } from './jsm/loaders/LUTCubeLoader.js';
|
|
import { LUTCubeLoader } from './jsm/loaders/LUTCubeLoader.js';
|
|
|
|
+ import { GammaCorrectionShader } from './jsm/shaders/GammaCorrectionShader.js';
|
|
import { GUI } from './jsm/libs/dat.gui.module.js';
|
|
import { GUI } from './jsm/libs/dat.gui.module.js';
|
|
|
|
|
|
const params = {
|
|
const params = {
|
|
@@ -72,15 +74,12 @@
|
|
texture.dispose();
|
|
texture.dispose();
|
|
pmremGenerator.dispose();
|
|
pmremGenerator.dispose();
|
|
|
|
|
|
- render();
|
|
|
|
-
|
|
|
|
// model
|
|
// model
|
|
|
|
|
|
const loader = new GLTFLoader().setPath( 'models/gltf/DamagedHelmet/glTF/' );
|
|
const loader = new GLTFLoader().setPath( 'models/gltf/DamagedHelmet/glTF/' );
|
|
loader.load( 'DamagedHelmet.gltf', function ( gltf ) {
|
|
loader.load( 'DamagedHelmet.gltf', function ( gltf ) {
|
|
|
|
|
|
scene.add( gltf.scene );
|
|
scene.add( gltf.scene );
|
|
- render();
|
|
|
|
|
|
|
|
} );
|
|
} );
|
|
|
|
|
|
@@ -97,18 +96,25 @@
|
|
|
|
|
|
} );
|
|
} );
|
|
|
|
|
|
- renderer = new THREE.WebGLRenderer( { antialias: true } );
|
|
|
|
|
|
+ renderer = new THREE.WebGLRenderer();
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
renderer.toneMapping = THREE.ACESFilmicToneMapping;
|
|
renderer.toneMapping = THREE.ACESFilmicToneMapping;
|
|
renderer.toneMappingExposure = 1;
|
|
renderer.toneMappingExposure = 1;
|
|
- renderer.outputEncoding = THREE.sRGBEncoding;
|
|
|
|
container.appendChild( renderer.domElement );
|
|
container.appendChild( renderer.domElement );
|
|
|
|
+
|
|
|
|
+ const target = new THREE.WebGLRenderTarget( {
|
|
|
|
+ minFilter: THREE.LinearFilter,
|
|
|
|
+ magFilter: THREE.LinearFilter,
|
|
|
|
+ format: THREE.RGBAFormat,
|
|
|
|
+ encoding: THREE.sRGBEncoding
|
|
|
|
+ } );
|
|
|
|
|
|
- composer = new EffectComposer( renderer );
|
|
|
|
|
|
+ composer = new EffectComposer( renderer, target );
|
|
composer.setPixelRatio( window.devicePixelRatio );
|
|
composer.setPixelRatio( window.devicePixelRatio );
|
|
composer.setSize( window.innerWidth, window.innerHeight );
|
|
composer.setSize( window.innerWidth, window.innerHeight );
|
|
composer.addPass( new RenderPass( scene, camera ) );
|
|
composer.addPass( new RenderPass( scene, camera ) );
|
|
|
|
+ composer.addPass( new ShaderPass( GammaCorrectionShader ) );
|
|
|
|
|
|
lutPass = new LUTPass();
|
|
lutPass = new LUTPass();
|
|
composer.addPass( lutPass );
|
|
composer.addPass( lutPass );
|
|
@@ -117,7 +123,6 @@
|
|
pmremGenerator.compileEquirectangularShader();
|
|
pmremGenerator.compileEquirectangularShader();
|
|
|
|
|
|
const controls = new OrbitControls( camera, renderer.domElement );
|
|
const controls = new OrbitControls( camera, renderer.domElement );
|
|
- controls.addEventListener( 'change', render ); // use if there is no animation loop
|
|
|
|
controls.minDistance = 2;
|
|
controls.minDistance = 2;
|
|
controls.maxDistance = 10;
|
|
controls.maxDistance = 10;
|
|
controls.target.set( 0, 0, - 0.2 );
|
|
controls.target.set( 0, 0, - 0.2 );
|
|
@@ -150,6 +155,8 @@
|
|
|
|
|
|
function render() {
|
|
function render() {
|
|
|
|
|
|
|
|
+ requestAnimationFrame( render );
|
|
|
|
+
|
|
lutPass.enabled = params.enabled && Boolean( lutMap[ params.lut ] );
|
|
lutPass.enabled = params.enabled && Boolean( lutMap[ params.lut ] );
|
|
lutPass.intensity = params.intensity;
|
|
lutPass.intensity = params.intensity;
|
|
if ( lutMap[ params.lut ] ) {
|
|
if ( lutMap[ params.lut ] ) {
|