fix(study): 압력 일관성 + dot 제거 — thinning 0.18, window 12, cap false
사용자 보고: 필압이 너무 차이남 (stroke 마다 굵기 들쭉날쭉) + stroke 끝에 dot 점. 종이 만년필 reference 와 비교 시 우리 앱이 작은 압력 변동에 너무 민감. Fix: - thinning 0.28 → 0.18. 폭 변동 ±18%. 작은 압력 차이가 큰 굵기로 변환되지 않음. - PRESSURE_WINDOW 8 → 12. 평균 더 안정 → stroke 간 일관성. - cap: true → false. round cap 이 짧은 stroke 에서 dot 처럼 보이던 회귀 제거. taper 가 끝을 자연스럽게 마무리하므로 cap 불필요. - start.taper size*0.15 → 0.2. end.taper size*0.3 → 0.4. cap 없으니 taper 가 직접 마무리 — 살짝 더 길게 두어 만년필 nib felt 유지. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -214,18 +214,18 @@
|
||||
if (!path) {
|
||||
const outline = getStroke(pts, {
|
||||
size,
|
||||
thinning: 0.28,
|
||||
// thinning 0.18 — 압력 차이에 stroke 폭 ±18% 반응. 사용자 보고 "필압 너무
|
||||
// 차이나" = 작은 압력 변동이 큰 굵기 차이로 변환되어 일관성 없음. 0.28 →
|
||||
// 0.18 로 줄여 stroke 간 일관성 강화. PRESSURE_WINDOW 12 평균으로 보정.
|
||||
thinning: 0.18,
|
||||
smoothing: 0.99,
|
||||
// streamline 0.75 — 0.86 은 짧은 stroke (작은 글자) 에서 lag 누적으로 펜
|
||||
// 위치를 따라오지 못해 stroke 가 부서져 보임. 0.75 가 부드러움 + 짧은
|
||||
// stroke 정확성 균형.
|
||||
streamline: 0.75,
|
||||
simulatePressure: false,
|
||||
last: !isInflight,
|
||||
// taper 짧게 — 작은 글자 stroke (size × 1~2 길이) 에서 taper 영역이 전체를
|
||||
// 차지하지 않도록. nib felt 는 유지하되 짧은 stroke 도 명확히.
|
||||
start: { cap: true, taper: size * 0.15, easing: (t) => t * (2 - t) },
|
||||
end: { cap: true, taper: size * 0.3, easing: (t) => t * (2 - t) },
|
||||
// cap: false — stroke 끝의 round cap 이 짧은 stroke 에선 dot 처럼 보이는
|
||||
// 회귀. taper 가 stroke 끝을 자연스럽게 마무리하므로 cap 불필요.
|
||||
start: { cap: false, taper: size * 0.2, easing: (t) => t * (2 - t) },
|
||||
end: { cap: false, taper: size * 0.4, easing: (t) => t * (2 - t) },
|
||||
});
|
||||
if (outline.length < 2) return;
|
||||
path = new Path2D(getSvgPathFromStroke(outline));
|
||||
@@ -350,7 +350,7 @@
|
||||
// 살짝 변동시켜 thinning 적용 시 *점 간 micro 폭 변동 = 마디* 일으키던 회귀를
|
||||
// 차단. window 평균은 큰 흐름만 반영, 매 점 변동은 1/N 수준. 사용자 보고 "선
|
||||
// 사이사이 애매한 끊어짐" 의 원인이었음.
|
||||
const PRESSURE_WINDOW = 8;
|
||||
const PRESSURE_WINDOW = 12;
|
||||
function smoothPressureWindow(pts: Point[], current: number): number {
|
||||
let sum = current;
|
||||
let count = 1;
|
||||
|
||||
Reference in New Issue
Block a user