.fnt 파일이 말하는 것, 한 줄씩
info는 글꼴 이름과 크기, 여백과 간격을 적습니다. common에는 lineHeight(텍스트 한 줄에서 다음 줄까지 픽셀), base(줄 맨 위에서 베이스라인까지 픽셀), scaleW·scaleH(텍스처 크기), pages가 있습니다. page id=0 file="font.png"는 .fnt 기준 상대 경로로 텍스처를 가리킵니다. char 줄마다 id(10진수 유니코드 코드 포인트), x y width height(텍스처 안 글리프 사각형), xoffset yoffset(펜 위치와 줄 맨 위 기준으로 그 사각형을 그릴 자리), xadvance(그 뒤 펜 이동 거리)가 있습니다. kerning first second amount 줄은 특정 글자 쌍을 조정하는데, 편집 프로젝트는 글자 쌍 커닝을 저장하지만 이미지 시트에는 가져올 커닝 정보가 없습니다.
엔진은 문자열을 그릴 때 펜을 x = 0에서 시작해 글자마다 사각형을 (펜 + xoffset, 줄 맨 위 + yoffset)에 복사하고 펜에 xadvance를 더하며, 다음 줄은 lineHeight만큼 아래에서 시작합니다. 고정 격자 모드에서는 모든 전진 폭이 칸 너비라 고정폭 픽셀 폰트에 맞습니다. 측정 모드는 칸마다 불투명 픽셀(알파 8 초과)만 남기고 오프셋으로 원래 자리에 되돌리며, 잉크 오른쪽 끝에 글리프 간격을 더한 만큼 전진합니다. 공백처럼 빈 칸도 전진합니다.
문자 집합이 아틀라스 크기를 정합니다. ASCII는 95자(U+0020~U+007E), Latin-1은 191자이고, 완성형 한글만 11,172음절, 주요 한중일 한자 블록은 20,992 코드 포인트이므로 한국어·일본어 프리셋은 붙여 넣은 텍스트에 실제로 나오는 글자만 가져옵니다. 부호 있는 거리장(SDF)은 텍셀마다 덮임 정도 대신 글리프 가장자리까지의 거리를 저장해, 셰이더가 다른 크기에서도 날카로운 경계를 자를 수 있게 합니다. Nerulio는 128을 가장자리로, spread 픽셀의 거리를 바이트 범위에 담고, 글리프마다 4배 해상도에서 정확한 거리를 계산하며, MSDF가 아닌 단일 채널 SDF를 만듭니다.
- lineHeight
- 텍스트 한 줄에서 다음 줄까지의 픽셀.
- base
- 줄 맨 위에서 베이스라인까지의 픽셀.
- xoffset / yoffset
- 펜과 줄 맨 위를 기준으로 글리프 사각형을 그리는 위치.
- xadvance
- 글리프를 그린 뒤 펜이 이동하는 거리.
- SDF spread
- 0~255 범위가 담는 거리(픽셀). 128이 글리프 가장자리.
예시: 같은 글리프 세 개를 격자·측정 모드로
A, i, 공백을 위한 8 × 8 칸이 있는 24 × 8 시트, 베이스라인 7. 도구가 쓰는 줄입니다.
common lineHeight=8 base=7 scaleW=24 scaleH=8 pages=1
격자 char id=65 x=0 y=0 width=8 height=8 xoffset=0 yoffset=0 xadvance=8
char id=105 x=8 y=0 width=8 height=8 xoffset=0 yoffset=0 xadvance=8
측정 char id=65 x=1 y=1 width=5 height=6 xoffset=1 yoffset=1 xadvance=7 (1 + 5 + 간격 1)
char id=105 x=11 y=1 width=1 height=6 xoffset=3 yoffset=1 xadvance=5 (3 + 1 + 1)
char id=32 x=16 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=3 (빈 칸: round(8 ÷ 3))
"iA i" 측정 i는 0 + 3 = 3 → 펜 5; A는 5 + 1 = 6 → 펜 12; 공백 → 펜 15; i는 18 → 너비 20px
"iA i" 격자 글리프 4개 × 8 = 32px
측정 폰트는 i를 8px이 아니라 5px 간격으로 놓아 비례 텍스트가 자연스럽게 보입니다. font.json에도 같은 값이 glyphs[].xAdvance, xOffset, yOffset로 들어 있습니다.