사내에서 카카오 이모티콘을 하나 준비하고 있습니다. 주짓수 도복을 입은 햄스터 캐릭터로 32장 한 세트를 만드는 일이에요.
목적은 이모티콘 자체보다 그 앞에 있습니다. AI가 실제 제작 공정에 어디까지 들어올 수 있는지 재보는 중이거든요. 그림 한 장 뽑는 건 이제 누구나 합니다. 그런데 "쓸 수 있는 결과물 32장"은 전혀 다른 문제더군요.
이유는 이렇습니다. 이모티콘 한 세트는 같은 캐릭터로 보여야 합니다. 32장을 따로따로 뽑으면 얼굴이 조금씩 다른 32마리가 나와요. 눈 크기가 다르고, 눈썹 각도가 다르고, 도복 색이 미묘하게 다릅니다. 한 장씩 보면 다 괜찮은데 32장을 나란히 놓으면 세트가 아닙니다.
그래서 뽑은 컷을 그대로 쓰지 않고 눈·눈썹·도복을 손으로 고쳐 인상을 맞춥니다. 여기서 문제가 시작돼요. 옮기고 키우는 건 PNG로도 되는데, 눈꼬리를 내리는 것 같은 형태 수정은 안 됩니다.
그래서 벡터로 바꾸기로 했습니다. 그리고 여기서 한 번 크게 틀렸어요. 벡터로 바꿨더니 편집점이 1,918개 나왔거든요. 펜툴로 하나씩 잡으라고 하면 아무도 안 합니다.
흔한 방법을 먼저 썼습니다
검은 획의 바깥 테두리를 따서 그 안을 채우는 방식이었어요. 벡터 변환이라고 하면 대개 이걸 씁니다.
결과를 숫자로 재봤습니다. 원본과 얼마나 겹치는지 81.5%, 잉크량은 14.1% 줄었습니다. 선이 깎여 나갔다는 뜻이에요.

가운데가 그 방식입니다. 눈썹이 세 조각으로 끊어졌고 눈 테두리가 울퉁불퉁해요. 오른쪽이 고친 결과입니다.
원인은 세 가지였는데, 결정적인 게 하나 있었습니다. 점을 줄이는 단순화 과정에서 획 화소의 24%가 그냥 사라진 겁니다. 나머지 둘은 부수적이었어요. 붓 끝이 뭉툭해지고, 가장자리가 파도처럼 일렁였습니다.
여기서 배운 게 있습니다. 선이 굵어지는 것과 얇아지는 것 중에 얇아지는 쪽이 훨씬 나쁩니다. 획은 검은색이라 넘치면 검은색끼리 겹칠 뿐이거든요. 그런데 모자라면 그 틈으로 흰 바탕이 비칩니다.
선을 도형으로 본 게 잘못이었습니다
고친 방식은 이래요. 선을 하나의 도형으로 보지 않고, 가운데 한 줄과 점마다의 굵기로 봅니다.
획의 한가운데를 따라가는 뼈대를 먼저 뽑고, 그 위 각 지점에서 "여기는 얼마나 두꺼운가"를 읽습니다. 그다음 뼈대 좌우로 그만큼씩 벌려서 띠를 만들어요. 굵기가 점마다 다르니까 끝이 자연스럽게 뾰족해집니다.
이게 중요한 이유가 있어요. SVG의 선 굵기 속성은 한 획에 하나의 값밖에 못 줍니다. 그걸 쓰는 한 붓 끝은 영원히 뭉툭해요. 띠를 면으로 직접 그리면 그 제약이 사라집니다.
결과는 겹침 95.2%, 잉크량 +3.9%가 됐습니다. 81.5%에서 95.2%로 올랐고, 부족하던 게 살짝 넘치는 쪽으로 돌아섰어요.
굵기를 얼마나 넉넉하게 줄지가 손잡이였습니다. 계수를 1.05에서 1.10으로 올려봤더니 겹침은 95.2%에서 96.3%로 1%p 남짓 오르는데 부풀림이 +3.9%에서 +7.3%로 뛰었어요. 1%를 사려고 두 배를 내는 셈이라 1.05를 택했습니다.
숫자 하나를 잘못 세고 있었습니다
여기서 좀 부끄러운 얘기를 해야겠습니다.
한동안 사내 문서에 "편집점이 81% 줄었다"고 적어놨어요. 뿌듯한 숫자였습니다. 그런데 다시 세어보니 틀렸습니다.
앞 방식의 전체 1,918개와 새 방식의 획만 369개를 견주고 있었거든요. 분모와 분자가 다른 걸 세고 있었던 겁니다.
| 획 | 덩어리 | 면 | 합 | |
|---|---|---|---|---|
| 테두리 방식 | 948 | 0 | 970 | 1,918 |
| 뼈대 방식 | 396 | 383 | 729 | 1,508 |
제대로 세면 획만 −58%, 전체로는 −21%입니다. 81%가 아니었어요.
글 쓰는 게 직업이라 숫자를 인용할 일이 많은데, 이런 걸 자주 봅니다. 틀린 계산이 아니라 잘못 고른 분모. 계산기는 맞게 돌았고 숫자도 진짜인데 비교 대상이 어긋난 거예요. 이런 숫자가 제일 안 잡힙니다. 그럴듯하니까요.
원본 탓도 있었습니다
변환이 완벽해지지 않는 이유가 알고리즘에만 있는 건 아니었어요. 이 그림은 선 굵기 자체가 균일하지 않습니다. 가장 얇은 데가 4.0px, 중앙값 11.7px, 두꺼운 데가 24.1px로 6배 차이가 나요.
AI가 그린 그림이라 그렇습니다. 사람이 펜툴로 그었다면 굵기가 일정했을 텐데, 모델은 "굵은 검은 선처럼 보이는 것"을 그린 거라 자리마다 두께가 다릅니다. 벡터가 굵기를 못 맞춘 게 아니라 원본이 원래 그런 거였어요.
아직 안 되는 것
솔직히 남은 흠도 있습니다. 눈동자 윗변이 미세하게 울퉁불퉁하고, 왼쪽 귀와 볼 이음매에 작은 흰 쐐기가 하나 남아 있어요.
편집점을 더 줄여보려고 허용 오차를 올려 절반으로 만들어봤는데 귀 모양이 무너졌습니다. 1,508개가 지금으로선 바닥이에요.
그리고 32장 중 아직 한 장만 변환했습니다. 나머지 31장은 이 한 장이 통과한 뒤에 넘어갑니다.
남는 것
기술적으로 남은 건 하나예요. 획은 면이 아니라 선입니다. 도형으로 다루면 붓 끝을 잃고, 잉크가 모자라면 흰 바탕이 비칩니다. 편집기가 쥐고 있어야 할 데이터도 완성된 띠가 아니라 뼈대와 굵기고요. 띠는 거기서 매번 다시 만들면 됩니다.
이 그림을 부위별로 쪼개는 이야기는 AI 그림을 부위별로 쪼개는 데 AI를 한 번도 안 썼습니다에 따로 적었습니다. 같은 32장을 놓고 한 작업이에요.
다른 하나는 숫자 얘기입니다. 81%와 21%의 차이는 계산이 아니라 무엇과 무엇을 견줬는지에서 나왔어요. 숫자를 고칠 때는 분모가 뭔지 먼저 보는 게 좋습니다.