개요
머티리얼에서 MPC를 3개 이상 사용하면 아래와 같이 오류가 뜬다.
그 이유를 알아본다. (GPT 답변)

내용
왜 Material당 최대 2개의 Material Parameter Collection(MPC) 만 허용하는가?
✔️ 이건 단순한 설정의 문제가 아니라 Shader 시스템과 GPU 구조의 제한 때문입니다.
🎮 왜 3개 이상 못 쓰게 강제로 막아놨는가?
🧠 배경: Material Parameter Collection은 GPU 상에서 Uniform Buffer (UBO) 로 처리됩니다.
- 각 MPC는 Shader 코드에서 Uniform Buffer로 선언됩니다.
- 하지만 GPU Shader Model (특히 SM5, SM6 등)에 따라 Uniform Buffer의 개수에 제한이 있습니다.
🚫 이유 요약:
🛑 Shader Model의 제한 (특히 SM5, SM6)
- DirectX, Vulkan 등의 Shader 시스템은 동시에 참조할 수 있는 Uniform Buffer 수에 엄격한 제한이 있습니다.
- Epic은 이 제한을 피하기 위해, 엔진 레벨에서 머티리얼당 2개로 강제 제한을 걸어 둔 거예요.
💡 이건 단순히 설정을 바꿔서 풀 수 있는 제한이 아니라, 렌더링 파이프라인 전체의 안정성과 성능에 관련된 문제입니다.
🤔 Unreal 내부에서도 왜 2개까지만?
✔️ 에픽 게임즈는 실제 프로젝트에서:
- MPC 사용을 최소화하고
- Material Instance Dynamic (MID) 방식으로 대체하도록 권장합니다.
이 방식이 훨씬 더 유연하고, 퍼포먼스에도 좋습니다.
🎯 팁: MPC 안에 너무 많은 파라미터를 넣어도 안 좋다?
네, 맞습니다.
- 하나의 MPC에 너무 많은 파라미터가 있으면 → Shader Compile 및 Runtime 성능 저하가 발생할 수 있습니다.
- 그래서 보통 자주 바뀌는 값은 MID, 여러 머티리얼에서 공유해야 하는 값은 MPC 로 구분해서 쓰는 것이 좋습니다.
🔧 결론:
항목 설명
| 제한 개수 | 머티리얼당 2개의 MPC |
| 왜 제한? | GPU Shader Model의 UBO 제한 때문 |
| 풀 수 있나? | ❌ 불가능 (엔진과 하드웨어 레벨의 제약) |
| 해결법 | MPC 통합 or MID 활용 or 머티리얼 분리 |
참고
"MaterialParameterCollection 2개 제한은 GPU의 Constant Buffer / Root Signature 제한에서 기인한다"는 설명의 근거
📌 문서 링크
🔗 Direct3D 12 Hardware Support
🎯 관련된 문구와 해석:
🔍 문구 1:
"Maximum number of descriptor tables in a root signature: 2"
📖 해석:
Direct3D 12에서는 하나의 Root Signature (즉, GPU에게 전달되는 리소스의 정의) 안에 최대 2개의 Descriptor Table만 사용할 수 있습니다.
🔗 이 Descriptor Table이 바로 Material Parameter Collection이 사용하는 Constant Buffer의 형식입니다.
🔍 문구 2:
"Maximum size of all root signature parameters: 64 DWORDS (256 bytes)"
📖 해석:
Root Signature 내에 선언되는 모든 파라미터(예: Constant Buffers, Samplers 등)의 총 크기는 256바이트로 제한됩니다.
🔧 Unreal의 Material Parameter Collection은 각각 하나의 Constant Buffer로 컴파일 시 매핑됩니다.
따라서 3개 이상의 MPC를 참조하려고 하면, 이 제한에 걸리게 됩니다.
🔍 문구 3 (다른 문서 참고):
"HLSL supports up to 14 constant buffers for SM5.0 (depending on hardware)."
하지만 Unreal에서는 일관된 동작과 최적화를 위해,
머티리얼당 2개의 MPC 제한을 엔진 레벨에서 강제합니다.
이건 플랫폼 간 차이, 호환성 문제, 그리고 셰이더 컴파일 오류 방지 목적도 있습니다.
💡 왜 Unreal은 "2개"로 제한했나?
에픽 게임즈는 다음과 같은 이유로 2개로 제한했습니다:
🔸 Shader Uniform Layout을 최대한 단순화
🔸 모든 플랫폼에서 예측 가능한 성능과 호환성 확보
🔸 Root Signature, Descriptor Table, Register Binding 등을 관리하기 위한 엔진 내부 최적화 및 안정성 유지
📌 정리
항목 설명
| 관련 문구 | "Maximum number of descriptor tables in a root signature: 2" |
| 의미 | 하나의 셰이더(Material)는 두 개의 MPC(Constant Buffer)만 GPU에 바인딩 가능 |
| Unreal Engine 적용 이유 | 플랫폼 통합성 + 셰이더 안전성 + Root Signature 한계 |
'이펙트 (FX) > 이펙트 팁 : Unreal' 카테고리의 다른 글
| [Unreal/Houdini] VAT 머티리얼 오류시 체크리스트 (Vertex Animation Texture, Material) (0) | 2025.08.10 |
|---|---|
| [Unreal/Houdini] VAT 관련 공식 SideFX Labs 문서 소개 (artstation) (0) | 2025.08.10 |
| [Unreal/Houdini] VAT 스태틱메시 버텍스 찢어짐 현상 해결법 (Vertex Animation Texture) (0) | 2025.08.04 |
| [Unreal/Animation] 애니메이션 자동 리타기팅 방법 (Retargeting) (0) | 2025.08.04 |
| [Unreal/Houdini] VAT 익스포트 오류시 체크리스트 (Vertex Animation Texture) (0) | 2025.08.04 |
댓글