Indie Hackers

Two months building a game asset tool because I couldn't draw the same character twice

같은 캐릭터를 두 번 그리지 못해 만든 게임 에셋 도구

2D 액션 RPG를 만들려던 개발자가 캐릭터 일관성 문제를 해결하려고 게임 에셋 도구를 만들었습니다. 출시 일주일 뒤 사용자는 5명, 결제자는 0명이었고, 커뮤니티에서는 생성 결과보다 동일성 검증과 프레임 단위 측정이 제품의 본질이라는 의견이 나왔습니다.

AI 요약

2D 액션 RPG를 만들던 개발자는 에셋 단계에서 작업이 멈췄습니다. 여러 에셋 팩을 사도 팩마다 화풍이 달라 캐릭터와 UI를 함께 배치하면 서로 다른 게임처럼 보였습니다. 직접 그리면 같은 캐릭터를 여덟 방향으로 반복해서 그리는 동안 얼굴이 달라졌습니다. 모션 시트, 이펙트, UI까지 만들려니 실제 게임 개발은 계속 멀어졌습니다. 결국 게임을 잠시 멈추고 문제를 해결하는 도구를 만들었습니다.

■ 도구의 입력과 출력

사용자는 캐릭터 이미지 한 장을 올립니다. 도구는 같은 얼굴을 유지한 채 여덟 방향의 이미지를 만들고, 이를 바탕으로 모션 시트를 생성합니다. 이펙트, UI, 배경, 타일, 사운드도 같은 화풍으로 제작합니다. 사용자는 생성된 프레임 중 원하는 것만 고른 뒤 PNG 시트나 JSON으로 내보냅니다.

■ 가장 어려웠던 부분

이미지 생성에서 어려운 점은 캐릭터 여덟 명을 만드는 일이 아니라 한 캐릭터를 여덟 각도에서 알아볼 수 있게 유지하는 일이었습니다. 제작자는 결과가 그럴듯해 보이는 단계와 실제로 같은 캐릭터로 인식되는 단계 사이의 차이를 오랫동안 다뤘다고 설명합니다.

서버 개발도 큰 장벽이었습니다. 제작자는 자신을 아티스트라고 소개하며 백엔드 개발 경험이 부족하다고 말합니다. 특히 결제 처리가 가장 큰 난관이었습니다. 크레딧, 만료일, 결제 주기 중간의 업그레이드, 환불 시 처리 방식을 각각 정해야 했고, 대부분의 결정에서 한 번 이상 실수했습니다.

체크아웃 버튼을 눌러도 아무 반응이 없는 버그도 며칠 동안 남아 있었습니다. 오류 메시지가 숨겨진 요소 안에 렌더링되어 실패 사실이 사용자에게 보이지 않았습니다. 다른 문제를 찾다가 우연히 발견했습니다.

■ 출시 후 수치와 유입 경로

두 달 동안 개발한 뒤 약 일주일 전에 출시했습니다. 가입자는 5명이고 결제자는 0명입니다. 제작자는 Discord 서버 몇 곳, itch.io, 한국 인디 개발자 포럼에 홍보 글을 올렸습니다. 한국 포럼에서는 하루에 약 20명이 유입됐지만, 영어권 채널에서는 클릭이 한 번도 발생하지 않았습니다. Discord 글에는 반응만 달렸고 클릭은 없었습니다. X 계정에도 팔로워가 없어 게시물이 퍼지지 않았습니다.

제작자는 개발하는 동안 아무에게도 알리지 않은 점을 후회합니다. 두 달 동안 조용히 만든 탓에 잠재 고객을 모을 채널이 없었습니다. 커뮤니티에서 들은 “요청보다 제안부터 앞세우라”는 조언도 언급했습니다. 지금까지 올린 글이 모두 무언가를 요청하는 내용이었다는 점을 깨달았다고 합니다.

■ 커뮤니티에서 나온 제품 검증 의견

댓글에서는 단순한 이미지 생성보다 캐릭터 일관성 검사가 제품의 본질이라는 의견이 나왔습니다. 한 사용자는 정면, 3/4 측면, 측면, 표정 두 가지를 포함한 기준 시트를 먼저 고정하라고 제안했습니다. 새 방향을 추가할 때 실루엣, 제한된 색상 팔레트, 원점 또는 피벗 중 하나라도 어긋나면 거부해야 한다는 설명입니다. 보기에는 괜찮아도 애니메이션에서 이 기준이 흔들리면 문제가 된다고 지적했습니다.

또 다른 제안은 생성기를 더 추가하기 전에 PNG 시트와 JSON의 출력 계약을 고정하라는 내용입니다. 캔버스 크기, 프레임 수, 원점을 정해 Godot나 Unity에서 별도 트리밍 없이 바로 가져오게 해야 합니다. 이 계약이 느슨하면 도구가 덜어내려던 작업을 결국 아티스트가 다시 처리하게 됩니다.

프레임 선택기를 제품 개선과 과금의 기준으로 삼자는 의견도 나왔습니다. 사용자가 여덟 방향 중 세 장만 남기고 나머지를 버린다면, 실제 캐릭터를 바탕으로 측정한 일관성 점수가 쌓입니다. 세대별 유지 프레임 수를 기록하면 모델 변경 뒤 품질이 좋아졌는지, 어떤 화풍에서 실패하는지 확인할 수 있습니다. 생성된 전체가 아니라 사용자가 남긴 프레임을 기준으로 과금하면 드리프트가 발생한 결과에는 비용을 내고 싶어 하지 않는다는 사용자 기대에도 맞출 수 있다는 제안입니다.

제작자는 지금까지 결과를 눈으로만 비교했다고 답했습니다. 유지 프레임 수를 기록하지 않고 있었다는 점을 인정하며 측정 항목으로 추가하겠다고 했습니다. 다만 생성 시점에 이미 크레딧을 차감하는 현재 구조에서 유지 프레임 기준으로 바꾸면 실패한 프레임 비용을 제작자가 부담하게 됩니다. 사용자가 시트를 내보낸 뒤 프레임을 다시 해제하는 방식으로 과금을 피할 가능성도 제기했습니다. 대안으로는 생성 시 크레딧을 차감하되 사용하지 않은 프레임의 크레딧을 돌려주는 방식을 검토하고 있습니다.

■ Indie Hackers 반응

  • @aryan_sinh — 한국 포럼과 영어 채널의 차이는 유용한 비교 대상입니다. 실제로 클릭한 사람들이 반응만 남긴 사람들과 다르게 행동하는 걸까요, 아니면 아직 증거가 너무 적은 걸까요?
  • @Aryan_09 — 일관성 문제가 진짜 난관처럼 들립니다. 에셋을 생성하는 일과 같은 캐릭터를 여러 각도와 애니메이션에서 알아볼 수 있게 유지하는 일은 전혀 다르고, 후자가 훨씬 어려워 보입니다. 출시 일주일 뒤 사용자 5명, 결제자 0명은 아직 이른 수치이니 너무 많이 바꾸기보다 실제로 돈을 낼 만큼 가치를 느끼는 사용자가 누구인지 먼저 찾아보겠습니다.
  • @etherea — 일관성 검사가 모델이 아니라 제품입니다. 정면, 3/4 측면, 측면, 표정 두 가지를 포함한 기준 시트를 하나 고정하고, 새 방향에서 게임에 직접 쓰이는 세 가지 기준 중 하나라도 실패하면 거부해야 합니다. 실루엣, 작은 범위로 고정한 색상 팔레트, 원점 또는 피벗입니다. 보기에는 괜찮아도 이 기준에서 흔들리는 프레임은 애니메이션을 망칩니다. 더 많은 생성기를 추가하기 전에 출력 계약부터 제공해야 합니다. PNG 시트나 JSON에서 캔버스 크기, 프레임 수, 원점을 고정해야 Godot나 Unity 임포터가 트리밍 과정 없이 바로 가져갈 수 있습니다. 이 계약이 느슨하면 도구가 없애려던 작업을 아티스트가 다시 하게 됩니다. 영어 채널에서 반응이 없다는 문제에는 일반적인 출시 글보다 기존 엔진 스레드에서 실패한 결과와 고정된 결과를 비교하는 영상 하나가 낫습니다. Godot나 RPG Maker 관련 스레드에서 사람들은 발표보다 망가진 스프라이트에 답합니다.
  • @brianainews — 크레딧을 쓰고 다시 돌아오지 않은 5명은 아직 트래픽 문제가 아닙니다. 두 달 동안 만든 제품을 아직 보지 못한 것입니다. “캐릭터를 올리면 그림을 만들어줍니다”라고 말하면 사용자들은 일반 이미지 모델과 비교한 뒤 떠납니다. 실제 제품은 “같은 얼굴로 여덟 방향을 만들고 나머지 에셋도 같은 화풍으로 제작합니다”입니다. 이 비교를 변경 기록이 아니라 첫 사용 과정에 넣어야 합니다. 얼굴이 흔들리는 결과와 고정된 결과를 나란히 보여주는 20초짜리 영상을 하나 만들어 보세요. Godot와 RPG Maker 서버, 아티스트를 찾는 itch 스레드처럼 사람들이 이미 이 문제를 이야기하는 곳에 올리는 편이 일반적인 출시 글보다 효과적입니다. 언어부터 바꾸려고 사이트를 다시 만들 필요는 없습니다. 기존 채널의 언어가 구매자의 언어와 달라도, 구매자가 결제하는 언어로 영상 자막을 달면 됩니다. 일관성 도구에서는 나란히 비교한 결과가 곧 유통 수단입니다. 개발 일지는 나중으로 미뤄도 됩니다.
  • @suraj09 — “두 달 동안 조용히 만들었다”는 부분이 아마 가장 공감됩니다. 제품을 만드는 일과 유통을 만드는 일이 완전히 다른 직업처럼 느껴질 수 있다는 점이 흥미롭습니다. 특히 실제로 누가 이 제품을 필요로 하는지 아직 알아가는 중이라면 더 그렇습니다. 한 가지 궁금합니다. 출시 후 첫 5명의 사용자가 실제로 한 일을 바탕으로 제품을 바꾸고 있나요, 아니면 지금은 주로 더 많은 사람을 찾는 데 집중하고 있나요?
    • @Kitforge2D — 솔직히 말하면 둘 다 아닙니다. 아직 살펴볼 만한 내용이 많지 않기 때문입니다. 5명은 가입했고 무료 크레딧으로 몇 번 생성한 뒤 끝났습니다. 다시 방문한 사람은 아무도 없습니다. 그래서 배울 수 있는 사용 패턴은 없고, 몇 번 처음 시도한 기록만 있습니다.
  • @peptides5 — 프레임 선택기는 조용히 가장 가치 있는 기능입니다. 가장 어려운 문제라고 말한 부분을 이미 측정하기 때문입니다. 누군가 여덟 방향 중 세 장만 남기고 나머지를 버릴 때마다, 직접 만든 테스트 케이스가 아니라 실제 캐릭터를 바탕으로 정의하지 않아도 되는 일관성 점수가 쌓입니다. 생성마다 남긴 프레임 수를 기록하면 모델 변경 뒤 개선 여부와 어떤 화풍에서 실패하는지 알 수 있습니다. 아무도 흔들린 다섯 장에 돈을 내고 싶어 하지 않으니, 실제로 남긴 프레임 수가 정직한 과금 단위이기도 합니다. 결제가 가장 어려웠다고 했으니, 사용자가 실제로 남긴 결과를 기준으로 과금하면 환불 문제도 많이 줄어듭니다.
    • @Kitforge2D — 시간을 들여 제대로 써주셔서 감사합니다. 제품에 관해 누군가 해준 말 중 가장 유용합니다. 측정 부분은 바로 목록에 추가하겠습니다. 생성마다 남긴 프레임 수가 바로 옆에 있는데도 기록하지 않고 있었습니다. 지금까지 모델 변경을 눈으로 결과를 훑어보며 판단했는데, 얼마나 믿을 만한 방식인지 스스로도 알 만합니다. 이 부분은 완전히 놓치고 있었습니다. 과금 방식은 아직 확신이 없어서 더 이야기해보고 싶습니다. 지금은 생성 시점에 크레딧을 차감하므로, 남긴 프레임 기준으로 과금하면 사용자가 선택하기 전에 비용이 이미 발생합니다. 흔들린 결과의 비용을 제가 부담하게 됩니다. 모델을 개선하도록 압박하는 방식으로는 괜찮지만, 건전한 압력인지 단순한 손실 구멍인지 아직 모르겠습니다. 또 하나 분명한 문제가 있습니다. 사용자가 시트를 내보낸 뒤 프레임을 다시 선택 해제하지 못하게 막을 방법이 있을까요? 지금처럼 생성 시 과금하고 남기지 않은 프레임의 크레딧을 돌려주는 방식이 더 정직할 수도 있습니다. 같은 유인을 주면서도 빠져나갈 구멍은 없기 때문입니다. 말씀하신 방식은 실제로 남긴 시점에 결제하는 모델에 더 가까웠나요, 아니면 이런 방식을 생각하셨나요?

원문: Indie Hackers / 번역·요약: Trawling