UNPKG

@vci/quick-three

Version:

quick three

58 lines (57 loc) 2.57 kB
import { mergeDeep, uuid } from "@vci/helper"; import { BlendFunction, SelectiveBloomEffect } from "postprocessing"; import { createTweenModifier } from "./../../helper/TweenHelper"; // 特效|虚幻 function createBloomEffect(option) { const { qt, name, gui, paramsEffect } = mergeDeep( { name: "BloomEffect", qt: null, gui: null, paramsEffect: { opacity: 1, blendFunction: BlendFunction.ADD, mipmapBlur: true, luminanceThreshold: 0, luminanceSmoothing: 0.2, intensity: 1, radius: .85 } }, option ); const effect = new SelectiveBloomEffect(qt.scene, qt.camera, paramsEffect); effect.blendMode.opacity.value = paramsEffect.opacity; effect.inverted = true; effect._intensity = paramsEffect.intensity; qt.effect[effect.uuid = uuid()] = effect; if (qt.debug) { const menu = gui.addFolder(name); menu.close(); const blendMode = effect.blendMode; menu.add(blendMode.opacity, "value", 0.0, 1.0, 0.01).name("opacity").listen(); menu.add(blendMode, "blendFunction", BlendFunction).name("blend mode").listen(); menu.add(effect, "intensity", 0.0, 10.0, 0.01).onChange(value => effect.intensity = Number(value)).listen(); menu.add(effect.mipmapBlurPass, "radius", 0.0, 1.0, 0.001).onChange(value => effect.mipmapBlurPass.radius = Number(value)).listen(); const folderLuminance = menu.addFolder("Luminance"); folderLuminance.add(effect.luminancePass, "enabled").onChange(value => effect.luminancePass.enabled = value).listen(); folderLuminance.add(effect.luminanceMaterial, "threshold", 0.0, 1.0, 0.001).name("threshold").onChange(value => effect.luminanceMaterial.threshold = Number(value)).listen(); folderLuminance.add(effect.luminanceMaterial, "smoothing", 0.0, 1.0, 0.001).name("smoothing").onChange(value => effect.luminanceMaterial.smoothing = Number(value)).listen(); const folderSelection = menu.addFolder("Selection"); folderSelection.add(effect, "inverted").onChange(value => effect.inverted = value).listen(); folderSelection.add(effect, "ignoreBackground").onChange(value => effect.ignoreBackground = value).listen(); } // 调整强度 effect.modifyIntensity = createTweenModifier( qt.tw, { effect, keyModifyProperty: "intensity", twKey: `effectBloom.modifyIntensity@${effect.uuid}` } ); // 重置强度 effect.resetIntensity = async twOption => await effect.modifyIntensity(effect._intensity, twOption); return effect; } export { createBloomEffect };