1~3번 작업 완료
2026-09-20 · v0.6.2 · 실제 CC0 게임 캐릭터로 검증
결론
셋 다 고쳤습니다. 그런데 고치는 도중 훨씬 큰 문제가 나왔습니다. 진짜 게임 캐릭터를 넣으면 캐릭터가 통째로 공으로 바뀌어 나오고 있었습니다. 숫자만 보면 "부피 보존 1.00"이라 완벽해 보였습니다. 렌더해서 눈으로 보고서야 알았습니다.
1. 가장 중요한 발견 — 숫자는 거짓말을 했다
캐릭터 파일에는 눈에 안 보이는 껍데기 공(면 80개짜리)이 같이 들어 있었습니다. 우리 도구는 파일 안 모든 메시를 말없이 하나로 합칩니다. 그래서 공이 캐릭터를 삼켰습니다.
- 공은 완벽하게 닫힌 도형이라 부피 보존 1.00, 조각 60/60, 경고 0건으로 나왔습니다.
- 부피가 3.66㎥였습니다. 2m짜리 사람은 0.1㎥ 정도입니다. 36배나 큰데 아무도 눈치채지 못했습니다.
- "볼록한 정도 1.0"도 사실 맞는 값이었습니다. 공이니까요.
교훈은 분명합니다. 숫자 검증만으로는 부족합니다. 앞으로 실제 그림을 같이 봐야 합니다.
2. 고친 것
- 파일 안 부품을 보여 주고 고를 수 있게
이제import_model이 부품 목록을 돌려줍니다. "면이 80개뿐인데 제일 크다"처럼 수상한 부품은 경고합니다.parts=["Adventurer", "Backpack"]처럼 원하는 것만 고를 수 있습니다. - 뼈대에 묶인 메시를 제대로 굽기
뼈대(스킨)가 붙은 메시는 모디파이어를 먼저 구워야 지금 자세가 남습니다. 부모를 떼는 순서도 거꾸로였습니다. 예전 순서로는 부품 크기가 100배 어긋나 0.01m로 찌그러졌습니다. - 깨진 메시 수리 강화
겹친 면 걷어내기, 면이 3장 이상 붙은 모서리에서 여분 걷어내기, 구멍 메우기 2차 시도를 넣었습니다. 캐릭터가 구멍 256개·비다양체 10개 → 완전히 닫힘이 됐습니다. - 정리 단계가 오히려 망칠 때 되돌리기
겹친 덩어리를 하나로 합치는 단계가 이 캐릭터에서는 비다양체 모서리를 10개에서 8,390개로 늘렸습니다. 이제 결과가 더 나빠지면 버리고, 대신 조각낼 때 느리지만 정확한 계산으로 넘어갑니다. - 볼록한 정도 계산 교정 (2번 항목)
닫히지 않은 메시는 부피 자체가 헛값이라 계산하지 않습니다. 수리해서 닫은 뒤에 잽니다. - 무게 안내 (3번 항목)
속이 빈 껍데기를 통짜로 계산한다는 점과, 낮출density값을 같이 알려 줍니다. - 작은 물건 반올림 버그
5cm짜리 물건이 보존율 1.25로 뜨던 문제를 잡았습니다. 부피를 소수점 4자리에서 자르고 있었습니다.
3. 고치기 전과 후
| 항목 | 고치기 전 | 고친 뒤 |
|---|---|---|
| 가져온 모양 | 공 (면 80개) | 캐릭터 (면 10,198개) |
| 부피 | 3.66㎥ (사람의 36배) | 0.14㎥ |
| 크기 | 1.9 × 2.0 × 2.0m | 0.66 × 0.79 × 2.0m |
| 부피 보존 | 1.00 (공이라서) | 1.00 (진짜 캐릭터) |
| 조각 수 | 60/60 (공) | 47/50 |
| 볼록한 정도 | 1.0 (완전한 공) | 0.307 |
| 무게 | 8,781kg | 297kg + 낮추는 방법 안내 |
진짜 캐릭터만 넣었을 때 처음에는 보존율이 0.405였습니다. 부품끼리 서로 관통해서입니다. 느리지만 정확한 계산으로 넘기니 1.00이 됐습니다. 50조각에 약 100초 걸립니다.
4. 기존 것들은 그대로
결함 GLB 7종과 데모 건물 모두 조각 수와 부피 보존 1.00을 유지합니다. 자동 테스트는 36개에서 37개로 늘었고 전부 통과합니다. 새 테스트는 이 컴퓨터에 있는 실제 캐릭터를 씁니다(파일이 없으면 건너뜁니다).
깃허브 main 에 v0.6.2로 올렸습니다.
5. 남은 것
- 조각 3~4개가 닫히지 않습니다. 그 조각의 무게는 어림값입니다. 47개 중 3개 수준입니다.
- 부품끼리 관통하는 모델은 느립니다. 50조각에 약 100초입니다.
- 먼지가 큰 구슬처럼 보입니다. 빠른 미리보기 화질 탓도 있지만 크기 자체가 커 보입니다.
- 뼈대 애니메이션은 따라가지 않습니다. 현재 자세로 굳혀서 부숩니다.
- 블렌더 앱을 통한 실제 경로는 아직 확인 못 했습니다. 지금 앱이 꺼져 있습니다.