1
0
mirror of https://github.com/troisjs/trois.git synced 2024-11-24 04:12:02 +08:00

Merge branch 'upstream' into raycast-update

This commit is contained in:
Sander Moolin 2021-03-26 09:40:49 -04:00
commit 157d918728
15 changed files with 66 additions and 19 deletions

View File

@ -3,16 +3,16 @@
*Trois* is a french word, it means *Three*. *Trois* is a french word, it means *Three*.
<p> <p>
<a href="https://troisjs.github.io/little-planet/"><img src="/screenshots/little-planet.jpg" width="30%" /></a>
<a href="https://troisjs.github.io/examples/demos/3.html"><img src="/screenshots/troisjs_1.jpg" width="30%" /></a> <a href="https://troisjs.github.io/examples/demos/3.html"><img src="/screenshots/troisjs_1.jpg" width="30%" /></a>
<a href="https://troisjs.github.io/examples/demos/4.html"><img src="/screenshots/troisjs_3.jpg" width="30%" /></a> <a href="https://troisjs.github.io/examples/demos/4.html"><img src="/screenshots/troisjs_3.jpg" width="30%" /></a>
<a href="https://troisjs.github.io/examples/demos/1.html"><img src="/screenshots/troisjs_4.jpg" width="30%" /></a> <!-- <a href="https://troisjs.github.io/examples/demos/1.html"><img src="/screenshots/troisjs_4.jpg" width="30%" /></a> -->
<a href="https://troisjs.github.io/examples/demos/2.html"><img src="/screenshots/troisjs_5.jpg" width="30%" /></a> <a href="https://troisjs.github.io/examples/demos/2.html"><img src="/screenshots/troisjs_5.jpg" width="30%" /></a>
<a href="https://troisjs.github.io/examples/materials/2.html"><img src="/screenshots/troisjs_2.jpg" width="30%" /></a> <a href="https://troisjs.github.io/examples/materials/2.html"><img src="/screenshots/troisjs_2.jpg" width="30%" /></a>
<a href="https://troisjs.github.io/examples/loop.html"><img src="/screenshots/troisjs_6.jpg" width="30%" /></a> <a href="https://troisjs.github.io/examples/loop.html"><img src="/screenshots/troisjs_6.jpg" width="30%" /></a>
<a href="https://troisjs.github.io/examples/shadows.html"><img src="/screenshots/troisjs_7.jpg" width="30%" /></a> <a href="https://troisjs.github.io/examples/shadows.html"><img src="/screenshots/troisjs_7.jpg" width="30%" /></a>
<a href="https://troisjs.github.io/examples/demos/5.html"><img src="/screenshots/troisjs_8.jpg" width="30%" /></a> <a href="https://troisjs.github.io/examples/demos/5.html"><img src="/screenshots/troisjs_8.jpg" width="30%" /></a>
<a href="https://troisjs.github.io/examples/lights.html"><img src="/screenshots/troisjs_9.jpg" width="30%" /></a> <a href="https://troisjs.github.io/examples/lights.html"><img src="/screenshots/troisjs_9.jpg" width="30%" /></a>
</p> </p>
- 💻 Examples (wip) : https://troisjs.github.io/ ([sources](https://github.com/troisjs/troisjs.github.io/tree/master/src/components)) - 💻 Examples (wip) : https://troisjs.github.io/ ([sources](https://github.com/troisjs/troisjs.github.io/tree/master/src/components))

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

View File

@ -37,8 +37,7 @@ export default {
height: this.three.size.height, height: this.three.size.height,
}; };
const pass = new BokehPass(this.three.scene, this.three.camera, params); const pass = new BokehPass(this.three.scene, this.three.camera, params);
this.passes.push(pass); this.completePass(pass);
this.pass = pass;
}, },
__hmrId: 'BokehPass', __hmrId: 'BokehPass',
}; };

View File

@ -1,5 +1,6 @@
export default { export default {
inject: ['three', 'passes'], inject: ['three', 'passes'],
events: ['ready'],
beforeMount() { beforeMount() {
if (!this.passes) { if (!this.passes) {
console.error('Missing parent EffectComposer'); console.error('Missing parent EffectComposer');
@ -8,6 +9,13 @@ export default {
unmounted() { unmounted() {
if (this.pass.dispose) this.pass.dispose(); if (this.pass.dispose) this.pass.dispose();
}, },
methods: {
completePass(pass) {
this.passes.push(pass);
this.pass = pass;
this.$emit('ready', pass);
}
},
render() { render() {
return []; return [];
}, },

View File

@ -6,8 +6,7 @@ export default {
extends: EffectPass, extends: EffectPass,
mounted() { mounted() {
const pass = new ShaderPass(FXAAShader); const pass = new ShaderPass(FXAAShader);
this.passes.push(pass); this.completePass(pass);
this.pass = pass;
// resize will be called in three init // resize will be called in three init
this.three.onAfterResize(this.resize); this.three.onAfterResize(this.resize);

View File

@ -29,8 +29,7 @@ export default {
}, },
mounted() { mounted() {
const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale);
this.passes.push(pass); this.completePass(pass);
this.pass = pass;
}, },
__hmrId: 'FilmPass', __hmrId: 'FilmPass',
}; };

View File

@ -22,8 +22,7 @@ export default {
}); });
}); });
this.passes.push(pass); this.completePass(pass);
this.pass = pass;
}, },
__hmrId: 'HalftonePass', __hmrId: 'HalftonePass',
}; };

View File

@ -11,8 +11,7 @@ export default {
console.error('Missing Camera'); console.error('Missing Camera');
} }
const pass = new RenderPass(this.three.scene, this.three.camera); const pass = new RenderPass(this.three.scene, this.three.camera);
this.passes.push(pass); this.completePass(pass);
this.pass = pass;
}, },
__hmrId: 'RenderPass', __hmrId: 'RenderPass',
}; };

View File

@ -6,8 +6,7 @@ export default {
mounted() { mounted() {
// three size is not set yet, but this pass will be resized by effect composer // three size is not set yet, but this pass will be resized by effect composer
const pass = new SMAAPass(this.three.size.width, this.three.size.height); const pass = new SMAAPass(this.three.size.width, this.three.size.height);
this.passes.push(pass); this.completePass(pass);
this.pass = pass;
}, },
__hmrId: 'SMAAPass', __hmrId: 'SMAAPass',
}; };

39
src/effects/SSAOPass.js Normal file
View File

@ -0,0 +1,39 @@
import { SSAOPass } from 'three/examples/jsm/postprocessing/SSAOPass.js';
import EffectPass from './EffectPass.js';
export default {
extends: EffectPass,
props: {
scene: null,
camera: null,
options: {
type: Object,
default: () => ({})
}
},
mounted() {
const pass = new SSAOPass(
this.scene || this.three.scene,
this.camera || this.three.camera,
this.three.size.width,
this.three.size.height
);
this.completePass(pass);
for (let key of Object.keys(this.options)) {
this.pass[key] = this.options[key];
}
// resize will be called in three init
this.three.onAfterResize(this.resize);
},
unmounted() {
this.three.offAfterResize(this.resize);
},
methods: {
resize() {
this.pass.width = this.three.size.width
this.pass.height = this.three.size.height
},
},
__hmrId: 'SSAOPass',
};

View File

@ -39,6 +39,10 @@ export default {
this.pass.setSize = (width, height) => { this.pass.setSize = (width, height) => {
uniforms.texSize.value.set(width, height); uniforms.texSize.value.set(width, height);
}; };
// emit ready event with two passes - do so manually in this file instead
// of calling `completePass` like in other effect types
this.$emit('ready', [this.pass, this.pass1])
}, },
methods: { methods: {
updateFocusLine() { updateFocusLine() {

View File

@ -17,8 +17,7 @@ export default {
mounted() { mounted() {
const size = new Vector2(this.three.size.width, this.three.size.height); const size = new Vector2(this.three.size.width, this.three.size.height);
const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold); const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold);
this.passes.push(pass); this.completePass(pass);
this.pass = pass;
}, },
__hmrId: 'UnrealBloomPass', __hmrId: 'UnrealBloomPass',
}; };

View File

@ -10,12 +10,13 @@ export default {
strength: { type: Number, default: 0.5 }, strength: { type: Number, default: 0.5 },
}, },
mounted() { mounted() {
this.pass = new ShaderPass(ZoomBlur); const pass = new ShaderPass(ZoomBlur);
this.passes.push(this.pass);
const uniforms = this.uniforms = this.pass.uniforms; const uniforms = this.uniforms = pass.uniforms;
bindProp(this, 'center', uniforms.center, 'value'); bindProp(this, 'center', uniforms.center, 'value');
bindProp(this, 'strength', uniforms.strength, 'value'); bindProp(this, 'strength', uniforms.strength, 'value');
this.completePass(pass);
}, },
__hmrId: 'ZoomBlurPass', __hmrId: 'ZoomBlurPass',
}; };

View File

@ -6,6 +6,7 @@ export { default as FilmPass } from './FilmPass.js';
export { default as FXAAPass } from './FXAAPass.js'; export { default as FXAAPass } from './FXAAPass.js';
export { default as HalftonePass } from './HalftonePass.js'; export { default as HalftonePass } from './HalftonePass.js';
export { default as SMAAPass } from './SMAAPass.js'; export { default as SMAAPass } from './SMAAPass.js';
export { default as SSAOPass } from './SSAOPass.js';
export { default as TiltShiftPass } from './TiltShiftPass.js'; export { default as TiltShiftPass } from './TiltShiftPass.js';
export { default as UnrealBloomPass } from './UnrealBloomPass.js'; export { default as UnrealBloomPass } from './UnrealBloomPass.js';
export { default as ZoomBlurPass } from './ZoomBlurPass.js'; export { default as ZoomBlurPass } from './ZoomBlurPass.js';

View File

@ -70,6 +70,7 @@ export const TroisJSVuePlugin = {
'RenderPass', 'RenderPass',
'SAOPass', 'SAOPass',
'SMAAPass', 'SMAAPass',
'SSAOPass',
'TiltShiftPass', 'TiltShiftPass',
'UnrealBloomPass', 'UnrealBloomPass',
'ZoomBlurPass', 'ZoomBlurPass',