Phase 6: 환경과 월드 빌딩 | 예상 학습 시간: 40분


🎯 학습 목표

  • 모듈형 에셋의 핵심 개념인 그리드 시스템과 피벗 규칙을 이해하고 적용할 수 있다
  • 벽, 바닥, 모서리 등 기본 모듈 세트를 설계해 반복 배치로 레벨을 조립할 수 있다
  • 모듈 간 이음새(Seam)와 UV 타일링 문제를 진단하고 해결할 수 있다

1. 모듈형 에셋이란 무엇인가

모듈형(Modular) 3D 에셋은 벽, 바닥, 기둥, 계단처럼 재사용 가능한 조각 단위로 레벨을 조립하는 방식입니다. 던전이나 건물 인테리어처럼 반복되는 구조를 통짜(unique) 메쉬로 만드는 대신, 일정한 크기의 블록을 레고처럼 이어 붙여 완성합니다.

Day 36에서 다룬 Terrain은 넓은 야외 지형에 적합했지만, 실내 공간이나 인공 구조물은 모듈형 워크플로우가 표준입니다.

방식장점단점
통짜(Unique) 메쉬디테일 표현 자유도 높음메모리·제작 시간 큼, 재사용 불가
모듈형(Modular) 에셋재사용성 높음, 빠른 레벨 반복(iteration), 드로우콜 배칭에 유리그리드 규칙을 엄격히 지켜야 함, 반복 패턴이 눈에 띌 수 있음

💡 실무 팁: AAA 게임의 던전/인테리어 레벨 대부분은 모듈형 에셋 기반입니다. 초기 설계 단계에서 그리드 크기를 잘못 잡으면 이후 모든 모듈을 다시 만들어야 하므로, Day 37 내용은 반드시 프로젝트 초반에 확정해야 합니다.


2. 그리드 시스템 설계

모듈형 에셋의 핵심은 **일관된 그리드 단위(Grid Unit)**입니다. 예를 들어 그리드를 2m × 2m × 3m(가로×세로×높이)로 정하면, 모든 벽/바닥 모듈은 이 배수로 제작합니다.

그리드 단위 예시:
- 바닥 타일: 2m × 2m
- 벽 세그먼트: 2m(폭) × 3m(높이) × 0.2m(두께)
- 문 프레임: 2m(폭) × 3m(높이) — 바닥 1칸과 동일한 폭
- 기둥: 0.5m × 0.5m × 3m

그리드 단위를 정할 때 고려할 점:

  1. 캐릭터 스케일과의 비율: Unity 기본 캐릭터 컨트롤러 높이는 보통 1.8~2m입니다. 벽 높이가 3m면 여유 있는 실내 공간이 됩니다.
  2. 복도 폭의 배수 관계: 복도가 2m, 방이 4m(2m×2), 큰 홀이 6m(2m×3)처럼 정수 배수가 되도록 설계하면 모듈 조합이 항상 딱 맞아떨어집니다.
  3. Blender 작업 시 그리드 스냅: Blender에서 N 패널의 Transform 값을 그리드 단위에 맞춰 정수로 배치하고, Edit Mode에서 Shift+Tab으로 스냅을 켜고 Increment 값을 그리드 단위로 설정합니다.

💡 실무 팁: 그리드 단위는 “1m 정수 배수"보다 캐릭터와 카메라 시야각을 기준으로 실측하는 것이 낫습니다. 너무 작은 그리드(0.5m 이하)는 모듈 수가 폭증하고, 너무 크면(4m 이상) 공간이 밋밋해 보입니다.


3. 피벗(Pivot)과 오리진 규칙

모듈형 에셋에서 가장 흔한 실수는 피벗 위치를 모듈마다 다르게 잡는 것입니다. 피벗이 일관되지 않으면 Unity에서 배치할 때마다 위치를 수동 보정해야 해서 그리드 스냅의 이점이 사라집니다.

권장 규칙:

  • 바닥/천장 모듈: 피벗을 **모듈의 좌하단 모서리(코너)**에 배치 — Unity에서 정수 좌표에 놓으면 다음 모듈이 자동으로 이어짐
  • 벽 모듈: 피벗을 벽 하단 중앙 또는 좌측 하단 모서리로 통일
  • 소품(문, 창문, 기둥): 피벗을 바닥 접촉면의 중앙으로 설정 — 회전 배치 시 예측 가능
Blender에서 피벗 재설정 절차:
1. Object Mode에서 3D 커서(Shift+C)를 원하는 위치(모서리 등)로 이동
2. Object > Set Origin > Origin to 3D Cursor
3. Export 전 Apply All Transforms (Ctrl+A > All Transforms)로 스케일/회전값을 1/0으로 초기화

💡 실무 팁: 피벗 규칙은 Day 22~24에서 다룬 FBX Export/Import 설정과 함께 지켜야 합니다. Blender에서 피벗을 코너에 두어도 Unity Import 시 Scale Factor가 어긋나면 그리드가 밀립니다. Import 후 첫 모듈을 원점(0,0,0)에 놓고 두 번째 모듈이 정확히 그리드 단위만큼 떨어져 붙는지 반드시 확인하세요.


4. 기본 모듈 세트 구성하기

실내 레벨을 조립하려면 최소한 다음 모듈 세트가 필요합니다.

모듈 종류개수(최소)설명
바닥 (Floor)1~2정사각형 기본 타일, 필요 시 장식 변형 1개
벽 (Wall - Plain)1장식 없는 기본 벽
벽 (Wall - Doorway)1문이 뚫린 벽 (문 프레임 포함 또는 별도)
벽 (Wall - Window)1창문이 뚫린 벽
모서리 (Corner)1내부 모서리용 — 외부 모서리는 벽 2개 회전으로 대체 가능
기둥 (Pillar)1넓은 공간의 구조적 포인트
천장 (Ceiling)1바닥과 동일 그리드, 필요 시 생략하고 Skybox로 대체
계단 (Stairs)1층고 변화가 있는 레벨에만 필요

이 최소 세트만으로도 90도 회전(0°, 90°, 180°, 270°)과 조합을 통해 상당히 다양한 레이아웃을 만들 수 있습니다. Unity에서 실제로 배치할 때는 Prefab으로 만들어두고 Ctrl+D(복제) 후 그리드 위치를 이동하며 조립합니다.

// 그리드 스냅 배치를 돕는 간단한 에디터 유틸리티 예시
using UnityEngine;

public class GridSnap : MonoBehaviour
{
    public float gridSize = 2f;

    void OnDrawGizmosSelected()
    {
        Vector3 pos = transform.position;
        pos.x = Mathf.Round(pos.x / gridSize) * gridSize;
        pos.z = Mathf.Round(pos.z / gridSize) * gridSize;
        transform.position = pos;
    }
}

💡 실무 팁: Unity 자체 그리드 스냅(Edit > Grid and Snap Settings)을 프로젝트 그리드 단위와 동일하게 설정해두면, Scene 뷰에서 Ctrl 키를 누른 채 드래그할 때 모듈이 자동으로 격자에 맞춰집니다.


5. 이음새(Seam)와 UV 타일링 문제 해결

모듈형 에셋에서 가장 눈에 띄는 결함은 모듈 사이의 **이음새(Seam)**와 텍스처 반복 패턴입니다.

이음새가 생기는 원인:

  • 모듈 경계의 버텍스 위치가 미세하게 어긋남 (Export/Import 과정의 부동소수점 오차)
  • 모듈마다 UV 시작점이 달라 텍스처 경계선이 어긋나 보임
  • 라이트맵 UV(Lightmap UV, Day 38에서 다룰 내용)가 모듈 간 다르게 베이크되어 그림자 경계가 도드라짐

해결 방법:

  1. 버텍스 정렬: Blender에서 모듈 경계 버텍스를 정확한 그리드 좌표에 스냅(Shift+S > Cursor to Grid 등 활용)
  2. UV 타일링 일관성: 벽 텍스처의 UV를 월드 그리드 단위에 맞춰 정수 배수로 매핑 — 벽 폭이 2m면 텍스처가 정확히 1회 또는 2회 반복되도록 UV 스케일 설정
  3. 트림 시트(Trim Sheet) 활용: 모서리, 몰딩 같은 디테일은 개별 텍스처 대신 하나의 긴 “트림” 텍스처 스트립에서 UV로 잘라 쓰는 방식 — 텍스처 메모리를 아끼고 이음새를 줄임
  4. 반복 패턴 완화: 동일 모듈이 연속 배치될 때 눈에 띄는 반복을 막기 위해, 벽 변형(Variant) 2~3종을 만들어 무작위로 섞어 배치
트림 시트 예시 레이아웃 (하나의 텍스처 안에):
[벽 몰딩] [모서리 장식] [파이프/배관] [낙서/오염 디테일]
→ 여러 모듈이 이 한 장의 텍스처를 UV로 다르게 잘라서 참조

💡 실무 팁: 반복 패턴이 거슬린다면 텍스처를 다양화하기 전에 먼저 배치 자체의 리듬을 깨보세요. 완전히 동일한 간격보다 벽 장식이나 소품(파이프, 포스터 등)을 불규칙한 위치에 추가하는 것이 훨씬 저렴하고 효과적인 해결책입니다.


📝 핵심 요약

  1. 모듈형 에셋은 일관된 그리드 단위를 기준으로 벽/바닥/모서리 등을 반복 조립하는 레벨 디자인 방식이다
  2. 그리드 크기는 캐릭터 스케일과 복도/방 폭의 배수 관계를 고려해 프로젝트 초반에 확정해야 한다
  3. 피벗 위치(코너, 하단 중앙 등)를 모듈 전체에 일관되게 적용해야 그리드 스냅이 제대로 작동한다
  4. 최소한의 기본 모듈 세트(바닥/벽/모서리/기둥)와 회전 조합만으로도 다양한 레이아웃을 만들 수 있다
  5. 이음새와 텍스처 반복 문제는 버텍스 정렬, UV 일관성, 트림 시트, 배치 리듬 조절로 해결한다

🔗 참고 자료


⬅️ 이전: Day 36 — Terrain 시스템으로 지형 만들기 | 다음: Day 38 — 라이트맵 베이킹과 글로벌 일루미네이션 ➡️