diff --git a/frontend/src/lib/components/HandwriteCanvas.svelte b/frontend/src/lib/components/HandwriteCanvas.svelte index 49aa600..13e421e 100644 --- a/frontend/src/lib/components/HandwriteCanvas.svelte +++ b/frontend/src/lib/components/HandwriteCanvas.svelte @@ -214,18 +214,16 @@ if (!path) { const outline = getStroke(pts, { size, - // 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. streamline: 0.86, simulatePressure: false, last: !isInflight, - start: { cap: true, taper: 0 }, - end: { cap: true, taper: 0 }, + // 만년필 nib 효과: 시작은 짧게 가늘게 (nib 이 종이에 닿는 순간), 끝은 좀 + // 더 길게 가늘어짐 (nib 이 종이에서 떨어질 때). easing ease-out 으로 + // 빠르게 굵어졌다 천천히 안정 → Notability felt. + start: { cap: true, taper: size * 0.3, easing: (t) => t * (2 - t) }, + end: { cap: true, taper: size * 0.5, easing: (t) => t * (2 - t) }, }); if (outline.length < 2) return; path = new Path2D(getSvgPathFromStroke(outline));