게임 개발/학습 일지

TA 코스 2주차 정리

이개 2026. 4. 13. 15:20

머티리얼이란?

재질을 말하며, 언리얼에서는 기본 컬러, 금속 질감, 거칠기 등으로 구성되어 있다.

 

기본적으로는 머티리얼 도메인 Surface, 블렌더 모드 Opaque로 되어있다. 투명도를 적용하고 싶다면 Tranluent나 Masked를 쓰면 된다.

(Material Domain: Surface 기준)에서 가장 자주 쓰이는 기본 핀들은 렌더링 방식인 PBR(Physically Based Rendering) 쓴다.

Opaque 블렌드 모드의 머티리얼

1. 머티리얼 기본 핀의 구조와 역할

🎨 시각적 속성 (Appearance)

  • Base Color (색상): 물체의 고유 색이다. 빛의 반사나 그림자가 포함되지 않은 '순수한 색(Albedo)' 데이터여야 한다.
    • 주의: 금속(Metallic)인 경우 이 값은 반사되는 빛의 색상이 되고, 비금속인 경우 확산되는 색상이 된다.
  • Emissive Color (자체 발광): 물체 스스로 빛을 내는 정도. 1보다 큰 값을 입력하면 Bloom 효과와 함께 주변을 밝히는 광원 역할을 할 수 있다.

🧱 표면 질감 (Surface Logic)

  • Metallic (금속성): 표면이 금속(1.0)인지 비금속(0.0)인지 결정. 중간값(0.5 등)은 물리적으로 드물기에 가급적 0 또는 1로 이분법적으로 사용하는 것이 정석.
  • Specular (반사율): 비금속 표면의 반사 강도를 미세 조정. 기본값(0.5)으로 충분하며, 특수한 코팅 효과가 아닌 이상 자주 건드리지 않는다.
  • Roughness (거칠기): 빛이 얼마나 퍼지는지를 결정. 0(거울처럼 매끄러움)에서 1(분필처럼 거침) 사이의 값을 가진다. 현대 리얼리스틱 그래픽에서 가장 중요한 핀이다.

📐 물리적 형태 및 디테일 (Shape & Detail)

  • Normal (노멀): 실제 폴리곤을 늘리지 않고도 표면의 굴곡(디테일)을 눈속임으로 표현. RGB 채널을 가진 노멀 맵을 연결.
  • Opacity / Opacity Mask (투명도): 물체의 투명한 정도를 결정. 반투명(Translucent) 모드에서는 Opacity를, 구멍이 뚫린(Masked) 모드에서는 Opacity Mask를 사용.
  • Ambient Occlusion (환경광 차폐): 구석진 곳이나 틈새에 생기는 미세한 그림자를 미리 계산해 넣는 핀. 입체감을 더해준다.

 

 

값 노드

1, 2, 3, 4 숫자 버튼을 누르면서 머티리얼 그래프를 좌클릭하면 숫자 개수만큼의 값을 가진 노드가 나온다.

2개의 값만 입력할 시 빛의 3원색 중 R, G 값이 섞인 노란색이 나온다.
3개의 값을 입력할 시 순서대로 R, G, B가 입력된다. G, B가 입력되면 시안이 나온다.

x, y, z는 R, G, B와 매칭된다.

 

프리뷰 버튼 문제

왼쪽 강사님 화면에는 > 버튼이 있는데 오른쪽 내 화면엔 없다.

  • 강사님 화면과 달리 내 노드에는 프리뷰 버튼이 없는데, 노드 우클릭 후 Start Previewing Node 선택하면 프리뷰 된다.

 

Lerp(LinearInterpolate)

선형 보간. 한 값에서 다른 값 사이의 중간 지점을 가리킨다.

 

식: Result = A * (1 - Alpha) + B * Alpha

머티리얼 그래프에서 L + 마우스 좌클릭 하거나 우클릭 후 LinearInterpolate 메뉴를 클릭하면 Lerp 노드가 나온다.

 

Alpha값 0.2 : A에 가까운 값

 

Alpha값 0.5 : A와 B의 중간값
Alpha값 0.8 : B에 가까운 값

0이면 A값, 1이면 B값이 된다.

 

Alpha는 0~1 사이의 값 매핑이기 때문에 이런 식으로 흑백 텍스처를 통해 넣어줄 수도 있다.

 

 

Texture Sample

텍스처 샘플 노드는 png, jpg같은 텍스처 파일을 읽고 그 값을 머티리얼에서 읽을 수 있도록 변환해준다.

T + 클릭으로 텍스처 샘플 노드를 생성할 수 있다.

노이즈 텍스처를 Lerp를 통해 Roughness에 연결하면 이렇게 텍스처의 데이터가 배치된다.

Roughness같은 핀에 색깔을 넣으면 밝기 값(GrayScale)값으로 변환되어 들어간다. 이는 색의 (R + G + B) / 3 을 한 값을 뜻한다. 그래서 보통 육안으로 구분이 가능한 흑백 텍스처를 넣는다.

 

참고로 위 노드처럼 Lerp가 0, 1이고 흑백 텍스처면 Lerp 적용하지 않은 것과 값이 동일하며, Lerp의 A, B값을 조정하여 최소치와 최대치를 조정하여 값 범위를 수 있다. 

 

UV 좌표계(Coordinate)

  • U (Horizontal): 가로 방향 (0 ~ 1)
  • V (Vertical): 세로 방향 (0 ~ 1)

좌표계 표시 중 x, y, z는 이미 사용중이라 그래픽스에서는 uv로 대신한다. u는 우측으로 상승, v는 아래로 상승한다. 즉 좌상단이 (0, 0)이고, 우하단이 (1, 1)이다.

머티리얼에서 TextureCoordinate 노드를 사용하면 이 좌표를 가져올 수 있으며, 이를 이용해 텍스처를 반복(Tiling)시키거나 흐르게(Panning) 만들 수 있다.

UV값으로 표현한 텍스처 좌표색. U축은 레드, V축은 그린이다.

Tilling값은 축을 늘려서 반복시켜준다.

UVTilling이 (1, 1)일 때
UVTilling이 (1, 2)일 때 가로로 한 번, 세로로 2번 반복.
UVTilling이 (2,1)일 때. 가로로 두 번, 세로로 한 번.
UVTililing이 (2, 2)일 때

UV 매핑이란?

3D의 버텍스를 펼쳤을 때 구조도에 버텍스 정보를 통해 면을 매핑하는 것.

 

Component Mask

벡터(색, 좌표 등) 데이터 중 원하는 채널만 뽑아낼 때 쓰는 것. 보통 머티리얼에서 값은 (R, G, B, A)로 들어오는데, Component Mask는 여기서 필요한 것만 추출한다.

 

R값만 추출하도록 체크하면 R값만 적용된다.

 

예를 들어 Texture Coordinate 값에서 R값(U축)만 뽑아내면 가로로 0~1까지 표시된다.

R과 G를 동시에 체크하면 이렇게 된다.

R 또는 G처럼 하나만 연결할경우 1채널 단일 값으로 인식하여 흑백으로 나오지만, 2채널 이상 적용되면 B값은 0으로 처리된 R, G값이 나온다.

언제 쓰냐

1️⃣ Roughness / Metallic 같은 단일 값

👉 텍스처에서 특정 채널만 쓰고 싶을 때

Texture → Component Mask (R) → Roughness
 

2️⃣ Packed Texture (실무에서 매우 중요)

하나의 텍스처에 여러 정보 넣을 때:

R → Ambient Occlusion
G → Roughness
B → Metallic
 

👉 각각 분리할 때 Component Mask 사용


3️⃣ UV 좌표 분리

TextureCoordinate → Mask (R or G)
 

👉 U, V 따로 조작 가능


⚠️ 중요한 포인트

👉 출력 타입이 바뀜

선택 채널결과
R float
RG float2
RGB float3

💡 헷갈리는 부분

👉 “왜 그냥 RGB 쓰면 안 됨?”

  • Roughness 같은 건 float 1개 필요
  • RGB 넣으면 자동 평균됨 (원하지 않는 결과)

👉 그래서 Mask로 정확하게 뽑는 게 중요

 

 

투명도 적용하기

0과 1값으로만 이루어진 화살표 이미지를 이용해 화살표 부분만 보이도록 해본다.

Base Color에 넣으면 이미지가 그대로 출력된다.
Blend Mode를 Translucent로 변경하고, Texture Sample 노드를 Opacity 핀에 연결해준다.

 

검은 부분은 값이 0으로, 흰 부분은 1로 처리되므로 Opacity에 넣을 경우 흰 부분인 화살표만 보이게 된다.

 

Two Sided에 체크해주면 입체처럼 보이게 된다.

투명도를 적용해도 면의 앞면에만 적용된다. 반대면의 화살표가 투과되어 보이지는 않으므로, 해당 방식으로 보이게 하려면 Two Sided 옵션을 켜주면 된다.

 

Panner

텍스터 UV를 시간에 따라 계속 움직이는 노드.

UV + Time * Speed로 구현.

  • 물 흐르는 효과
  • 용암 움직임
  • 구름 이동
  • 스크롤되는 UI 느낌

Texture Sample에 Panner를 연결한 모습

 

Panner 입력:

  • Coordinate (UV) → 기본 텍스처 위치
  • Speed X / Y → 방향 + 속도

출력:

  • 움직인 UV 값

단일 값을 만들어서 SpeedX, SpeedY 파라미터로 저장한다. 인자가 2개 이상의 값을 파라미터로 저장하면 자동으로 4가지 값 파라미터로 저장된다.
변수로 입력하고 싶다면, 단일 입력값을 만든 뒤 Append 노드로 이어붙이고 연결해주면 된다.
3~4개의 값은 AppendMany 노드로 합칠 수 있다. 출력은 2가지, 3가지, 4가지가 가능하다.

만든 머티리얼을 머티리얼 인스턴스로 만들어준다.

 

변수로 만들어준 값은 머티리얼 인스턴스에서 변경해줄 수 있다.

 

머티리얼 인스턴스에서 움직임이 보이지 않으면 햄버거 메뉴에서 Realtime을 체크해준다.