1. 개요[편집]
| 베지어 곡선 Bézier Curve | |
|---|---|
| 분야 | 기하 모델링 × 컴퓨터 그래픽스 × CAD |
| 이름 유래 | 피에르 베지어 (르노), 폴 드 카스텔조 (시트로엥) |
| 기저 함수 | 번스타인 다항식 |
| 핵심 알고리즘 | de Casteljau 알고리즘 |
| 대표 용도 | 폰트 외곽선, 벡터 그래픽, 애니메이션 이징 |
자동차 차체를 손으로 깎던 시대를, 제어점 네 개가 끝냈다.
베지어 곡선(Bézier curve)은 몇 개의 제어점(control point)과 그에 대응하는 번스타인 다항식(Bernstein polynomial)의 가중합으로 정의되는 매끄러운 매개변수 곡선이다. 개의 제어점 에 대해 매개변수 의 곡선은 다음과 같이 정의된다.
곡선은 항상 제어점들이 이루는 볼록 껍질(convex hull) 안에 얌전히 갇혀 있고, 시작점과 끝점은 정확히 과 을 지난다. 제어점을 마우스로 끌면 곡선이 직관적으로 따라오기 때문에, 폰트·벡터 그래픽·CAD·애니메이션 어디서나 곡선을 다룰 때 가장 먼저 소환되는 도구다. 포토샵의 펜 툴, 일러스트레이터의 패스, 그 뒤에는 전부 이 다항식이 있다.
2. 역사와 번스타인 다항식[편집]
베지어 곡선은 이름과 달리 한 사람의 발명이 아니다. 1950~60년대 프랑스 자동차 회사 두 곳이 거의 동시에 같은 아이디어에 도달했다. 시트로엥의 수학자 폴 드 카스텔조(Paul de Casteljau)가 1959년에 먼저 알고리즘을 만들었지만 회사가 기밀로 묻어버렸고, 르노의 엔지니어 피에르 베지어(Pierre Bézier)가 이를 대중에 발표하면서 그의 이름이 붙었다.1 곡선 정의의 핵심 알고리즘에는 드 카스텔조의 이름이, 곡선 자체에는 베지어의 이름이 붙은 이 어정쩡한 타협은 지금도 그대로다.
수학적 뿌리는 훨씬 오래됐다. 계수로 쓰인 번스타인 기저 함수는 1912년 세르게이 번스타인(Sergei Bernstein)이 바이어슈트라스 근사 정리를 증명하려고 도입한 것이다.
이 함수들은 임의의 에서 전부 더하면 1이 되고() 항상 음수가 아니다. 바로 이 1의 분할(partition of unity) 성질이 곡선을 볼록 껍질 안에 가두는 마법의 원천이다. 무게중심의 가중평균은 무게들 바깥으로 나갈 수 없으니까.
3. de Casteljau 알고리즘[편집]
베지어 곡선 위의 한 점을 실제로 계산할 때는 앞의 다항식을 직접 전개하지 않고 de Casteljau 알고리즘을 쓴다. 인접한 제어점들을 매개변수 비율로 선형 보간하는 것을 반복해서, 삼각형처럼 점들을 줄여 나가다 마지막 하나가 남으면 그게 곡선 위의 점이다.
이 방법은 수치적으로 안정적이고(반복되는 게 보간뿐이라 오차 증폭이 없다), 부가적으로 곡선을 임의의 에서 두 개의 베지어 곡선으로 정확히 쪼개는 분할(subdivision)도 공짜로 준다. 렌더링 엔진이 곡선을 화면에 그릴 때 재귀적으로 분할해 충분히 평평해지면 직선으로 근사하는(flattening) 방식이 바로 이 성질을 써먹는다.
4. 3차 베지어 곡선[편집]
실무에서 압도적으로 많이 쓰이는 건 제어점 4개짜리 3차 베지어 곡선(cubic Bézier)이다.
과 이 양 끝점, 과 가 양 끝에서의 접선 방향과 세기를 결정하는 “손잡이(handle)“다. 3차인 이유는 명확하다. 1차·2차는 S자 곡선(변곡점)을 만들 수 없고, 4차 이상은 자유도가 남아돌아 다루기 번거롭다. 3차는 변곡점 하나를 표현할 수 있으면서 제어가 직관적인 최소 차수라 국룰로 정착했다. CSS의 cubic-bezier() 이징 함수, 폰트 파일(TrueType은 2차, PostScript/OpenType CFF는 3차)이 전부 이걸 쓴다.2
5. 폰트·CAD·애니메이션에서의 활용[편집]
- 폰트 외곽선: 우리가 읽는 거의 모든 디지털 글자의 윤곽선은 베지어 곡선 조각들의 연결이다. TrueType은 2차 베지어, PostScript Type 1과 OpenType CFF는 3차 베지어를 쓴다. “ㅎ”의 동그라미 하나도 결국 제어점 몇 개다.
- 벡터 그래픽·CAD: SVG의
C,Q명령, 일러스트레이터·인크스케이프의 패스, CAD의 스케치 스플라인이 모두 베지어 기반이다. 해상도에 무관하게 매끄러운 게 래스터 이미지 대비 결정적 장점. - 애니메이션 이징: 시간 대 진행도 그래프를 3차 베지어로 정의하면 “천천히 시작해 빠르게 끝나는” 같은 감속·가속 곡선을 만든다. 게임 UI, 웹 트랜지션, 모션 캡처 후처리의 부드러운 감속이 다 여기서 나온다.
6. 스플라인·NURBS로의 확장[편집]
베지어 곡선의 치명적 한계는 제어점 하나만 움직여도 곡선 전체가 영향을 받는 전역성(global support)이다. 제어점이 수십 개인 긴 곡선을 하나의 고차 베지어로 표현하면 통제 불능이 되고, 차수가 올라가면 진동(Runge 현상 비슷한 것)도 심해진다. 그래서 실무에서는 여러 개의 저차 베지어 조각을 이어 붙이되, 이음매에서 접선이 연속되도록 제어점을 배치한다.
이 아이디어를 일반화한 것이 B-스플라인(B-spline)이다. 매듭 벡터(knot vector)를 도입해 각 제어점의 영향 범위를 국소화하고, 조각 간 연속성을 자동으로 보장한다. 여기에 각 제어점에 가중치(weight)를 부여해 원·타원 같은 원뿔곡선까지 정확히 표현하도록 확장한 것이 NURBS(Non-Uniform Rational B-Spline)로, 오늘날 상용 CAD 커널의 사실상 표준 곡면 표현이다.3 베지어는 NURBS의 가장 단순한 특수 경우(매듭이 균일하고 가중치가 전부 1)에 해당한다.
7. 관련 문서[편집]
8. Footnotes[편집]
-
그래서 정확한 이름은 “드 카스텔조 곡선”이어야 공평하다는 볼멘소리가 수학계에 있다. 하지만 곡선을 계산하는 알고리즘에는 드 카스텔조의 이름이 붙었으니, 두 사람이 사이좋게 하나씩 나눠 가진 셈. 회사가 기밀로 묻은 죄가 크다. ↩
-
TrueType이 2차(제어점 3개)를 고른 건 계산이 더 싸기 때문이다. 대신 같은 곡선을 표현하려면 조각이 더 많이 필요하다. PostScript는 표현력을 택하고 TrueType은 렌더링 속도를 택한, 1980년대 폰트 전쟁의 흔적이다. ↩
-
NURBS의 “Non-Uniform”과 “Rational”이 각각 매듭 간격이 균일하지 않아도 된다는 것과 유리함수(가중치) 형태라는 것을 뜻한다. 이름만 보면 무슨 외계어 같지만, 결국 “베지어에 손잡이를 더 많이 단 것”이라고 이해하면 대충 맞다. ↩