💭회고
머티리얼과 셰이더의 차이점, 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
📢 추가 정보
레벨 디자인에 대한 인사이트
레퍼런스 사이트
'Dev. > UE 언리얼 엔진' 카테고리의 다른 글
[TIL] 아이템 랜덤 스폰 및 레벨 데이터 관리(아이템 테이블) (0) | 2025.02.12 |
---|---|
[TIL_250211_2] 충돌 이벤트를 활용한 아이템 획득 시스템 구현하기 (0) | 2025.02.11 |
[TIL250210_2] 인터페이스 기반 아이템 클래스 설계하기 (0) | 2025.02.10 |
[TIL250210_1] State Machine 설계를 통한 캐릭터 동작 애니메이션 적용 (0) | 2025.02.10 |
[TIL_250203] EnhancedInputSystem으로 입력 매핑, 캐릭터 동작 구현하기 (0) | 2025.02.03 |