diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-01 15:15:12 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-01 15:15:41 +0200 |
| commit | 8a1d37cf3e8d06dd7af75b5d6f9181afcc797f84 (patch) | |
| tree | 5f0e874abe3ecbdf8e5e2e3243f3743609382490 /apps/web/src/lib/effects | |
| parent | e579ae120290329fd697b50ea9138ffccb65a805 (diff) | |
| download | opencut-8a1d37cf3e8d06dd7af75b5d6f9181afcc797f84.tar.gz | |
fix: align background blur with effect blur intensity scale
Diffstat (limited to 'apps/web/src/lib/effects')
| -rw-r--r-- | apps/web/src/lib/effects/definitions/blur.ts | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/apps/web/src/lib/effects/definitions/blur.ts b/apps/web/src/lib/effects/definitions/blur.ts index 3bfd5e3c..b464db3a 100644 --- a/apps/web/src/lib/effects/definitions/blur.ts +++ b/apps/web/src/lib/effects/definitions/blur.ts @@ -7,11 +7,6 @@ const MAX_STEP = 4; const MAX_EFFECTIVE_SIGMA = MAX_SINGLE_PASS_SIGMA * MAX_STEP; const MAX_ITERATIONS = 8; -/** - * Builds multi-pass gaussian blur passes for a given sigma. - * Shared by the blur effect and background blur — they each - * compute their own sigma from their own intensity scale. - */ export function buildGaussianBlurPasses({ sigmaX, sigmaY, @@ -59,8 +54,10 @@ export function buildGaussianBlurPasses({ return passes; } -function intensityToSigma(intensity: number, resolution: number, reference: number): number { - return (intensity / 5) * (resolution / reference); +export const INTENSITY_TO_SIGMA_DIVISOR = 5; + +export function intensityToSigma({ intensity, resolution, reference }: { intensity: number; resolution: number; reference: number }): number { + return (intensity / INTENSITY_TO_SIGMA_DIVISOR) * (resolution / reference); } function parseIntensity(effectParams: Record<string, unknown>): number { @@ -88,7 +85,7 @@ export const blurEffectDefinition: EffectDefinition = { { shader: GAUSSIAN_BLUR_SHADER, uniforms: ({ effectParams, width }) => ({ - u_sigma: Math.max(intensityToSigma(parseIntensity(effectParams), width, 1920), 0.001), + u_sigma: Math.max(intensityToSigma({ intensity: parseIntensity(effectParams), resolution: width, reference: 1920 }), 0.001), u_step: 1, u_direction: [1, 0], }), @@ -96,7 +93,7 @@ export const blurEffectDefinition: EffectDefinition = { { shader: GAUSSIAN_BLUR_SHADER, uniforms: ({ effectParams, height }) => ({ - u_sigma: Math.max(intensityToSigma(parseIntensity(effectParams), height, 1080), 0.001), + u_sigma: Math.max(intensityToSigma({ intensity: parseIntensity(effectParams), resolution: height, reference: 1080 }), 0.001), u_step: 1, u_direction: [0, 1], }), @@ -104,9 +101,9 @@ export const blurEffectDefinition: EffectDefinition = { ], buildPasses: ({ effectParams, width, height }) => { const intensity = parseIntensity(effectParams); - return buildGaussianBlurPasses({ - sigmaX: intensityToSigma(intensity, width, 1920), - sigmaY: intensityToSigma(intensity, height, 1080), + return buildGaussianBlurPasses({ + sigmaX: intensityToSigma({ intensity, resolution: width, reference: 1920 }), + sigmaY: intensityToSigma({ intensity, resolution: height, reference: 1080 }), }); }, }, |
