그리드 크롤러와 떠도는 섬은 그림 파일을 하나도 쓰지 않았습니다. 상자와 원기둥과 색만으로 만들었고, 저장소에 이미지가 없다는 사실 자체가 제약이자 장점이었습니다. 받아 올 것이 없으니 빨리 뜨고, 라이선스를 따질 것도 없습니다.

JRPG 퀘스트에서는 그 원칙을 접었습니다.

이유는 하나입니다. 이 장르는 캐릭터가 얼굴입니다. 사이드뷰 전투를 고른 것도 아군 넷이 한 화면에 다 보이기 때문인데, 그 넷이 색깔만 다른 상자면 고를 이유가 없어집니다. 마을에서 말을 거는 사람, 앞에서 버티는 검사, 뒤에서 회복하는 사제 — 이 셋이 서로 달라 보여야 파티라는 말이 성립합니다.

대신 손으로 빚지 않았습니다

접은 것은 "3D 모델을 쓴다"까지고, 접지 않은 것이 하나 더 있습니다. 모델도 코드로 짓습니다.

Blender를 열어 마우스로 다듬는 대신, 파이썬 스크립트가 상자와 구를 배치해 사람을 만들고 GLTF로 내보냅니다. 스크립트니까 다시 돌리면 같은 것이 나오고, 키를 2cm 줄이는 수정이 height 한 줄입니다. 무엇보다 js 쪽 수치와 대조할 수 있습니다 — 뒤에서 다시 말씀드립니다.

부품이 안 맞으면 부품 좌표보다 함수를 의심할 것

검사가 손에 안 잡히고 공중에 떠 있었습니다. 검의 위치를 옮기고, 기울기를 바꾸고, 깊이를 당기고 — 네 판을 그렇게 날렸습니다.

원인은 검이 아니었습니다. 상자를 만드는 헬퍼가 한 변이 1인 큐브에 크기의 절반을 곱하고 있었습니다. 그래서 이 스크립트가 만든 모든 상자가 의도한 크기의 절반이었습니다. 칼날이 절반 길이라 손잡이에 닿을 수 없었고, 몸통이 유난히 작아 보인 것도 같은 원인이었습니다.

한 부품이 이상하면 그 부품을 고치는 게 맞습니다. 그런데 여러 부품이 동시에 이상하면 부품이 아니라 부품을 찍어내는 쪽입니다. 네 판을 날린 뒤에야 그걸 떠올렸습니다.

정면 렌더만 보면 절반은 못 봅니다

만든 모델은 렌더해서 눈으로 봅니다. 그런데 정면 한 장만 보고 있었습니다.

사이드뷰 전투에서 화면에 실제로 나오는 건 옆모습입니다. 정면에서 멀쩡하던 검이 옆에서 보니 몸 앞을 가로질러 배를 통과하고 있었습니다. 정면 그림에서는 검과 몸이 좌우로 떨어져 있어 아무 문제가 없어 보였습니다.

지금은 빌드가 정면 3/4와 측면 3/4를 같이 굽습니다. 한 각도로 통과하는 검사는 그 각도에서만 참입니다.

깊이로 벌리면 원근이 더 벌립니다

검을 팔 앞으로 조금 빼려고 깊이 축으로 21cm 당겼습니다. 그랬더니 화면에서는 검이 몸에서 훨씬 멀리, 아예 몸 밖으로 떠 버렸습니다.

카메라 원근 때문입니다. 앞으로 나온 것은 렌즈에 가까워지므로 더 크고 더 바깥으로 보입니다. 넓은 렌즈일수록 그 과장이 큽니다.

그래서 규칙을 둘로 정리했습니다.

  • 깊이는 거의 0에 두고 좌우로만 벌린다 — 좌우로 벌린 것은 원근이 과장하지 않습니다
  • 렌더 렌즈를 80mm로 길게 쓴다 — 50mm에서 벌어지던 것이 80mm에서는 얌전합니다

만든 것과 쓰는 것을 대조합니다

모델을 코드로 지었기 때문에 할 수 있는 검사가 하나 생겼습니다.

전투에서 몬스터가 서로 겹치지 않게 배치하려면 게임 쪽이 각 몬스터의 반폭과 키를 알아야 합니다. 그 숫자는 js 자료에 적혀 있고, 실제 모양은 Blender 스크립트가 정합니다. 둘이 어긋나면 아무 오류 없이 그냥 겹칩니다.

그래서 빌드가 Blender에서 잰 실측 치수를 파일로 남기고, 셀프테스트가 js의 수치와 대조합니다. 모델을 통통하게 고치고 자료를 안 고치면 그 자리에서 실패합니다.

여기에 얽힌 실수도 하나 있었습니다. 배치 간격을 0.95로 고정값으로 두었더니, 반폭이 0.52인 숲거미 두 마리(1.04가 필요합니다)가 겹쳤습니다. 900판을 돌린 검사가 73건을 잡아냈고, 지금은 양쪽의 실제 폭에서 간격을 계산합니다.

남은 원칙

에셋을 쓰기로 한 뒤에도 지키는 것이 있습니다.

  • 모델은 저장소의 스크립트가 만든다 — 어디서 받아 온 것이 아니라 다시 만들 수 있는 것
  • 화면에 나오는 치수는 게임 자료와 대조된다
  • 3D는 두 각도에서 확인한다

1~4장이 /quest/에서 돌아갑니다. 마을에서 이야기를 듣고 필드로 나가면 몬스터가 눈에 보이고, 뒤에서 접근하면 첫 판을 공짜로 얻습니다.