← polaris_mcfg · GitHub

Polaris MCFG — Live demo

NotoSansKR & Pretendard 두 OFL 폰트로 메트릭 교차 합성한 결과. 같은 메트릭 그룹의 두 폰트는 외형이 달라도 동일 위치에서 줄바꿈해야 합니다. 폰트 파일은 데모 텍스트에 맞춰 subset 후 WOFF2로 압축됨 (~50 KB/font).

합성 폰트는 --scale-glyph center 옵션으로 빌드되어, advance 박스가 디자인 폰트 원래 폭과 다를 때 글리프를 박스 중앙에 정렬합니다. advance(라인브레이크)는 그대로 보존되며, 글리프 외형도 변형 없이 위치만 평행 이동합니다.

NotoSansKR Regular (원본)
Noto outline + Noto metrics
Polaris PNM (합성)
Pretendard outline + Noto metrics
Pretendard Regular (원본)
Pretendard outline + Pretendard metrics
Polaris NPM (합성)
Noto outline + Pretendard metrics

1. 같은 텍스트, 4 폰트

동일한 한 줄 텍스트가 폰트별로 어떻게 보이는지. 색상은 메트릭 그룹을 의미합니다 (외형 그룹이 아님).

Hangul pangram

Noto (orig)다람쥐 헌 쳇바퀴에 타고파.
Polaris PNM다람쥐 헌 쳇바퀴에 타고파.
Pretendard (orig)다람쥐 헌 쳇바퀴에 타고파.
Polaris NPM다람쥐 헌 쳇바퀴에 타고파.

English pangram

Noto (orig)The quick brown fox jumps over the lazy dog.
Polaris PNMThe quick brown fox jumps over the lazy dog.
Pretendard (orig)The quick brown fox jumps over the lazy dog.
Polaris NPMThe quick brown fox jumps over the lazy dog.

Mixed script

Noto (orig)소스 폰트 메트릭 호환성 (compat) 검증 — 2026.
Polaris PNM소스 폰트 메트릭 호환성 (compat) 검증 — 2026.
Pretendard (orig)소스 폰트 메트릭 호환성 (compat) 검증 — 2026.
Polaris NPM소스 폰트 메트릭 호환성 (compat) 검증 — 2026.

Numerals + punct

Noto (orig)0123456789 ,.:;!?'"()[]{}<>+=−×÷
Polaris PNM0123456789 ,.:;!?'"()[]{}<>+=−×÷
Pretendard (orig)0123456789 ,.:;!?'"()[]{}<>+=−×÷
Polaris NPM0123456789 ,.:;!?'"()[]{}<>+=−×÷

2. 라인브레이크 비교 (핵심)

같은 너비 컨테이너에 같은 텍스트. 같은 메트릭 그룹의 두 폰트는 동일한 위치에서 줄바꿈해야 합니다 — 외형이 달라도.

Group A (Noto 메트릭): Pretendard 외형을 Noto의 UPM(1000)으로 rescale → Noto 메트릭 적용 + GPOS 커닝 + GSUB locl 치환 이식.
Group B (Pretendard 메트릭): Noto 외형을 Pretendard UPM(2048)으로 rescale → Pretendard 메트릭/커닝 적용. (rescale 결과가 Chromium TTF sanitizer와 호환 안 되어 자동으로 WOFF2 컨테이너로 출력.)
아래 컬럼은 모두 lang="ko"로 렌더링됩니다.

Group A — Noto metrics

NotoSansKR (원본)

재배포가 제한된 폰트(상용·사내·한컴 폰트류 등)를 사용하는데, 문제는 폰트별로 다른 메트릭 때문에 동일한 렌더링을 기대할 수가 없다. Polaris MCFG는 소스 폰트로부터 레이아웃에 영향을 미치는 메트릭을 추출하고, 재라이센스 가능한 폰트의 디자인에 이를 결합하여 새로운 폰트를 만든다. 외형은 자유 폰트의 디자인을 따르되, 줄바꿈 위치와 페이지 분할은 원본 소스 폰트와 호환된다. 다람쥐 헌 쳇바퀴에 타고파. The quick brown fox jumps over the lazy dog. 0123456789.

Polaris PNM (Pretendard outline + Noto metrics)

재배포가 제한된 폰트(상용·사내·한컴 폰트류 등)를 사용하는데, 문제는 폰트별로 다른 메트릭 때문에 동일한 렌더링을 기대할 수가 없다. Polaris MCFG는 소스 폰트로부터 레이아웃에 영향을 미치는 메트릭을 추출하고, 재라이센스 가능한 폰트의 디자인에 이를 결합하여 새로운 폰트를 만든다. 외형은 자유 폰트의 디자인을 따르되, 줄바꿈 위치와 페이지 분할은 원본 소스 폰트와 호환된다. 다람쥐 헌 쳇바퀴에 타고파. The quick brown fox jumps over the lazy dog. 0123456789.

↑ 두 컬럼의 줄바꿈 위치가 같아야 정상. 글자의 굵기/형태는 달라도 됨.

Group B — Pretendard metrics

Pretendard (원본)

재배포가 제한된 폰트(상용·사내·한컴 폰트류 등)를 사용하는데, 문제는 폰트별로 다른 메트릭 때문에 동일한 렌더링을 기대할 수가 없다. Polaris MCFG는 소스 폰트로부터 레이아웃에 영향을 미치는 메트릭을 추출하고, 재라이센스 가능한 폰트의 디자인에 이를 결합하여 새로운 폰트를 만든다. 외형은 자유 폰트의 디자인을 따르되, 줄바꿈 위치와 페이지 분할은 원본 소스 폰트와 호환된다. 다람쥐 헌 쳇바퀴에 타고파. The quick brown fox jumps over the lazy dog. 0123456789.

Polaris NPM (Noto outline + Pretendard metrics)

재배포가 제한된 폰트(상용·사내·한컴 폰트류 등)를 사용하는데, 문제는 폰트별로 다른 메트릭 때문에 동일한 렌더링을 기대할 수가 없다. Polaris MCFG는 소스 폰트로부터 레이아웃에 영향을 미치는 메트릭을 추출하고, 재라이센스 가능한 폰트의 디자인에 이를 결합하여 새로운 폰트를 만든다. 외형은 자유 폰트의 디자인을 따르되, 줄바꿈 위치와 페이지 분할은 원본 소스 폰트와 호환된다. 다람쥐 헌 쳇바퀴에 타고파. The quick brown fox jumps over the lazy dog. 0123456789.

↑ 마찬가지로, 두 컬럼의 줄바꿈 위치가 같아야 정상.

3. lang이 라인브레이크에 미치는 영향 (스크립트별 GSUB)

한국어 폰트는 종종 GSUB lookup으로 한국어 스크립트(script=hang) 컨텍스트에서 공백/구두점을 더 넓은 변형으로 치환합니다. 브라우저가 lang="ko"를 감지하면 이 치환이 활성화되어 폰트가 같은 메트릭이라도 라인 너비가 달라집니다. Polaris MCFG는 메트릭(hmtx, OS/2, head 등)만 이식하며 GSUB은 디자인 폰트의 것을 그대로 사용합니다 — 따라서 lang에 따른 치환은 원본 폰트와 합성 폰트가 다르게 동작합니다.

같은 텍스트, 같은 폰트, lang만 다름

Fontlang="en"lang="ko"
NotoSansKR (원본) 한글 사이 영문 mixed text 입니다 한글 사이 영문 mixed text 입니다
Polaris PNM 한글 사이 영문 mixed text 입니다 한글 사이 영문 mixed text 입니다
Pretendard (원본) 한글 사이 영문 mixed text 입니다 한글 사이 영문 mixed text 입니다
Polaris NPM 한글 사이 영문 mixed text 입니다 한글 사이 영문 mixed text 입니다

Noto는 lang="ko"일 때 공백 advance를 약 25% 늘리는 GSUB lookup을 가집니다 (한글-라틴 사이 시각적 균형). Pretendard는 이 lookup이 없습니다.
이 GSUB 차이는 메트릭 추출/적용 범위 밖입니다 — 글리프 substitution 데이터를 이식하려면 outline 데이터 권한(라이센스)이 필요해 의도적으로 제외했습니다.

4. 사이즈 사다리 (10 → 48px)

동일 텍스트를 사이즈별로 나란히. 좌우 너비 차이가 메트릭 차이.

NotoSansKR (orig) | Polaris PNM | Pretendard (orig) | Polaris NPM

10px한 글 English 0123한 글 English 0123한 글 English 0123한 글 English 0123
12px한 글 English 0123한 글 English 0123한 글 English 0123한 글 English 0123
14px한 글 English 0123한 글 English 0123한 글 English 0123한 글 English 0123
18px한 글 English 0123한 글 English 0123한 글 English 0123한 글 English 0123
24px한 글 English 0123한 글 English 0123한 글 English 0123한 글 English 0123
32px한 글 English 0123한 글 English 0123한 글 English 0123한 글 English 0123
48px한 글 English 0123한 글 English 0123한 글 English 0123한 글 English 0123

5. 표 / 숫자 정렬

컬럼 너비가 메트릭에 따라 달라지는지 — 합성된 폰트는 원본 메트릭과 동일한 컬럼 너비를 가져야 합니다.

Date Noto orig Polaris PNM Pretendard orig Polaris NPM %
2026-04-011,234,5671,234,5671,234,5671,234,567+12.3%
2026-04-02987,654987,654987,654987,654-3.45%
2026-04-031,000,0001,000,0001,000,0001,000,000+0.05%
2026-04-04424242420.00%
2026-04-05777,777777,777777,777777,777+88.8%

6. 문단 4분할 비교

동일 너비, 동일 폰트 사이즈. 메트릭 그룹별로 줄바꿈이 일치해야 합니다.

Noto (orig)

재배포가 제한된 폰트(상용·사내·한컴 폰트류 등)를 사용하는데, 문제는 폰트별로 다른 메트릭 때문에 동일한 렌더링을 기대할 수가 없다. Polaris MCFG는 소스 폰트로부터 레이아웃에 영향을 미치는 메트릭을 추출하고, 재라이센스 가능한 폰트의 디자인에 이를 결합하여 새로운 폰트를 만든다. 외형은 자유 폰트의 디자인을 따르되, 줄바꿈 위치와 페이지 분할은 원본 소스 폰트와 호환된다. 다람쥐 헌 쳇바퀴에 타고파. The quick brown fox jumps over the lazy dog. 0123456789.

Polaris PNM

재배포가 제한된 폰트(상용·사내·한컴 폰트류 등)를 사용하는데, 문제는 폰트별로 다른 메트릭 때문에 동일한 렌더링을 기대할 수가 없다. Polaris MCFG는 소스 폰트로부터 레이아웃에 영향을 미치는 메트릭을 추출하고, 재라이센스 가능한 폰트의 디자인에 이를 결합하여 새로운 폰트를 만든다. 외형은 자유 폰트의 디자인을 따르되, 줄바꿈 위치와 페이지 분할은 원본 소스 폰트와 호환된다. 다람쥐 헌 쳇바퀴에 타고파. The quick brown fox jumps over the lazy dog. 0123456789.

Pretendard (orig)

재배포가 제한된 폰트(상용·사내·한컴 폰트류 등)를 사용하는데, 문제는 폰트별로 다른 메트릭 때문에 동일한 렌더링을 기대할 수가 없다. Polaris MCFG는 소스 폰트로부터 레이아웃에 영향을 미치는 메트릭을 추출하고, 재라이센스 가능한 폰트의 디자인에 이를 결합하여 새로운 폰트를 만든다. 외형은 자유 폰트의 디자인을 따르되, 줄바꿈 위치와 페이지 분할은 원본 소스 폰트와 호환된다. 다람쥐 헌 쳇바퀴에 타고파. The quick brown fox jumps over the lazy dog. 0123456789.

Polaris NPM

재배포가 제한된 폰트(상용·사내·한컴 폰트류 등)를 사용하는데, 문제는 폰트별로 다른 메트릭 때문에 동일한 렌더링을 기대할 수가 없다. Polaris MCFG는 소스 폰트로부터 레이아웃에 영향을 미치는 메트릭을 추출하고, 재라이센스 가능한 폰트의 디자인에 이를 결합하여 새로운 폰트를 만든다. 외형은 자유 폰트의 디자인을 따르되, 줄바꿈 위치와 페이지 분할은 원본 소스 폰트와 호환된다. 다람쥐 헌 쳇바퀴에 타고파. The quick brown fox jumps over the lazy dog. 0123456789.

7. 글리프 클로즈업

큰 사이즈에서 외형 차이를 직접 확인. 같은 그룹(같은 색)은 advance 폭이 동일하고, 다른 그룹은 advance가 다릅니다 — 셀의 너비를 보세요.

Noto (orig)
Polaris PNM
Pretendard (orig)
Polaris NPM
Noto (orig)
M
Polaris PNM
M
Pretendard (orig)
M
Polaris NPM
M
Noto (orig)
8
Polaris PNM
8
Pretendard (orig)
8
Polaris NPM
8
Noto (orig)
@
Polaris PNM
@
Pretendard (orig)
@
Polaris NPM
@