FPS Arena에 3D 캐릭터를 실었습니다. 그런데 배포본에서만 부서지는 문제가 연달아 셋 나왔습니다. 셋 다 개발 중에는 재현되지 않습니다.
하나 — 폴더 이름의 대소문자
브라우저에서 캐릭터가 통째로 예전 복셀 몸으로 떨어졌습니다.
디스크의 폴더 이름은 models/Mixamo인데 코드는 models/mixamo를 찾고 있었습니다. 윈도우 파일시스템은 대소문자를 안 가리므로 개발 중에는 멀쩡합니다. 그런데 배포본의 패키지 조회는 가립니다.
총은 소문자 폴더에 있어서 정상이었습니다. 그래서 화면에는 "블럭 몸이 새 총을 들고 있는" 모습이 나왔습니다. 절반만 부서지니 원인이 더 헷갈렸습니다.
폴더 이름을 바꾸는 대신 실행할 때 대소문자를 찾아 쓰게 했습니다. 다음에 누가 대문자로 다시 만들어도 같은 일이 안 생깁니다.
여기서 제 검사가 틀렸습니다
이 문제를 처음 조사할 때 저는 "경로 문제 없음"이라고 결론 냈습니다. 사용자가 먼저 발견했습니다.
이유가 있었습니다. 패키지 파일을 프로젝트 폴더 안에서 띄워 확인했기 때문입니다. 패키지 안에서 못 찾은 파일이 옆에 있는 진짜 파일시스템으로 조용히 대체됩니다. 그러니 잘 됩니다. 잘 되는 것을 보고 문제가 없다고 적었습니다.
지금은 검사 도구가 딴 폴더로 복사해서 띄웁니다. 원본 파일이 닿을 수 없는 곳에서 돌려야 배포본을 검사한 것이 됩니다.
둘 — 목록에 껍데기 이름이 나옵니다
고쳤더니 이번엔 캐릭터가 전부 T자세로 걸어 다녔습니다.
동작은 폴더를 훑어서 담습니다. 그런데 배포본에서 폴더를 나열하면 원본 이름 (Dying.glb)이 아니라 껍데기 이름(Dying.glb.import)이 나옵니다. .glb로 끝나는 것만 받도록 되어 있어서 하나도 안 걸렸고, 동작이 0개가 됐습니다.
껍데기를 벗긴 경로로 부르면 로더가 알아서 변환본을 찾아 줍니다.
셋 — 이름에도 껍데기가 붙어 있었습니다
로드 경로는 고쳤는데 여전히 T자세였습니다.
목록에 나온 이름을 그대로 등록에 쓴 것이 원인이었습니다. 동작이 Rifle_Run.glb라는 이름으로 등록됐는데, 게임은 Rifle_Run을 찾습니다. 없으니 조용히 아무것도 재생하지 않습니다.
오류가 안 납니다. 그리고 제가 만들어 둔 "동작 22개 실림" 검사도 통과합니다.
셋을 관통하는 것
세 번 다 같은 모양이었습니다. 실렸는지와 움직이는지는 다른 질문입니다.
첫 번째는 "파일을 찾았는가"를 잘못된 환경에서 물었고, 세 번째는 "동작이 등록됐는가"를 묻고 "동작이 재생되는가"를 묻지 않았습니다. 둘 다 초록불이 켜졌고 둘 다 부서져 있었습니다.
그래서 검사를 바꿨습니다. 스모크가 20프레임 동안 뼈가 실제로 얼마나 움직였는지를 잽니다. 등록 개수가 아니라 좌표 변화입니다. 배포본 검사 도구도 T자세를 발견하면 실패로 끝냅니다.
며칠 전 바다 쪽에서 흰 면 원인을 여섯 번 오진했을 때도, 낚시 쪽에서 입질 시뮬레이터가 전 루어 0을 뱉었을 때도 원인은 검사 도구였습니다. 이번이 세 번째입니다.
옷은 모델에 쏘아 붙여 굽습니다
같이 한 작업입니다. 평면 그림은 UV와 안 맞아서 그냥 못 씁니다 — 전에 컨셉 시트를 그대로 씌웠더니 한복이 아니라 얼룩무늬가 나왔습니다.
T자세 앞뒤 두 장을 모델에 정면·배면으로 쏘아 붙인 뒤 원래 UV로 다시 굽습니다. 이러면 UV가 어떻게 배치돼 있는지 몰라도 옷이 붙습니다.
굽는 과정에서 걸린 것들도 적어 둡니다. 도우미 메시가 경계 상자를 부풀렸고, 그림 밖 표식을 색으로 하면 색 관리 때문에 못 걸러서 덮임을 흑백으로 따로 구웠고, 구멍을 한 겹씩 번지게 하면 다리까지 못 닿아서 거리 변환으로 바꿨고, 윤곽에 배경색 테가 남아 알파를 2픽셀 깎았습니다.
그리고 원화 작업 폴더 39MB가 모델 폴더 안에 들어와 있어서 배포에서 뺐습니다. 웹 전송량이 49.3MB에서 24.5MB가 됐습니다.