Skip to content
This repository was archived by the owner on Nov 12, 2025. It is now read-only.

Commit 3a79e5e

Browse files
committed
wip : postprocessing
1 parent b00c355 commit 3a79e5e

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

src/components/postprocessing/vanruesc/Effect.js

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { defineComponent, inject, onMounted, onUnmounted } from 'vue'
1+
import { defineComponent, inject, onMounted, onUnmounted, watch } from 'vue'
22
import { LoadingManager } from 'three'
33
import { BloomEffect, DepthOfFieldEffect, EdgeDetectionMode, GodRaysEffect, SMAAEffect, SMAAImageLoader, SMAAPreset } from 'postprocessing'
44
import { EffectPassInjectionKey } from './EffectPass'
@@ -22,7 +22,7 @@ export default defineComponent({
2222
const effectIndex = effectPass.getEffectIndex()
2323

2424
const initEffect = (params) => {
25-
effect = createEffect(effectPass, props.type, props.options, params)
25+
effect = createEffect(effectPass, props, params)
2626
if (!effect) {
2727
console.error('Invalid effect type')
2828
return
@@ -52,34 +52,51 @@ export default defineComponent({
5252
render() { return [] },
5353
})
5454

55-
function createEffect(effectPass, type, options, assets) {
55+
function createEffect(effectPass, props, assets) {
5656
let effect
57-
switch (type) {
57+
switch (props.type) {
5858
case 'bloom' :
59-
effect = new BloomEffect(options)
59+
effect = createBloomEffect(props)
6060
break
6161
case 'dof' :
62-
effect = new DepthOfFieldEffect(effectPass.composer.renderer, options)
62+
effect = createDepthOfFieldEffect(effectPass, props)
6363
break
6464
case 'godrays' :
65-
effect = createGodraysEffect(effectPass, options)
65+
effect = createGodraysEffect(effectPass, props)
6666
break
6767
case 'smaa' :
68-
effect = createSmaaEffect(options, assets)
68+
effect = createSmaaEffect(props, assets)
6969
break
7070
}
7171
return effect
7272
}
7373

74-
function createSmaaEffect(options, assets) {
74+
function createBloomEffect(props) {
75+
const effect = new BloomEffect(props.options)
76+
watch(() => props.options.luminanceThreshold, (value) => { effect.luminanceMaterial.threshold = value })
77+
watch(() => props.options.luminanceSmoothing, (value) => { effect.luminanceMaterial.smoothing = value })
78+
watch(() => props.options.intensity, (value) => { effect.intensity = value })
79+
return effect
80+
}
81+
82+
function createDepthOfFieldEffect(effectPass, props) {
83+
const effect = new DepthOfFieldEffect(effectPass.composer.renderer, props.options)
84+
const uniforms = effect.circleOfConfusionMaterial.uniforms
85+
watch(() => props.options.focusDistance, (value) => { uniforms.focusDistance.value = value })
86+
watch(() => props.options.focalLength, (value) => { uniforms.focalLength.value = value })
87+
watch(() => props.options.bokehScale, (value) => { effect.bokehScale = value })
88+
return effect
89+
}
90+
91+
function createSmaaEffect(props, assets) {
7592
const { smaaSearch, smaaArea } = assets
76-
const params = [options.preset ?? SMAAPreset.HIGH, options.edgeDetectionMode ?? EdgeDetectionMode.COLOR]
93+
const params = [props.options.preset ?? SMAAPreset.HIGH, props.options.edgeDetectionMode ?? EdgeDetectionMode.COLOR]
7794
return new SMAAEffect(smaaSearch, smaaArea, ...params)
7895
}
7996

80-
function createGodraysEffect(effectPass, options) {
81-
const opts = { ...options }
82-
const { lightSource } = options
97+
function createGodraysEffect(effectPass, props) {
98+
const opts = { ...props.options }
99+
const { lightSource } = props.options
83100
if (typeof lightSource !== 'string') {
84101
console.error('Invalid lightSource')
85102
return

src/components/postprocessing/vanruesc/EffectComposer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { inject, onUnmounted, provide } from 'vue'
22
import { Clock } from 'three'
33
import { EffectComposer } from 'postprocessing'
44
import { RendererInjectionKey } from '../../../../build/trois.module.js'
5+
// import { RendererInjectionKey } from '../../../core'
56

67
export const ComposerInjectionKey = Symbol('Composer')
78

0 commit comments

Comments
 (0)