왜 폰트를 변환해야 하나요?
노트북에서 폰트 파일(.ttf 또는 .otf)에는 각 글자의 모양이 수학적 곡선으로 저장됩니다. 컴퓨터는 원하는 크기에서 그 곡선을 부드럽게 그릴 충분한 성능과 메모리가 있습니다.
작은 디바이스(ESP32, 스마트워치 칩, 작은 디스플레이 컨트롤러)는 보통 그렇지 못합니다. 즉석에서 곡선을 다시 그릴 메모리나 처리 능력이 부족합니다. 그래서 LVGL은 다른 방식을 사용합니다. 곡선 대신 각 글자를 고정 크기의 미리 그린 작은 그림(비트맵)으로 저장합니다. 이렇게 저장하면 디바이스의 처리 부담이 훨씬 줄어듭니다.
PicoPixel은 이 변환을 대신 해 줍니다. 폰트를 만들 때 원본 폰트 파일을 가져와 LVGL이 필요로 하는 비트맵 형식으로 바꾸며, 원하는 문자와 크기만 골라 넣습니다.
각 글자는 고정 크기로 미리 그려지므로 변환된 LVGL 폰트는 선택한 크기에 고정됩니다. 16px 폰트를 32px로 늘려도 선명하게 보이지 않습니다. 두 가지 크기의 텍스트가 필요하면 두 크기로 폰트를 만들어야 합니다(아래 폰트 만들기에서 여러 크기를 한 번에 선택할 수 있습니다).
따라서 폰트도 디바이스의 메모리를 사용합니다. 문자와 크기를 추가할 때마다 필요한 메모리가 늘어납니다. 이 가이드에서는 실제로 사용하는 문자와 크기만 포함해 폰트 용량을 줄이는 방법을 살펴봅니다.
기본 제공 폰트와 직접 가져온 폰트
폰트를 만드는 방법은 두 가지입니다.
- Bundled, 바로 사용할 수 있는 인기 있고 잘 테스트된 폰트 모음입니다: Noto Sans, Roboto, Open Sans, Montserrat, Poppins, Inter, Lato, Nunito, Source Sans 3 등. 안전한 선택이자 좋은 기본값입니다.
- Upload, 직접
.ttf또는.otf파일을 가져옵니다. 특정 브랜드 폰트가 있거나 기본 제공 폰트가 지원하지 않는 언어를 다룰 때 사용합니다.
직접 폰트를 업로드한다면 Roboto-VariableFont.ttf 같은 가변 폰트 파일보다 Roboto-Regular.ttf 같은 일반 고정 폰트 파일을 사용하세요. 일반 고정 폰트 파일이 훨씬 안정적으로 변환됩니다. 일반 .ttf 파일이 가장 잘 작동하는 편입니다.
어느 쪽을 선택하든 실시간 미리보기가 있어 직접 텍스트를 입력하고 만들기 전에 정확히 어떻게 보일지 확인할 수 있습니다.
폰트 만들기
Create Font 패널을 열면 짧은 양식이 보입니다. 각 부분은 다음 역할을 합니다.

- 폰트 선택: Bundled에서 폰트와 굵기(Regular, Bold 등)를 고르거나 Upload 탭에서 직접 파일을 선택합니다.
- Font Name, 프로젝트 폰트 목록에 표시될 이름입니다. 여러 개를 쓸 예정이라면 특히 기억하기 좋은 이름을 붙이세요.
- Size (px), 폰트의 픽셀 크기입니다. 여러 크기를 한 번에 선택할 수 있습니다(16, 22, 32 같은 편리한 프리셋이 있습니다). 각 크기는 따로 생성되므로 정말 사용할 것만 고르세요.
- Letters, 포함할 문자 집합을 선택합니다: Standard(기본 영어), Latin, Greek, Cyrillic, Hebrew, Arabic, Thai 등입니다. PicoPixel에 어떤 언어의 문자가 필요한지 알려 주는 곳입니다.
- Asian, 중국어, 일본어, 한국어를 위한 별도 옵션입니다. 특별한 처리가 필요하며 아래 해당 섹션에서 다룹니다.
세밀한 조정을 위한 Advanced 영역도 있습니다. Bits per Pixel(각 글자에 쓰는 회색 단계 수, 높을수록 부드럽지만 공간을 더 사용합니다. 4가 좋은 기본값)과 정확한 문자 범위 또는 기호를 직접 지정하는 필드가 있습니다. 대부분의 사람은 건드릴 필요가 없습니다.
모든 폰트가 모든 언어를 포함하는 것은 아닙니다. 비라틴 문자 체계를 선택했는데 미리보기에 글자가 아니라 빈 상자가 보이면 그 폰트는 해당 문자 체계를 지원하지 않습니다. 해당 문자 체계를 지원하는 기본 제공 폰트로 바꾸거나 지원하는 폰트를 업로드하세요. 선택한 폰트가 해당 문자 체계를 지원하지 않으면 PicoPixel이 경고합니다.
오른쪽에서 왼쪽으로 쓰는 문자: 아랍어와 히브리어
아랍어와 히브리어 같은 언어는 오른쪽에서 왼쪽으로 읽고, 글자도 특별한 처리가 필요합니다. 다행히 Create Font 패널에서 바로 설정할 수 있으며, 손으로 설정할 것은 없습니다.
- Letters 드롭다운에서 Arabic 또는 Hebrew를 선택합니다. 중요한 단계입니다. 해당 문자 체계에 맞는 문자 집합을 포함하라고 PicoPixel에 알려 줍니다(기본 영문자도 함께 포함되므로 숫자와 라틴 문자 텍스트도 작동합니다).
- PicoPixel은 해당 문자 체계용으로 만들어진 폰트, 예를 들어 Noto Sans Arabic을 제안합니다. 글자가 들어 있지 않은 평범한 라틴 문자 폰트보다 제안된 것(또는 해당 문자 체계를 지원하는 폰트)을 사용하세요.
- 실시간 미리보기를 확인합니다. 글자가 거기서 올바르게 렌더링되면 괜찮습니다. 상자가 보이면 선택한 폰트가 문자 체계를 지원하지 않는 것이므로 다른 것을 고르세요.
아랍어 문자는 단어 안의 위치에 따라 모양이 바뀌고, 전체 줄도 오른쪽에서 왼쪽으로 흐릅니다. 프로젝트를 내보낼 때 PicoPixel은 아랍어, 페르시아어, 히브리어 텍스트 사용을 자동 감지하고 연결된 글자 모양을 위한 LVGL 설정을 켭니다. 디바이스에서 올바르게 보이도록 설정 파일을 직접 수정할 필요가 없습니다.
핵심은 폰트를 만들 때 Letters 드롭다운에서 Arabic 또는 Hebrew를 선택해야 해당 문자가 들어온다는 것입니다. 먼저 기본 폰트를 만들고 나중에 오른쪽에서 왼쪽으로 쓰는 텍스트를 추가하면 글자가 없습니다. 처음부터 올바른 문자 체계를 선택해 폰트를 만드세요.
중국어, 일본어, 한국어

CJK는 중국어(Chinese), 일본어(Japanese), 한국어(Korean)를 함께 가리키는 약어입니다. 이 언어들은 문자 수가 매우 많아 용량에 특히 주의해야 합니다. 한국어는 약 11,000개, 중국어는 20,000개가 훨씬 넘습니다. 모든 문자는 미리 그려져 디바이스에 저장된다는 점을 기억하세요. 전체 CJK 폰트를 포함하면 메가바이트 단위가 될 수 있고, 대부분의 임베디드 디바이스에는 맞지 않습니다.
해결책은 실제로 사용하는 문자만 포함하는 것입니다. 일반적인 인터페이스에서 사용하는 서로 다른 문자는 백 개 정도일 수 있습니다. 전체 문자 집합에 비하면 훨씬 적은 양입니다.
방법은 다음과 같습니다.
- Asian 드롭다운에서 Korean, Chinese, 또는 Japanese를 선택합니다.
- Symbols 필드(Advanced 영역)를 찾아 인터페이스가 실제로 표시할 텍스트를 붙여 넣습니다. 모든 라벨, 버튼, 메시지를 포함하세요. PicoPixel은 거기서 찾은 각 문자에 대해서만 글리프를 포함합니다.
- 시작을 돕기 위해 PicoPixel은 선택한 언어의 일반적인 인터페이스 단어(설정, 확인, 취소 등)를 이 필드에 미리 채웁니다. 자신의 텍스트를 추가하세요.
이렇게 하면 몇 메가바이트가 될 수 있던 폰트가 몇백 킬로바이트로 끝날 수 있습니다.
Symbols에 나열한 문자만 포함됩니다. 나중에 인터페이스가 추가하지 않은 문자를 표시하면 빈 상자로 나타납니다. 텍스트가 바뀌면 Symbols 필드를 업데이트하고 폰트를 다시 만드세요.
CJK 텍스트의 모양을 세밀하게 지정하려면 사용할 폰트를 직접 업로드하세요. 인터페이스 텍스트의 완성본 전체를 붙여 넣으면 빠지는 것이 없습니다.

정리: 사용하지 않는 폰트 삭제하기
폰트는 공간을 차지하고, 실험하다 보면 더 이상 필요 없는 것들이 쉽게 쌓입니다. 예를 들어 16px와 22px 중 무엇이 더 나은지 몰라 둘 다 만들어 시험할 수 있습니다. 크기를 결정했다면 사용하지 않는 폰트는 지워도 됩니다.
PicoPixel은 이를 쉽게 처리합니다. 에셋의 Fonts 영역에는 Delete Unused Fonts 버튼이 있습니다. 프로젝트의 모든 위젯을 스캔하고 어느 위젯에서도 사용하지 않는 폰트를 찾아 한 번의 클릭으로 제거합니다. 불필요한 폰트를 정리하고 필요한 폰트를 위한 공간을 확보할 수 있습니다.
크기를 실험하는 쉬운 방법입니다. 몇 가지 크기를 만들고 디자인에 맞는 것을 확인한 뒤 Delete Unused Fonts를 눌러 나머지를 정리하세요. 목록의 각 폰트는 크기와 품질 설정을 보여 주므로 한눈에 파악하기 쉽습니다.
"Delete Unused Fonts"는 어떤 위젯도 참조하지 않는 폰트만 제거하므로 디자인은 바뀌지 않습니다. 목록에서 단일 폰트를 오른쪽 클릭해 직접 삭제할 수도 있습니다. 실수로 지웠다면 실행 취소로 복원할 수 있습니다.
