SVG Graphics Geometry
Guide
css-matrix
Guide
css-matrix
  • Part 0. SVG 기초

    • SVG란 무엇인가
    • viewBox와 user space
    • transform attribute와 matrix
    • SVG 문서 구조와 기본 도형
  • Part 1. Path grammar

    • path d 명령어 — M, L, Z
    • H, V — 축 정렬 직선
    • C — cubic Bézier
    • Q — quadratic Bézier
    • S, T — smooth continuation
    • A — elliptical arc
    • path bounding box
  • Part 2. Stroke geometry

    • 점에서 stroke까지의 거리
    • join, cap, miter limit
    • stroke align과 outline 개념
    • miter length 공식
  • Part 3. Fill rules

    • nonzero vs evenodd
    • fill hit testing
  • Part 4. Path sampling

    • flatten tolerance
    • path length
    • point at length와 tangent
  • Part 5. Paint servers

    • linearGradient 좌표
    • clipPath와 mask 개념
  • Part 6. Path editor capstone

    • path handle 모델
    • handle hit testing
    • handle drag로 segment 갱신
    • mini path editor — SVG round-trip
  • Part 7. Fill & winding deep dive

    • winding vs ray casting
    • compound path — 여러 subpath
    • self-intersection
    • path boolean
    • fill vs stroke hit 우선순위
    • scanline parity
  • Part 8. Pattern & gradient

    • radialGradient
    • pattern tile
    • gradientUnits와 spreadMethod
  • Part 9. SVG filter & Figma effects

    • Figma DROP_SHADOW → SVG filter
    • filter chain 개요
    • blur · offset · merge
    • inner shadow
    • layer blur vs background blur
    • Figma effect 매핑표 전체
  • Part 10. Figma ↔ SVG bridge

    • vector network vs path d
    • fill · stroke export
    • boolean operations export
    • mask · clip export
  • Part 11. Icon design

    • pixel grid · optical alignment
    • fill vs stroke icons
    • symbol · sprite · currentColor
    • path simplification
  • Appendix A. SVG in CSS

    • currentColor · CSS theming
    • sprite data URI
    • SVG optimization pipeline
  • Appendix B. Engine extras

    • dash offset animation
    • adaptive flatten
    • arc → cubic 변환
    • multi-subpath editing
  • Part 12. Foundations primer

    • capability map
    • coordinate stack
  • Part 13. Figma ↔ SVG (deep)

    • Figma paint gap map
    • radial · angular gradient export
    • image · pattern fill
    • stroke align export
    • blend mode · layer opacity
  • Part 14. SVG spec breadth

    • markers — 화살표와 dash 끝
    • text · textPath
    • paint-order · opacity · filters
    • arc flatten 통합
  • Part 15. Curve calculus

    • de Casteljau subdivision
    • flatness와 chord error
    • 곡률 κ와 법선
    • arc center parameterization
    • G¹ smooth — S와 T
    • shoelace signed area
  • Part 16. Intersection & proximity

    • segment intersection
    • line ∩ cubic · curve ∩ curve
    • closest point on curve
  • Part 17. Offset curves

    • normal offset sampling
    • offset cusps
  • Part 18. Transform algebra

    • affine inverse & decompose
    • transform path vs group
  • Part 19. Rational curves

    • circle as cubic — κ constant
    • rational curves & exact arcs
  • Part 20. Tessellation & pixels

    • convex triangulation · ear clipping
    • evenodd parity → pixels
  • Part 21. Compositing math

    • Gaussian blur kernel
    • Porter–Duff & premultiplied α
  • Part 22. Math topic map

    • SVG 수학 주제 지도
  • Part 23. SVG animation

    • SMIL — animate 속성
    • SMIL — animateTransform
    • SMIL — animateMotion
    • stroke dash draw-on
    • CSS offset-path motion
    • path morph
    • JS motion along path
  • Part 24. Motion precision

    • uniform speed along path
    • cubic–cubic intersection
    • SVGPathElement length API
    • SMIL keyTimes & keySplines
    • degree elevation Q→C
  • Part 25. GPU mesh & WAAPI

    • triangulation with holes
    • WAAPI + SVG attributes
    • evenodd fill + triangle mesh

clipPath와 mask 개념

같은 path geometry라도 clip과 mask는 렌더 파이프라인에서 다른 단계입니다. clip은 014 fill과 같은 안/밖 판정, mask는 알파로 부드럽게 가립니다.

데모에서 볼 것

toolbar mode:

mode효과
none파란 rect + 텍스트 전체 표시
clipclip-path: url(#clip-circle) — 원 밖 하드 제거
opacity-maskmask: url(#fade-mask) — gradient mask로 소프트 fade

readout:

  • none — full rectangle visible
  • clip — binary inside/outside
  • opacity-mask — luminance → alpha

clipPath — 하드 마스크

<clipPath id="clip-circle">
  <circle cx="320" cy="210" r="120"/>
</clipPath>
<g clip-path="url(#clip-circle)"> … content … </g>

수학 (path clip):

import { classifyPointInPath, parsePathD } from "svg-matrix-core";

const clipSegs = parsePathD(clipPathD);
const { inside } = classifyPointInPath(pixel, clipSegs, "nonzero");
// inside → 그리기, outside → discard (alpha = 0)
  • fill-rule on clip path — 014
  • stroke는 clip에 보통 fill 영역만 사용 (SVG clip rule)

006 inside stroke: clipPath + doubled stroke 패턴.

mask — 알파 마스크

<mask id="fade-mask">
  <rect fill="url(#fade)" …/>  <!-- white → opaque, transparent → hole -->
</mask>
  • grayscale / alpha — edge feather, gradient vignette
  • clip과 달리 반투명 가능
  • mask-type: luminance | alpha (SVG2)

데모 fade-mask: linear white → transparent.

paint order (개념)

geometry
  → defs (clipPath, mask, filter, gradient)
  → clip-path on group
  → mask on group
  → fill / stroke
  → filter effect

편집기 레이어 트리 = 이 순서를 attribute로 표현 (043 Figma export).

Figma bridge

import { figmaClipToSvgMarkup, figmaMaskToSvgMarkup } from "svg-matrix-core";

figmaClipToSvgMarkup({ pathD: "M … Z" }, "figma-clip");
// { clipPathId, clipPathAttr, markup }

figmaMaskToSvgMarkup({ pathD: "M … Z" }, "figma-mask");
// { maskId, maskAttr, markup } — path fill white in mask

clip vs mask vs hit

clipmaskfill hit
판정winding (015)alpha samplepointInPath
결과0 or 10..1pick target
단계renderrenderinteraction

stroke hit(004)은 clip 이후 픽셀이 보일 때만 의미 있습니다.

Core API

함수역할
classifyPointInPath, pointInPathclip geometry test
figmaClipToSvgMarkup, figmaMaskToSvgMarkupexport markup
parsePathDclip path d

관련

  • 014 · 006 · 019 · 043 · 064 paint-order

오늘의 핵심

clip = binary winding, mask = alpha 곱. 둘 다 path geometry를 쓰지만 편집기에서는 레이어 스택 단계가 다릅니다.

최근 수정: 26. 5. 17. PM 4:35
Contributors: jinho.park.s3, Cursor
Prev
linearGradient 좌표