From 30d32ad90c3d6d5a84d209869eb83b16e6d2e9c8 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Mon, 27 Apr 2026 15:19:18 +0900 Subject: [PATCH] =?UTF-8?q?fix(study):=20=EC=95=BD=ED=95=9C=20pressure=20?= =?UTF-8?q?=EC=97=90=EC=84=9C=EB=8F=84=20stroke=20=ED=8F=AD=20=EB=B3=B4?= =?UTF-8?q?=EC=9E=A5=20=E2=80=94=20MIN=5FPRESSURE=20floor=20+=20thinning?= =?UTF-8?q?=20=EC=99=84=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 사용자 보고: 쓰다보면 필압이 줄어드는데 그러면 "학" 의 ㅡ 같은 부분이 거의 안 보이고 점선처럼 됨. 사용감 별로. 원인: thinning 0.4 + Pencil pressure 0.2~0.3 (약한 누름) → stroke 폭이 너무 줄어듦. Fix: - normalizePressure 에 MIN_PRESSURE 0.4 floor. pressure 0.05~0.4 도 0.4 로 고정. dynamic range 0.4~1.0. 약한 pressure 에서도 stroke 가 충분히 보임. - thinning 0.4 → 0.28. 폭 변동 줄임. floor 와 조합 시 ±17% 정도 변동. 기존 폭 시작점은 유지 (만년필 nib 변화 명확). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/lib/components/HandwriteCanvas.svelte | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/frontend/src/lib/components/HandwriteCanvas.svelte b/frontend/src/lib/components/HandwriteCanvas.svelte index cf58d1d..49aa600 100644 --- a/frontend/src/lib/components/HandwriteCanvas.svelte +++ b/frontend/src/lib/components/HandwriteCanvas.svelte @@ -214,10 +214,10 @@ if (!path) { const outline = getStroke(pts, { size, - // thinning 0.4 — pressure 변동에 stroke 폭 ±40% 반응. 만년필 nib 처럼 약한 - // 압력 = 가는 선, 강한 압력 = 굵은 선. PRESSURE_WINDOW 8 의 적당한 평균이 - // 마디 차단 + 명확한 굵기 변화 균형. - thinning: 0.4, + // thinning 0.28 — pressure 변동에 stroke 폭 ±28% 반응. MIN_PRESSURE 0.4 + // floor 와 조합하면 약한 pressure 에서도 stroke 가 충분히 보이고, 강한 + // pressure 에선 만년필 nib 같은 굵기 차이. + thinning: 0.28, // smoothing 0.99 — 점 간 보간 사실상 최대. smoothing: 0.99, // streamline 0.86 — input lazy 강하게. 손떨림 보정 + 부드러움. 0.9 이상은 lag. @@ -330,9 +330,14 @@ return e.pointerType === 'pen' || e.pointerType === 'mouse'; } + // 약한 pressure 에서도 stroke 가 너무 가늘어져 *점선* 처럼 보이지 않도록 floor. + // 사용자 보고: 쓰다보면 pressure 가 줄어 "학" 의 ㅡ 같은 부분이 거의 안 보임. + // 0.4 floor + thinning 0.28 = pressure 변동 폭 ±17% 정도, 만년필 변화 명확하면서 + // 너무 가늘어지지 않음. + const MIN_PRESSURE = 0.4; function normalizePressure(p: number | undefined): number { - if (typeof p !== 'number' || !Number.isFinite(p) || p <= 0.05) return 0.5; - return Math.min(1, p); + if (typeof p !== 'number' || !Number.isFinite(p)) return 0.5; + return Math.max(MIN_PRESSURE, Math.min(1, p)); } // 점 사이 거리가 너무 멀면 중간 점 보간 — 빠른 stroke 의 sparse point 점선 방지.