폰트 한 벌이 진짜 손글씨가 되기까지 — 이자체, 필압 역산, 그리고 힘 제어
같은 글자를 열 번 쓰면, 열 번 다릅니다
종이에 '감사합니다'를 손으로 열 번 써 보세요. 열 장 모두 미묘하게 다릅니다. 획의 각도, 삐침의 길이, 받침이 앉는 위치 — 사람의 손은 같은 글자도 매번 조금씩 다르게 씁니다. 우리는 이 '조금씩 다름'을 무의식적으로 읽어내고, 그래서 손글씨를 보면 '사람이 썼구나' 하고 느낍니다.
그런데 폰트는 정반대입니다. 폰트에서 'ㄱ'은 언제 어디서 불러도 완벽하게 똑같은 하나의 모양입니다. 문장을 백 번 반복하면 백 번 모두 픽셀 단위로 동일하죠. 편리하지만, 바로 이 '완벽한 반복'이 손글씨 느낌을 죽이는 주범입니다.
글소담이 펜 로봇으로 카드를 쓸 때 풀어야 했던 첫 번째 문제가 이것이었습니다. 어떻게 하면 폰트를 쓰면서도 폰트처럼 보이지 않게 할 것인가.
힌트는 '이자체(異字體)'에 있었습니다
서예와 문자학에는 이자체라는 개념이 있습니다. 뜻과 소리는 같지만 형태가 다른 글자들을 말합니다. 손글씨에서는 이게 아주 자연스럽게 나타납니다. 특히 한글은 자모가 글자 안에서 놓이는 위치에 따라 형태가 달라집니다.
대표적인 게 초성과 종성입니다. 같은 'ㄱ'이라도 '가'의 첫소리로 쓸 때와 '각'의 받침으로 쓸 때는 손이 그리는 궤적 자체가 다릅니다. 초성 'ㄱ'은 시원하게 내려긋지만, 받침 'ㄱ'은 아래 글자 폭에 눌려 납작하고 짧아집니다. 사람은 이걸 계산하지 않고 그냥 그렇게 씁니다.
펜 로봇이 실제 로 출력한 자모. 격자 위에 놓인 획의 떨림과 눌림이 그대로 남는다.
여기서 글소담의 방향이 정해졌습니다. 하나의 자모에 대해 단 하나의 모양이 아니라, 여러 개의 이자체를 확보하고, 글자가 놓이는 문맥에 따라 그때그때 다른 형태를 골라 쓰자는 것입니다.
영문 필기체는 이미 이 길을 걸었습니다
사실 이 '반복을 피하는 폰트'라는 발상은 영문권 펜 플로터(pen plotter, 글씨 쓰는 로봇) 시장에서 먼저 상용화되어 있습니다. 알파벳은 글자 수가 적은 대신, 필기체(cursive)에서는 앞뒤 글자와 획이 이어지기 때문에 '이 글자 다음에 저 글자가 오면 연결선이 어떻게 되는가'가 매우 중요합니다.
영국의 한 필기체 폰트 업체는 이 문제를 '한 글자에 여러 벌의 대체 자형을 미리 넣어두는' 방식으로 풉니다. 이들의 최상위 등급 폰트는 글자 하나당 최대 318종의 대체 형태(alternate glyph)를 폰트 안에 심어 두고, 전용 소프트웨어가 문장을 훑으면서 같은 글자가 연속으로 나오지 않도록 준-무작위(semi-random)로 자형을 바꿔치기합니다. 단순 낱글자뿐 아니라 글자쌍, 단어 첫 글자, 마지막 글자, 시작·끝 연결획까지 따로 준비해 둡니다.
글소담은 여기서 두 걸음 더 나아갑니다. 첫째, 대상이 알파벳이 아니라 초성·중성·종성이 조합되는 한글입니다. 둘째, 자형을 '무작위로 섞는' 데 그치지 않고 '어느 위치에 어떤 자형이 오는 게 자연스러운가'라는 문맥까지 함께 봅니다. 뒤에서 이야기할 부분입니다.
TTF 안에는 이미 힌트가 숨어 있습니다
작업의 출발점은 손글씨를 담은 TTF(TrueType Font) 파일입니다. TTF의 각 글리프는 결국 몇 개의 닫힌 윤곽선(contour)과 그 위의 제어점(control point) 좌표로 기술된 벡터 데이터입니다. 즉 '손글씨 한 글자'가 수학적으로 곡선의 집합으로 들어 있는 셈이죠.
그런데 이 윤곽선 데이터를 그대로 쓸 수는 없습니다. 획의 굵기, 글자의 무게중심, 좌표계의 원점이 글자마다 제각각이기 때문입니다. 그래서 우리는 각 자모의 윤곽선을 추출한 뒤, 형태를 비교할 수 있는 공통의 좌표 공간으로 정규화합니다. 위치·크기·기울기의 영향을 걷어내고 '순수한 모양'만 남기는 과정이라고 보시면 됩니다.
초성으로 쓰인 자모. 같은 소릿값이라도 받침일 때와는 궤적이 다를 수도
진짜 어려운 건 TTF에 '없는' 정보입니다
지금까지는 TTF에서 무엇을 '뽑을' 것인가의 이야기였습니다. 그런데 손글씨를 로봇으로 재현할 때 정말 까다로운 건, TTF에 아예 들어 있지 않은 정보를 어떻게 만들어내느냐입니다.
화면에 찍힌 글씨는 2D입니다. X, Y 두 좌표만 있으면 그려지죠. 그런데 사람이 펜으로 쓴 손글씨는 사실 2.5D입니다. 평면 위의 X, Y 궤적에 더해, 펜을 종이에 얼마나 세게 눌렀는가 하는 Z축 — 즉 필압(筆壓)이 함께 존재합니다. 우리가 손글씨에서 느끼는 '살아 있는 느낌'의 상당 부분이 바로 이 필압에서 나옵니다. 획의 시작에서 살짝 약하게 들어갔다가, 중간에 눌러 굵어지고, 끝에서 스르르 빠지면서 가늘어지는 그 강약 말입니다.
그래서 글소담은 X, Y는 contour에서 직접 추출하되, Z(필압)는 2D 형태로부터 거꾸로 추정(역산)합니다. 손글씨 TTF의 윤곽선을 보면, 사람이 세게 눌러 천천히 지나간 구간은 획이 두껍고, 빠르게 스쳐 지나간 구간은 획이 얇습니다. 즉 '획의 굵기'라는 2D 흔적 안에, 원래의 필압과 속도가 화석처럼 남아 있는 것입니다. 이 흔적을 되짚어 '이 지점에서 펜을 이만큼 눌렀겠다'를 복원해 냅니다.
전산을 하신 분께는 이렇게 설명드릴 수 있습니다. 원래 정보(3D 필기 동작)가 2D로 투영되면서 한 차원이 사라졌고, 우리는 그 투영 결과만 가지고 사라진 차원을 복원하려는 겁니다. 일반적으로는 해가 하나로 정해지지 않는 '불량 조건(ill-posed) 역문제'에 해당하죠. 그래서 손글씨의 물리적 상식 — 획은 부드럽게 굵어지고 가늘어진다, 급격히 튀지 않는다, 시작과 끝에서 약해진다 같은 제약 — 을 걸어 그럴듯한 하나의 해로 좁혀 나갑니다.
복원된 필압은 그대로 펜 로봇의 Z축 제어 명령이 됩니다. X, Y 모터가 궤적을 그리는 동안, Z축이 이 추정값을 따라 펜을 눌렀다 뗐다 하면서 획의 강약을 실제 종이 위에 새깁니다. 화면에서 '굵게 보이도록 칠한' 것과, 펜촉이 실제로 더 눌려서 잉크가 진하게 밴 것은 — 손끝으로 만졌을 때, 그리고 빛에 비춰 봤을 때 완전히 다릅니다.
'ㅁ·ㅂ·ㅍ·ㅎ'도 매번 다른 얼굴을 합니다
초성·종성 이야기가 조금 추상적이었다면, 실제 자모 몇 개를 놓고 보면 훨씬 분명해집니다. 특히 획이 많고 닫힌 공간이 있는 'ㅁ, ㅂ, ㅍ, ㅎ' 같은 자음은, 손으로 쓸 때 형태 변화의 폭이 가장 큰 글자들입니다.
'ㅁ'을 예로 들면, 사람은 이걸 한 번에 정사각형으로 그리지 않습니다. 두세 획으로 나눠 쓰면서 네 모서리가 딱 맞물리기도 하고, 살짝 벌어지거나 겹치기도 합니다. 'ㅂ'은 두 세로획의 높이가 다르거나, 가운데 가로획이 위로 붙기도 아래로 처지기도 합니다. 같은 사람이 같은 'ㅂ'을 써도 앞 글자·뒤 글자에 따라 이 균형이 미묘하게 흔들립니다.
'ㅍ'은 위아래 가로획과 두 세로획 사이의 간격이, 'ㅎ'은 위 꼭지점·가로획·아래 동그라미의 크기 비율이 사람마다, 또 같은 사람 안에서도 매번 달라집니다. 그래서 이 네 글자는 '이자체가 여러 벌 있으면 티가 확 나는' 대표 주자입니다. 반대로 말하면, 이 글자들만 잘 변주해도 문장 전체의 '사람 냄새'가 크게 살아납니다.
글소담은 이런 획 많은 자음에 대해 특히 여러 벌의 자형을 확보해 둡니다. 어떤 글자를 몇 벌까지 준비하고, 각 벌을 어떤 특징으로 구분하는지는 — 짐작하시겠지만 — 여기서 다 밝히기 어려운 영역입니다.
'분류'와 '선택'은 다른 문제입니다
전산 전공자분이라면 한글이 조합된다는 부분은 논외로 하더라도, 여기서 두 개의 서로 다른 문제가 보일 겁니다. 하나는 수집한 수많은 자모 형태를 몇 개의 이자체 계열로 묶는 오프라인 분류 문제이고, 다른 하나는 실제로 문장을 출력할 때 각 자리에 어떤 이자체를 앉힐지 정하는 온라인 선택 문제입니다. 앞서 본 영문 폰트가 '여러 벌을 준비(분류)하고 소프트웨어가 골라 쓰는(선택)' 구조였던 것과 같은 뼈대입니다.
분류 단계에서는 정규화된 형태들을 특징 공간에 흩뿌린 뒤, 위치별(초성·중성·종성) 사용 경향과 형태적 유사도를 함께 고려해 계열을 나눕니다. 단순히 '초성/종성'으로만 가르지 않는다는 점이 포인트입니다. 같은 초성 안에서도 뒤에 어떤 모음·받침이 오느냐에 따라 손이 달라지니까요.
모음과의 결합에 따라 세로획의 길이와 종결 위치가 달라진다.
선택 단계는 렌더링 시점에 동작합니다. 글자 하나를 그릴 때 그 자모의 위치, 앞뒤 자모의 형태, 그리고 직전에 어떤 이자체를 이미 썼는지까지 함께 봅니다. 마지막 조건이 중요합니다. 만약 매번 무작위로만 고른다면 같은 'ㅏ'가 우연히 세 번 연속 나올 수 있고, 그러면 오히려 부자연스러워집니다. 영문 폰트 업체가 '같은 글자가 연달아 나오지 않게' 준-무작위로 섞는 것도 같은 이유입니다. 사람은 방금 쓴 획을 기억하기 때문에 무의식적으로 변주를 줍니다. 저희 선택 로직도 이 '방금 쓴 것과 겹치지 않게'라는 제약을 지킵니다.
어떤 가중치로 이 조건들을 조합하고, 어느 정도의 확률로 변주를 허용하는지는 수많은 출력물을 눈으로 검수하며 조정한 값들입니다. 이 조합 규칙 역시 그대로 공개하기는 어려운 부분입니다.
제어공학적으로 보면 '케스케이드 피드백 루프' 입니다
이 구조를 제어의 언어로 옮기면 이렇게 됩니다. 목표값은 '사람이 쓴 것 같은 자연스러운 손글씨'이고, 측정값은 실제 출력물의 반복성·규칙성입니다. 반복 패턴이 감지되면 선택 로직이 다음 글자에서 형태를 바꿔 그 규칙성을 상쇄합니다. 일종의 '규칙성 억제 피드백'인 셈이죠. 폰트가 만들어내는 완벽한 주기성을, 의도적으로 흐트러뜨리는 방향으로 되먹입니다.
여기에 앞서 복원한 필압(Z축)과, 펜 로봇 자체가 만들어내는 물리적 미세 변동(잉크 눌림, 미세한 궤적 오차)까지 더해지면, 최종 결과물은 여러 겹의 무작위성을 갖게 됩니다. 소프트웨어가 만드는 형태 변주, 역산한 필압이 만드는 획의 강약, 그리고 하드웨어가 만드는 획의 떨림입니다. 이것들이 합쳐질 때 비로소 '찍어낸 티'가 사라집니다. 화면 위에서 픽셀로 흉내 낸 잉크 번짐과, 실제 펜촉이 종이를 누르며 남긴 잉크 농담(濃淡)은 근본적으로 다른 질감입니다.
복원한 필압을, 이번엔 '힘'으로 되돌려야 합니다
여기서부터는 소프트웨어를 떠나 하드웨어의 영역입니다. 앞에서 역산으로 복원한 필압은 결국 숫자열 — '이 지점에서 이만큼 눌러라'는 목표값의 나열입니다. 이걸 종이 위에 실제로 새기려면, 펜을 그만큼의 힘으로 눌러 주는 액추에이터(actuator)가 필요합니다. 단순히 펜을 '내렸다/올렸다'만 하는 온·오프 방식으로는 이 강약을 표현할 수 없습니다. 필압은 연속적인 아날로그 양이니까요.
저희가 이 지점에서 자연스럽게 떠올린 후보가 보이스 코일 모터(Voice Coil Motor, VCM)였습니다. 스피커 콘을 진동시키는 바로 그 원리로, 코일에 흘리는 전류에 비례해 힘이 나오는 액추에이터입니다. 회전을 직선 운동으로 바꾸는 기어나 나사 없이 전류 = 힘이 거의 직접 대응하기 때문에, 미세한 필압을 빠르고 부드럽게 제어하기에 이론적으로 이상적입니다. 복원한 필압값을 전류 지령으로 바꿔 코일에 흘리면, 펜촉이 그만큼의 힘으로 종이를 누르는 그림이 그려집니다.
그래서 실제로 VCM 기반 설계를 상당히 깊이 진행했습니다. 다만 지금 시점에서는 거기서 한발 물러서 있습니다. 이유는 제어의 아름다움과 별개로 현실적이었습니다. VCM은 힘을 유지하려면 계속 전류를 흘려야 해서 발열 관리가 까다롭고, 정밀한 힘 센싱과 방열 구조까지 갖추면 카드 한 장을 찍어내는 원가와 양산 안정성 측면에서 부담이 컸습니다. '제어적으로 가장 우아한 답'과 '스무 대의 펜 로봇을 24시간 안정적으로 돌리는 답'이 꼭 같지는 않았던 셈입니다.
그래서 지금은 좀 더 견고하고 다루기 쉬운 구동 방식으로 필압을 구현하는 쪽으로 방향을 잡았습니다. 흥미롭게도, 소프트웨어에서 필압을 복원할 때 세웠던 목표 — 부드럽고 연속적인 강약 — 는 그대로 유지됩니다. 그 목표값을 어떤 하드웨어로 실현하느냐가 달라졌을 뿐이죠. VCM 설계에서 얻은 힘 제어에 대한 이해는 지금 방식에도 고스란히 녹아 있습니다. 이 부분은 지금도 계속 다듬고 있는, 저희의 현재진행형 숙제입니다.
그래서, 백 장이 다 다릅니다
정리하면 이렇습니다. 손글씨 TTF에서 자모의 X, Y 형태를 추출해 공통 공간으로 정규화하고, TTF에 없는 Z축 필압은 획 굵기로부터 역산해 복원하며, 형태들을 여러 이자체 계열로 분류해 둡니다. 그리고 출력 시점에 문맥과 직전 이력을 함께 보며 매번 다른 형태를 골라, 복원된 필압과 함께 펜 로봇으로 종이에 새깁니다. 여기에 펜 로봇 자체의 물리적 변동이 얹힙니다. 영문 필기체 폰트가 알파벳을 대상으로 오래 다듬어 온 길을, 글소담은 한글의 초성·중성·종성 구조 위에서 문맥 인식과 2.5D 필압 복원까지 얹어 다시 걷고 있는 셈입니다.
결과적으로 같은 문장을 백 장 출력해도, 백 장이 조금씩 다릅니다. 받는 사람이 '이거 진짜 손으로 쓴 거네' 하고 느끼게 만드는 것 — 그게 이 모든 과정의 목적입니다.
어느덧 프로젝트를 시작한 지 16년이라는 긴 시간이 지났습니다.
그동안 10대 넘는 프로토타입 장비들을 개발하면서, 숱한 시행착오를 겪었습니다.
아직 채워나가야 할 부분은 많지만, 이제야 비로소 나아갈 방향에 대한 확신이 듭니다.
너무 오랜만에 인사를 드리다 보니, 전하고 싶은 이야기가 많아 마음이 먼저 앞서는 것 같습니다.
이제부터는 흔들림 없이, 눈앞의 과제들을 차분히 하나씩 풀어나가겠습니다.
이전 목록
15.설·어버이날·추석·연말… 카드 한 장으로 1년 매출 흐름을 타는 법
14."카드 한 장에 얼마예요?" ? 사장님이 진짜 궁금한 그 숫자
13."이거 직접 쓰신 거예요?" ? 손글씨 카드를 받은 사람들의 반응
09.나에게 맞는 카드 문구
08.택배 상자 속 ‘인쇄된 감사합니다’를 손님은 기억하지 못합니다
04.글소담 실제 제품 사진
03.글소담 활용 35선
01.글소담 Q&A
#글소담, #손편지, #손글씨, #ai손편지, #로봇손글씨, #감성손편지, #수기모사







댓글 없음:
댓글 쓰기