Dev./UE 언리얼 엔진

[TIL_250211_1] 머티리얼 시스템 이해 (기초) #Graphics

raindrovvv 2025. 2. 11. 14:47

💭회고

머티리얼과 셰이더의 차이점, PBR(Material의 물리 기반 렌더링), 그리고 최적화 방법까지 정리해봤다.
앞으로는 머티리얼 노드 활용법과 고급 머티리얼 제작 기법을 추가로 학습하면 좋을 것 같다.

📒학습 내용

1️⃣ 머티리얼과 셰이더의 차이

핵심 요약

  • 머티리얼(Material): 셰이더 설정을 조정하여 모델의 시각적 효과를 결정한다.
  • 셰이더(Shader): GPU가 실시간 렌더링을 위해 수행하는 그래픽 계산 코드.
  • 언리얼 엔진에서는 셰이더 그래프 기반의 노드 시스템을 활용해 머티리얼을 제작한다.

"셰이더는 빵을 굽는 오븐이고, 머티리얼은 그 오븐의 설정(온도, 시간 등)이다."


2️⃣ PBR(Physically Based Rendering) 기초

핵심 요약
PBR은 현실적인 조명 효과를 구현하는 렌더링 기법이다.

🔹 PBR 주요 속성

Base Color 머티리얼의 기본 색상 (RGB 값)
Roughness 표면의 거칠기 조정 (0 = 매끄러움, 1 = 거침)
Metallic 0 = 비금속, 1 = 금속성 표현

 

📌 베이스 컬러 예제 (비금속 표면)

0.02
모래사막 0.36
빙하 0.56

 

📌 금속 베이스 컬러 예제

금속  RGB 값
(1.000, 0.766, 0.336)
(0.560, 0.570, 0.580)
(0.972, 0.960, 0.915)
구리 (0.955, 0.637, 0.538)
알루미늄 (0.913, 0.921, 0.925)

 


3️⃣ 머티리얼 파라미터와 인스턴스

핵심 요약
머티리얼을 더 효율적으로 관리하기 위해 파라미터와 인스턴스를 활용한다.

🔹 머티리얼 파라미터란?

머티리얼의 속성을 변수로 설정하여 실시간으로 변경 가능하게 만드는 기능이다.

📌 주요 파라미터 종류

  • Scalar Parameter: 단일 값 (예: Roughness, Metallic 등)
  • Vector Parameter: RGB 값 (예: Base Color)

🔹 머티리얼 인스턴스란?

🤔인스턴스???

더보기

원본(클래스 또는 객체)을 복제하여 새로운 개체를 생성한 것
- 기본 템플릿을 유지하면서 개별적으로 조작할 수 있도록 하는 개념

class Car {
public:
    string color;
    Car(string c) { color = c; }
};

int main() {
    Car car1("Red");  // car1은 Car 클래스의 인스턴스
    Car car2("Blue"); // car2도 Car 클래스의 인스턴스
}
  • 머티리얼을 복제하지 않고, 인스턴스만 생성하여 속성 값을 조절하는 방식 : (줄여서 MI라고 한다)
  • 성능 최적화에 도움을 주며, Draw Call을 줄일 수 있음
    • Draw Call ? : CPU가 GPU에게 그래픽을 렌더링하라고 요청하는 명령, Draw Call이 많아지면 성능이 저하된다.
  • 블루프린트와 연동하여 동적 조정 가능

🛠️ 실무 팁:

  • 하나의 머티리얼을 여러 오브젝트에서 활용할 때 인스턴스를 사용하면 성능이 좋아진다.
    블루프린트에서 머티리얼 파라미터를 변경하면 게임 내에서 실시간으로 효과 변경이 가능하다.

4️⃣ 텍스처 매핑 및 주요 속성

핵심 요약
텍스처 매핑은 3D 모델에 2D 이미지를 입혀 현실적인 질감을 표현하는 과정이다.

📌 주요 텍스처 속성

노멀 맵 (Normal Map) - 표면의 굴곡을 표현하여 디테일 향상
월드 포지션 오프셋 (World Position Offset) - 버텍스를 이동시켜 움직임을 추가
- 오브젝트를 움직여 다양한 효과를 주는 데 유용.
앰비언트 오클루전 (Ambient Occlusion) - 틈새 그림자를 생성하여 현실감 증가
- Maya, 3ds Max, Zbrush와 같은 3D 모델링 프로그램에서 생성되는 경우가 많다

🎯 실전 팁

Normal Map을 사용하면 낮은 폴리곤 모델도 높은 디테일을 가질 수 있다.

텍스처 해상도를 최적화하면 메모리 사용량을 줄일 수 있다.


5️⃣ 머티리얼 최적화

핵심 요약
머티리얼을 최적화하면 게임 퍼포먼스를 향상시킬 수 있다.

📌 Draw Call 최적화 방법

머티리얼 인스턴스 사용 동일한 머티리얼을 공유하여 성능 최적화
LOD(Level of Detail) 적용 거리별로 저해상도 머티리얼 사용
텍스처 아틀라스 활용 여러 개의 텍스처를 하나로 합쳐 성능 향상
Instanced Rendering 사용 동일한 오브젝트를 하나의 Draw Call로 처리
💡 TIP:
Draw Call이 많아지는 원인을 분석하려면 GPU Visualizer (Shift+Ctrl+,) 또는 Stat RHI 콘솔 명령어를 활용하면 좋다.

 


🔗 참고 자료

📚 추가 학습 자료

 

NormalMap-Online

 

cpetry.github.io

 

📢 추가 정보

레벨 디자인에 대한 인사이트

레퍼런스 사이트