게임용 3D 모델링 작업 플로우

게임 개발에서 3D 오브젝트 하나를 만드는 작업은 단순히 Blender에서 모델을 만들고 끝나는 것이 아니다.

실제 게임에 들어가는 에셋은 보통 다음과 같은 과정을 거친다.

Reference
-> Blender Modeling
-> UV Unwrap
-> High Poly / Low Poly 정리
-> Substance Painter Bake
-> Texture 제작
-> 필요 시 Photoshop 보정
-> Texture Export
-> Unity Material 설정
-> Lighting / In-Game 검증

간단한 오브젝트라면 일부 과정이 생략될 수 있지만, 전체적인 구조는 이 흐름으로 이해하면 된다.


Reference

가장 먼저 어떤 오브젝트를 만들 것인지 결정한다.

예를 들어 게임에 들어갈 의자라면 실제 의자 사진이나 컨셉 아트를 참고한다.

이 단계에서 확인할 것은 단순한 외형만이 아니다.

형태
-> 크기
-> 비율
-> 재질
-> 색상
-> 표면 상태
-> 사용 목적

게임에서는 현실을 그대로 복사하기보다 게임의 아트 스타일과 성능을 고려해서 적절히 단순화한다.


Blender Modeling

Reference를 기준으로 Blender에서 모델링한다.

기본적인 작업은 다음과 같다.

Primitive 생성
-> Extrude / Inset
-> Loop Cut
-> Bevel
-> Boolean
-> 형태 수정
-> Normal / Smooth 설정

예를 들어 의자라면 좌판, 다리, 등받이, 나사 등의 구조를 만든다.

여기서 중요한 것은 게임에서 실제로 필요한 디테일만 모델링하는 것이다.

화면에서 거의 보이지 않는 부분까지 높은 폴리곤으로 만들 필요는 없다.


High Poly와 Low Poly

조금 더 품질이 필요한 에셋이라면 High Poly와 Low Poly를 분리해서 생각한다.

High Poly는 디테일을 표현하기 위한 모델이다.

High Poly
-> 복잡한 형태
-> 세밀한 조각
-> 작은 홈
-> 표면 디테일

반면 Low Poly는 실제 게임에서 사용하는 모델이다.

Low Poly
-> 적은 Polygon
-> 실제 게임에 배치
-> 성능 고려

그리고 High Poly의 디테일을 Low Poly에 Bake한다.

High Poly
-> Bake
-> Low Poly
-> Normal Map / AO / Curvature 등

이렇게 하면 실제 Mesh의 Polygon 수는 크게 늘리지 않으면서도 표면의 디테일을 표현할 수 있다.

단순한 오브젝트에서는 High Poly와 Low Poly를 따로 만들지 않고 하나의 모델만 사용하는 경우도 많다.


UV Unwrap

모델링이 끝나면 UV를 펼친다.

3D 모델의 표면을 2D 이미지에 대응시키는 과정이다.

3D Model
-> UV
-> 2D Texture

예를 들어 의자의 3D 표면을 펼쳐서 다음과 같은 2D 공간에 배치한다고 생각하면 된다.

3D Chair
    |
    v
UV Layout
    |
    v
Texture Image

Blender에서는 Smart UV Project를 사용할 수도 있다.

Smart UV는 자동으로 UV Island를 생성하기 때문에 빠르게 결과를 확인하기 좋다.

하지만 게임용 에셋을 제대로 제작하려면 직접 Seam을 지정해서 UV를 Unwrap하는 방법도 알아두는 것이 좋다.

Edge 선택
-> Seam Mark
-> UV Unwrap
-> UV Island 정리
-> Packing

특히 텍스처 품질을 일정하게 유지하려면 UV의 크기와 배치도 중요하다.


Substance Painter에서 Bake

UV가 끝났다면 Substance Painter로 모델을 가져온다.

여기서 바로 그림을 그리는 것이 아니라 먼저 Mesh Map을 Bake한다.

Model Import
-> UV 확인
-> Bake Mesh Maps

High Poly와 Low Poly가 있다면 High Poly의 정보를 Low Poly에 굽는다.

이 과정에서 대표적으로 다음과 같은 정보가 만들어진다.

Normal
Ambient Occlusion
Curvature
World Space Normal
Position
Thickness
ID

이 정보들은 이후 Substance Painter의 재질과 마스크를 자동으로 만드는 데 사용된다.

예를 들어 Curvature 정보를 이용하면 모델의 모서리 부분을 자동으로 찾아서 마모 효과를 넣을 수 있다.

Curvature
-> Edge Detection
-> Edge Wear

그래서 Substance Painter는 단순한 그림판이라기보다 3D 모델의 구조 정보를 이용해서 PBR 텍스처를 제작하는 툴에 가깝다.


Substance Painter에서 Texture 제작

Bake가 끝나면 실제 재질을 만든다.

예를 들어 오래된 나무 의자를 만든다면:

Base Material
-> Wood
-> Roughness
-> Dirt
-> Scratch
-> Edge Wear
-> Color Variation

같은 식으로 레이어를 쌓는다.

PBR 기반 게임에서는 보통 다음과 같은 텍스처를 사용한다.

Base Color
Metallic
Roughness
Normal
AO

각 텍스처는 서로 다른 정보를 가지고 있다.

Base Color

물체의 기본적인 색상이다.

나무 -> 갈색
금속 -> 회색
천 -> 원하는 색상

조명에 의해 생기는 명암을 직접 그려 넣는 용도가 아니다.

Metallic

금속인지 아닌지를 표현한다.

0 -> 비금속
1 -> 금속

Roughness

표면이 얼마나 거친지를 표현한다.

낮은 Roughness
-> 매끄러운 표면
-> 반사가 강함

높은 Roughness
-> 거친 표면
-> 반사가 퍼짐

Normal

Mesh의 Polygon을 실제로 늘리지 않고 표면의 방향 정보를 이용해 디테일이 있는 것처럼 보이게 한다.

High Poly에서 Bake한 정보를 Normal Map으로 만들어 Low Poly에 적용하는 것이 대표적인 사용 방법이다.

AO

Ambient Occlusion이다.

오브젝트의 틈이나 서로 가까운 부분에 발생하는 간접적인 어두움을 표현하는 데 사용된다.


그래서 Chair.fbx + Texture가 필요한 이유

게임에 의자 하나를 넣는다고 생각해보자.

최종적으로 다음과 같은 파일이 만들어질 수 있다.

Chair.fbx
Chair_BaseColor.png
Chair_Normal.png
Chair_Mask.png

각각 역할이 다르다.

Chair.fbx

3D 모델 자체다.

Mesh
Vertex
Triangle
UV
Normal
Tangent
Bone

등의 정보를 담는다.

쉽게 말하면 “의자의 형태”다.


Chair_BaseColor.png

의자의 기본 색상 정보다.

나무 -> 갈색
금속 -> 회색
천 -> 파란색

등의 색상을 담는다.


Chair_Normal.png

표면의 방향 변화 정보다.

예를 들어 실제 Mesh에는 단순한 평면이더라도 Normal Map을 사용하면 나무 표면의 작은 굴곡이나 조각이 있는 것처럼 표현할 수 있다.

중요한 점은 Normal Map이 실제 Polygon을 추가하는 것은 아니라는 것이다.

Low Poly Mesh
+
Normal Map
=
디테일이 있는 것처럼 보이는 표면

Chair_Mask.png

여러 Material 정보를 하나의 Texture에 압축해서 저장하는 방식으로 사용할 수 있다.

예를 들어 Unity의 Shader 설정에 따라 다음과 같이 구성할 수 있다.

R -> Metallic
G -> Occlusion
B -> Detail Mask
A -> Smoothness

정확한 채널 구성은 사용하는 Shader와 프로젝트의 Texture Packing 규칙에 따라 달라진다.

따라서 Mask.png라는 이름 자체가 특정 규격을 의미하는 것은 아니다.


Photoshop은 언제 사용하는가?

여기서 Photoshop이 등장한다.

많은 사람들이

Blender
-> Photoshop
-> Substance Painter

순서라고 생각하지만 반드시 그런 것은 아니다.

오히려 일반적인 게임 에셋 제작에서는 Substance Painter가 중심이고 Photoshop은 필요할 때 사용하는 보조 툴에 가깝다.

대표적으로 다음과 같은 상황에서 사용한다.

1. 직접 만든 이미지가 필요한 경우

실제 사진이나 특정 그래픽을 Texture에 넣어야 할 수 있다.

사진
-> Photoshop
-> 불필요한 부분 제거
-> 색상 보정
-> Seam 수정
-> Texture 제작
-> Substance Painter

예를 들어 게임 속 포스터, 신문, 간판, 라벨 같은 것은 Photoshop에서 만드는 것이 편할 수 있다.


2. Base Color를 직접 수정할 때

Substance Painter에서 Export한 Texture가 마음에 들지 않는다면 Photoshop에서 직접 수정할 수 있다.

Substance Painter
-> BaseColor Export
-> Photoshop
-> 색상 / 밝기 / 패턴 수정
-> 저장
-> Unity

3. 반복되는 패턴을 만들 때

벽지, 타일, 바닥, 종이 패턴처럼 반복되는 Texture를 만들 때 Photoshop이 편리하다.

Pattern 제작
-> Seam 제거
-> Tileable Texture
-> Substance Painter 또는 Unity

4. 최종 Texture 보정

Substance Painter에서 모든 작업이 끝났더라도 최종 결과를 Photoshop에서 수정할 수 있다.

예를 들어:

색상 조정
-> 특정 부분 제거
-> 로고 추가
-> 패턴 수정
-> 채널 수정
-> Export

같은 작업이다.

즉 Photoshop은 3D 모델을 만드는 툴이 아니라 2D 이미지와 Texture를 정밀하게 수정하는 툴이라고 이해하면 된다.


Texture Export

Substance Painter에서 작업이 끝났으면 게임 엔진에 맞는 형태로 Export한다.

예를 들어 Unity용으로 다음과 같은 파일이 만들어질 수 있다.

Chair.fbx
Chair_BaseColor.png
Chair_Normal.png
Chair_Mask.png

여기서 중요한 것은 Substance Painter에서 아무 PNG나 Export하는 것이 아니라 게임 엔진과 Shader에 맞는 Export Preset을 사용하는 것이다.

특히 Normal Map이나 Smoothness 같은 값은 엔진마다 기대하는 포맷이나 채널 구성이 다를 수 있다.


Unity에서 Material 제작

이제 Unity로 가져온다.

Chair.fbx
-> Unity Import

Texture
-> Unity Import

Material
-> Shader 선택

Mesh + Material
-> Renderer

그리고 Texture를 Shader의 슬롯에 연결한다.

개념적으로 보면:

Chair.fbx
    +
BaseColor
    +
Normal
    +
Mask
    |
    v
Material
    |
    v
Unity Renderer

이제 게임 월드에 의자를 배치할 수 있다.


마지막은 In-Game 검증

여기서 끝내면 안 된다.

Substance Painter의 Preview와 실제 게임 화면은 다르기 때문이다.

Unity의 조명, Reflection, Post Processing, Exposure 등에 따라 결과가 달라진다.

따라서 실제 게임 환경에서 확인한다.

Unity
-> Lighting
-> Camera
-> Post Processing
-> Material
-> Distance
-> 최종 확인

그리고 문제가 발견되면 다시 이전 단계로 돌아간다.

Unity
-> 문제 발견
-> Texture 수정
-> Substance Painter
-> Export
-> Unity

형태 자체가 문제라면 Blender로 돌아간다.

Unity
-> Mesh 문제
-> Blender
-> Modeling 수정
-> UV 수정
-> Substance Painter
-> Export
-> Unity

게임 에셋 제작은 일직선 작업이 아니라 필요에 따라 이전 단계로 돌아가는 반복 작업이다.


전체 파이프라인

결국 하나의 게임용 의자를 만든다고 하면 다음과 같이 생각하면 된다.

Reference
-> Blender Modeling
-> High Poly / Low Poly
-> UV Unwrap
-> Substance Painter
-> Bake
-> PBR Texture 제작
-> Texture Export
-> Unity Material
-> In-Game 테스트
-> 수정

Photoshop이 필요하다면 중간에 들어간다.

Reference
-> Blender
-> UV
-> Substance Painter
-> Photoshop 보정
-> Texture Export
-> Unity

또는 특수한 2D Texture를 먼저 제작해야 한다면:

Reference
-> Photoshop Texture 제작
-> Blender
-> UV
-> Substance Painter
-> Texture 통합 / 보정
-> Unity

즉 Photoshop이 필수인 것은 아니다.

게임용 3D 에셋 제작에서 핵심적인 세 가지 툴의 역할을 단순화하면 다음과 같다.

Blender
-> 3D 형태를 만든다

Substance Painter
-> 3D 모델의 재질과 Texture를 만든다

Photoshop
-> 2D 이미지와 Texture를 정밀하게 수정한다

그리고 최종적으로 게임 엔진에서:

FBX
-> Mesh

BaseColor
-> 색상

Normal
-> 표면 디테일

Mask
-> Material 속성

Material
-> Shader에 이 정보를 결합

Renderer
-> 실제 게임 화면에 출력

이렇게 연결된다.

이 구조를 이해하면 툴 자체를 외우는 것보다 중요한 “3D 모델 -> UV -> Texture -> Material -> Rendering”이라는 게임 그래픽의 데이터 흐름을 이해할 수 있다.