# Rust로 175개의 폰트를 만든 개발자

> Clean Markdown view of GeekNews topic #16271. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16271](https://news.hada.io/topic?id=16271)
- GeekNews Markdown: [https://news.hada.io/topic/16271.md](https://news.hada.io/topic/16271.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-11T16:34:20+09:00
- Updated: 2024-08-11T16:34:20+09:00
- Original source: [chevyray.dev](https://chevyray.dev/blog/creating-175-fonts/)
- Points: 1
- Comments: 1

## Topic Body

### 목차
- Megapack 이전
- 첫 번째 팩
- 두 번째 팩
- 유산
- Megapack의 목표
- 더 크고 더 나은
- 더 많은 언어 지원
- 스타일 변형
- 커닝 완성도
- 더 나은 품질 관리
- 더 쉬운 배포 및 유지보수
- 기준을 높이다
- 폰트 디자인 공부
- 사진 참고자료
- PIFO: 나의 픽셀 폰트 도구
- 작동 방식
- 사용된 크레이트
- 1단계: 폰트 시트 생성
- 2단계: 글리프 윤곽 만들기
- 3단계: 커닝 테이블
- 5단계: 내보내기
- 품질 테스트
- 배포
- 결론

#### Megapack 이전
- 2016년 Ikenfell 작업을 시작하면서 첫 번째 폰트 팩을 만들었음
- 2018년에 두 번째 팩을 출시했으며, 품질이 크게 향상되었음

#### 첫 번째 팩
- 2016년에 12개의 폰트를 포함한 첫 번째 팩을 itch.io에 판매했음
- 당시에는 폰트 디자인 실력이 부족했지만, 인디 게임에서 많이 사용되었음

#### 두 번째 팩
- 2018년에 두 번째 팩을 출시했으며, 40개의 폰트를 포함했음
- 커닝 테이블을 추가하고 다양한 엔진에 맞춘 형식으로 제공했음
- 인디 개발자들과 협력하여 게임 스크린샷을 사용해 홍보했음

#### 유산
- 두 번째 팩은 매우 인기가 있었으며, Nintendo의 Cadence of Hyrule 같은 큰 게임에서도 사용되었음
- Love Conquers All Games의 Get in the Car, Loser에서도 여러 폰트를 사용했음

#### Megapack의 목표
- Ikenfell 출시 후 번아웃 상태였지만, Rust 프로그래밍 기술을 계속 향상시켰음
- 더 큰 폰트 팩을 만들 계획을 세웠음

#### 더 크고 더 나은
- 이번에는 100개의 폰트를 목표로 했으며, 다양한 게임 장르에 맞는 폰트를 만들고자 했음

#### 더 많은 언어 지원
- 이전 팩은 ASCII 문자만 지원했지만, 이번에는 EFIGS(영어, 프랑스어, 이탈리아어, 독일어, 스페인어)를 지원하도록 확장했음

#### 스타일 변형
- 각 폰트가 다양한 크기와 굵기를 지원하도록 하여 스타일적 일관성을 유지하면서도 변화를 줄 수 있도록 했음

#### 커닝 완성도
- 커닝 작업을 자동화하여 시간과 오류를 줄였음

#### 더 나은 품질 관리
- 폰트의 전체 품질을 쉽게 평가할 수 있는 방법을 도입했음

#### 더 쉬운 배포 및 유지보수
- 업로드 및 배포 과정을 자동화하여 오류를 줄이고 효율성을 높였음

#### 기준을 높이다
- 폰트 디자인을 공부하고 많은 참고자료를 수집했음

#### 폰트 디자인 공부
- Richard Poulin의 "Design School: Type" 책을 통해 폰트 디자인을 공부했음

#### 사진 참고자료
- 다양한 텍스트 사진을 참고자료로 사용했음

#### PIFO: 나의 픽셀 폰트 도구
- 픽셀 폰트를 만들기 위해 Rust로 PIFO라는 도구를 개발했음

#### 작동 방식
- PNG 타일 시트와 설정 파일을 사용하여 폰트를 생성하고, 자동으로 커닝 쌍을 계산하여 TTF 파일로 내보냄

#### 사용된 크레이트
- clap, image, rayon, serde, glyph-names, ab-glyph, crunch 등을 사용했음

#### 1단계: 폰트 시트 생성
- 타일 시트와 설정 파일을 사용하여 폰트를 생성함

#### 2단계: 글리프 윤곽 만들기
- 픽셀을 클러스터로 그룹화하고, 윤곽을 생성하여 TTF 글리프로 변환함

#### 3단계: 커닝 테이블
- 수동 및 자동 커닝을 통해 커닝 테이블을 생성함

#### 5단계: 내보내기
- TTF 파일, 타일 시트, 압축된 텍스처 아틀라스로 폰트를 내보냄

#### 품질 테스트
- 폰트의 품질을 테스트하고 문제를 해결함

#### 배포
- itch.io 프로젝트를 생성하고 업로드함

#### 결론
- 2023년 12월에 175 픽셀 폰트 Megapack을 출시했으며, Rust로 도구 체인을 만들어 폰트를 생성, 품질 테스트 및 배포했음

### GN⁺의 정리
- 이 글은 픽셀 폰트 디자인과 제작 과정에 대한 상세한 설명을 제공함
- Rust를 사용하여 폰트 생성 도구를 개발하고, 자동화된 커닝 및 품질 관리 시스템을 구축한 것이 흥미로움
- 픽셀 폰트 디자인에 관심 있는 사람들에게 매우 유용한 정보가 될 것임
- 비슷한 기능을 가진 다른 프로젝트로는 FontForge와 Glyphs가 있음

## Comments



### Comment 27924

- Author: neo
- Created: 2024-08-11T16:34:21+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41213053) 
- "Fdj"와 "Fjo"의 간격 차이에 대한 스타일적 이유가 궁금함
- 폰트 제작은 1년이 걸릴 수 있으며, 대문자, 소문자, 기호, 굵기, 기울기 등 다양한 변형을 포함함
  - 커닝(문자 간격)은 매우 중요한 작업이며, 많은 시간과 노력이 필요함
  - 176개의 문자를 지원하는 폰트는 37,976개의 커닝 쌍이 필요할 수 있음
  - 이를 자동화하여 대부분의 커닝 작업을 처리하고, 필요시 수동으로 조정함
- 예술가와 엔지니어의 경계가 없었던 시절을 상기시켜주는 작업임
- Donald Knuth의 Metafont 소프트웨어를 통해 래스터 폰트를 생성할 수 있음
- 사이트의 폰트와 간단한 스타일링이 마음에 들었음
  - 사이트 제작 방법에 대한 포스트가 있음
- 이 작업이 재정적으로도 도움이 되었음을 알게 되어 기쁨
  - Chevy Ray는 인디 게임 개발자로, 2010-2012년 사이에 활동했음
- 알고리즘을 더 빠르게 할 수 있는 방법이 있을 것 같음
  - 해시맵을 비트맵과 바이트 인덱스 배열로 대체하는 것이 하나의 방법일 수 있음
- 폰트에 관심 있는 사람은 tomorrow.type.today를 확인해보길 권장함
  - 팀원 중 한 명이 이들의 작업을 수집하고 있음
- Rust에서 다중 코어로 작업을 쉽게 실행할 수 있음
  - 함수 체인에 단일 호출을 삽입하는 것만으로도 충분함
- 타이포그래피는 이해하기 어려운 분야임
  - 175개의 폰트를 만들고 각각을 의미 있게 다르게 만드는 것은 놀라운 일임
