언리얼 중세 생존 게임 만들기 2편, 오두막과 얼굴과 걸음걸이를 다시 만든 기록
「영주의 탄생」 개발기 2편이에요. 속이 빈 AI 3D 모델, 네 번 다시 지은 오두막, 눈이 뭉개진 캐릭터 얼굴, 줍기와 앉아 걷기 동작을 고치기 전과 후 실제 화면으로 비교해요.
목차 9개
1편에서는 「영주의 탄생」의 첫날과 둘째 날이 지금 어떻게 돌아가는지 보여 드렸어요. 이번 편은 화면에 보이는 것들이에요. 3D 모델, 오두막, 캐릭터 얼굴, 몸동작이고, 거의 다 한 번에 안 돼서 여러 번 다시 만들었어요.

AI 3D 모델은 속이 빈 껍데기였어요
처음엔 그림을 3D로 바꿔 주는 서비스로 소품과 건물을 만들었어요. 그런데 검수 페이지에서 보니 두께감이 없고 속이 비어 보였어요. 그래서 31종을 전부 블렌더 스크립트로 재 봤어요. 면이 한쪽에만 붙은 모서리를 세면 뚫린 곳이 있는지 알 수 있는데, 31종 모두 닫힌 입체가 아니었어요.
숫자만으로는 버릴 걸 고를 수 없어서, 세 각도로 렌더해서 눈으로 나눴어요. 12종은 형태부터 무너졌고 19종은 구멍만 메우면 쓸 만했어요.

무너진 12종은 블렌더 스크립트로 처음부터 다시 만들었어요. 12개 모두 닫힌 입체가 됐지만 이번엔 재질이 없어서 사실감이 없었어요. 형태는 맞아도 그대로 게임에 넣기는 어려웠어요.
폐허 오두막은 스크립트로 직접
그래서 여러 개를 찍어 내는 대신 하나를 끝까지 제대로 만들기로 했어요. 고른 건 첫날 제일 먼저 조사하는 폐허 오두막이에요. AI가 벽, 지붕, 박공을 나눠 만든 조각은 축과 비율이 제각각이라 조립이 계속 실패했어요. 앞 박공만 다시 뽑으려던 시도는 생성 서버 메모리 부족으로 11번 실패했고요.
방법을 바꿨어요. 블렌더 스크립트가 기준 그림을 보고 골조, 회반죽 벽, 돌 기초, 널 지붕, 잔해를 미터 단위로 직접 만들고, AI 이미지는 텍스처로만 써요.

오두막은 네 번 지었어요
둘째 날 짓는 오두막이 문제였어요. 처음 게임에 들어간 건 임시 모델이었어요. 4×2m 상자에 텍스처가 늘어나 있었어요.

그다음 새로 그린 세 개를 모두 퇴짜 놨어요. 나무 헛간은 창고나 화장실 같았고, 초가집과 통나무집은 폐허 옆에 두니 따로 놀았어요. 이유가 셋 다 같았어요. 이미 폐허를 만들어 놨으니, 그게 멀쩡하게 지어졌을 때 모습으로 가야 에셋끼리 어울린다고 했어요.
그래서 네 번째는 새로 그리지 않았어요. 폐허를 만든 같은 스크립트에 옵션 하나를 더해서, 무너지기 전 모습을 뽑았어요.
build_ruined_cottage_modular.py --intact SM_Cabin_Log_Homestead.glb
같은 코드, 같은 난수 시드, 같은 텍스처라서 부재 하나하나의 흔들림까지 폐허와 같아요. 벽 구멍, 처진 용마루, 잔해를 끄고, 긴 벽에 덧창 달린 창을, 박공 출입구에 널문을 달았어요. 회반죽이 떨어져 나간 자리는 주변 색과 결로 메웠어요.

사진에 붙인 번호대로 1번이 처음 상자이고 4번이 지금 오두막이에요. 크기도 4×2m에서 4.4×3.8m로 커졌어요.

가져오기에서도 한 번 속았어요. 모델을 고쳐도 게임 안 모습이 그대로였는데, 언리얼의 재가져오기가 기존 텍스처와 재질을 바꾸지 않아서였어요. 지금은 가져오기 스크립트가 폴더를 먼저 비우고 새로 가져와요.
눈이 뭉개진 얼굴
셋째 날에는 늑대에게 쫓기던 모녀, 마렌과 일제가 찾아와요. 첫 결과를 보고 눈알이 다 이상하다고, 다시 만들어 달라고 했어요. 몇 번을 다시 해서 알게 된 게 있어요.
- 3D 생성기는 같은 그림을 넣으면 늘 같은 메시를 줘요. 다시 시도하려면 그림을 바꿔야 해요.
- 팔을 몸에서 45도쯤 떼야 해요. 옷에 붙어 있으면 손목이 꼬여서 나와요.
- 조명은 그림자 없는 평평한 빛이어야 해요. 스튜디오 조명은 옷에 얼룩으로 구워졌어요.
- 전신 그림에서 나온 얼굴은 어떤 조건에서도 못 썼어요. 얼굴에 들어가는 픽셀이 너무 적어요.
그래서 얼굴은 흉상 그림을 몸 그림과 같은 조명으로 따로 만들어 3D로 바꾸고, 블렌더에서 몸에 붙여요. 목 피부에서 자르면 톱니 모양 구멍이 생겨서, 턱 아래 후드나 숄 천 안에서 잘라요. 천의 이음새는 옷의 일부처럼 보이거든요.

일제는 두 번 퇴짜를 맞고 입력 그림부터 다시 뽑고 나서야 통과했어요. 마렌은 목이 드러나는 옷이라 예외로 목에서 붙였는데, 오른쪽 사진에 파란 동그라미 친 목과 숄 경계에 이음새가 보여요.
무릎 꿇던 줍기
주인공 줍기 동작은 처음에 Mixamo에서 받은 클립을 썼어요. 0.25초마다 찍어 보니 한쪽 무릎을 꿇고, 2.13초 끝까지 일어서지 않고, 몸 전체를 쓰는 클립이라 한 발짝만 움직여도 끊겼어요. 이 게임에서 줍기는 대부분 달리면서 하는데요.

클립을 버리고, 자세를 코드로 고치는 노드에 손 뻗기를 더했어요. 다리는 달리기를 계속하고 상체만 숙여요. 서서 땅의 물건을 주우면 0.95초, 달리거나 덤불처럼 허리 높이면 0.53초예요.

처음엔 등만 접었는데 손이 바닥 40~50cm 위에서 멈췄어요. 팔 길이가 60cm라 무릎을 굽혀야 닿아요. 그래서 엉덩이를 내리고 발은 제자리에 심어 무릎을 접게 했어요. 슬로모션으로만 보다가, 서서 주울 때 엉덩이가 0.16초 만에 55cm 떨어지는 걸 놓친 적도 있어요. 그 뒤로는 실제 속도 영상도 꼭 봐요.
실제 사람 움직임과 나란히 놓고
앉아 걷기와 횃불 들고 달리기도 팔과 상체가 괴상했어요. 공개된 CMU 모션캡처 데이터에서 실제 사람 관절 값을 가져와, 게임 캐릭터와 같은 잣대로 재서 한 걸음을 0~100%로 잘라 비교했어요.


| 앉아 걷기 | 실제 | 고치기 전 | 고친 후 |
|---|---|---|---|
| 상체 기울기 | 43~46° | 14° | 43° |
| 무릎 굽힘 | 45~97° | 110~123° | 70~79° |
| 팔 흔들림 폭 | 2~5° | 29~36° | 5° |
사람은 엉덩관절에서 상체를 숙이고 팔은 거의 안 흔들어요. 우리 캐릭터는 반대로 쪼그리고 상체를 세운 채 팔을 조깅처럼 흔들고 있었어요. 횃불 들고 달리기는 빈 팔을 늘어뜨려 둔 게 틀렸어요. 달리는 사람은 팔꿈치를 100도 넘게 굽혀요.
이 비교에 쓴 스크립트와 속 빈 모델 검사, 머리 붙이기 스크립트는 글 아래에서 내려받을 수 있어요.

에디터가 내내 DX11이었어요
땅과 풀을 더 좋게 해 달라고 하던 중에, 에디터가 계속 DX11로 돌고 있었다는 걸 알았어요. 게임 실행 스크립트에만 DX12가 붙어 있어서 Nanite와 테셀레이션이 에디터에서는 안 나오고 있었어요. DX12로 바꾸자 이번엔 이 PC 그래픽카드에서 가상 섀도 맵이 크래시를 내서 일반 그림자로 돌렸어요. 나무도 잎 달린 가지가 Nanite 조립 부품이라 설정 한 줄이 없으면 고사목처럼 보였어요.
써 보니
좋은 점은 오두막이에요. 폐허와 같은 코드에서 나온 집이라 둘을 나란히 세워도 한 동네 건물 같고, 제가 통과시킨 것도 이 버전이에요. 줍기는 이제 한 발짝 움직였다고 동작이 끊기지 않아요.
아쉬운 점은 이래요.

- 에디터에서 돌리면 위 경고가 늘 떠 있어요. Lumen 표면 캐시가 300% 넘게 초과됐고 비디오 메모리도 1GB쯤 예산을 넘었다고 해요. 원인은 아직 안 잡았어요.
- 마렌과 일제는 모델만 있고 뼈대를 심지 않았어요. 그래서 게임 안에서 아직 못 움직여요. Mixamo에 올려 뼈대를 심는 건 제 몫으로 남아 있어요.
- 앉아 걷기 한 걸음이 우리는 0.75초, 실제는 1.1~1.34초예요. 발 박자는 걷기 클립이 정해서, 맞추려면 앉아 걷기 전용 클립이 필요해요.
- 활은 완료했다고 적었다가 다시 열었어요. 자동 테스트는 통과했는데 제가 보니 손목과 팔, 허리가 비틀려 있었어요. 숫자 테스트만으로는 사람 자세를 확인할 수 없었어요.
지금 상태와 남은 것
지금은 서장을 다듬고 있어요. 첫날 밤의 늙은 행상인, 게임 중 음성과 자막, 상황 힌트 카드, 둘째 날의 짧은 장면, 계절 표시가 아직 없어요. 셋째 날 마렌과 일제의 이야기는 설계만 있어요. 여러 AI 세션이 같은 프로젝트에서 일하다 보니 찌꺼기도 쌓여서, 도구 폴더 맨 위의 스크립트 285개를 94개로 줄이고 게임이 쓰지 않는 에셋 347개를 따로 옮겼어요. 이제는 커밋할 때마다 정리 규칙을 검사해요.
영주가 되기까지는 아직 한참 남았어요. 다음 기록은 서장이 끝까지 이어지면 쓸게요.
큰 모델과 작은 모델에게 일을 나눠 맡겨 본 이야기는 3편에서 이어서 적을게요.
댓글 0
아직 댓글이 없어요. 첫 이야기를 남겨 주세요.