Matail
← ALL POSTS
CRAFT 3분

AI 보간이 무너지는 자리 — 뚜껑 여는 팔은 손으로 조립했어요

스프라이트 보간을 세 번 돌렸고 세 번 다 같은 곳에서 무너졌습니다. 결국 팔은 새로 그리지 않고, 원본 소매 픽셀을 곡선을 따라 구부려서 만들었어요.

심야 작업실

인트로에서 캐릭터가 노트북 뚜껑을 여는 9프레임이 있어요. 프레임 사이를 채우는 건 AI 보간에 맡기면 될 줄 알았습니다. 세 번 뽑았고, 세 번 다 같은 곳에서 무너졌어요.

  1. 손 덩어리가 83 → 171 → 252px로 부풀면서 가로로 21px 순간이동했어요. 위팔은 몸통과 윤곽선으로 갈린 둥근 덩어리가 됐고요.
  2. 두 팔이 다 움직이고 눈까지 감겼어요. 한쪽 팔만 움직이라고 했는데요.
  3. 마지막 프레임을 시작점으로 넣고 “나머지는 그대로”라고 자세히 지시했는데도, 얼굴이 프레임마다 다시 그려지고(눈·앞머리·볼) 후드 조임끈이 사라지고, 스프라이트 안에 회색 노트북을 새로 그려 넣었어요. 노트북은 별개 오브젝트라 이러면 화면에 두 개가 됩니다.

결론은 하나예요. 정지해야 할 부위를 말로 막는 건 안 먹힙니다.

새로 그리지 말고 구부리세요

그래서 파이썬 스크립트로 직접 만들었어요. 핵심은 이겁니다 — 팔을 새로 칠하지 않고, 원본 소매 픽셀을 곡선을 따라 구부립니다.

캡슐이나 스윕으로 새로 칠하면 두께·윤곽선·접힘선·어깨 주름이 전부 사라져요. 넘어가는 프레임에서 팔이 갑자기 뭉개져 보입니다.

  1. 팔 없는 몸통 판 — 원본에서 오른팔과 주먹을 지우고 그 자리에 옆선을 세웁니다.
  2. 뼈대 — 어깨는 고정, 손목은 노트북 뚜껑 윗변을 따라가고, 팔꿈치는 그 둘에서 나와요.
  3. 살 = 곡선 워프 — 새 곡선 기준으로 각 픽셀의 (호길이 u, 옆으로 떨어진 거리 off)를 구하고, 원본 곡선의 같은 자리에서 색을 가져옵니다. 원본 픽셀이 그대로 오니까 두께도 윤곽선도 반대쪽 팔과 같아요.
  4. 손 — 원본의 손을 그대로 옮깁니다. 프레임 수를 뚜껑과 같은 9장으로 맞춰서 손과 뚜껑이 항상 같이 움직여요.

팔꿈치가 옆으로 부푸는 양은 역기구학에 맡기면 안 됩니다. 곧게 편 상태에서 h = √(L² − a²)는 0에서 기울기가 무한대라, 한 프레임 만에 팔꿈치가 3.6px 튀어나오고 팔이 통째로 뚱뚱해져요. 0 → 5px를 smoothstep으로 줍니다.

잔상은 “옮긴 자리”가 아니라 “떠난 자리”에 남아요

팔을 옮기는 편집에서 실제로 셋이 나왔어요.

  • 옛 주먹의 왼쪽 두 열 — 판을 만들 때 x ≥ 151만 지웠는데 원본 주먹은 x149까지 걸쳐 있었어요. 손이 올라간 프레임에서 그 두 열이 노트북 모서리에 붉은 얼룩으로 남았습니다.
  • 캡슐이 원본 소매보다 넓은 자리 — 남은 본색이 소매 가장자리와 윤곽선 사이에 1px 밝은 줄로 끼었어요.
  • 뚜껑 뒤로 넘긴 손 — 뚜껑의 들쭉날쭉한 모서리에 주먹 왼쪽 열이 걸렸다 말았다 하면서 화면 테두리에 붉은 점선이 생겼어요.

스크립트가 스스로 검사하게 했어요

돌 때마다 넷을 검사합니다. 연결 요소 1개, 팔레트 26색, 특정 구간에서 끊긴 행 0개, 오른쪽 살색 덩어리 1개. 거기에 원본 대비 팔 폭을 줄마다 찍어 줍니다. 실패하면 종료 코드 1을 내요.

원본은 반드시 tools/sprites/base/에서 읽습니다. 출력 폴더를 읽게 두면 자기 결과물을 다시 먹어서, 돌릴 때마다 팔이 1~2px씩 부풀었어요.

AI로 뽑는 게 빠른 자리와, 손으로 조립해야 하는 자리가 따로 있어요. 기준은 이렇게 잡고 있습니다 — 덩어리가 크고 속이 찬 그림은 맡기고, 형태가 정확히 유지돼야 하는 그림은 직접.