진행 방식: 실시간 (디스코드)
메인 멘토: 문준형
분야: 아트
차시: 2주차
➡️ Material에 대한 기본적인 내용들을 배우고, 직접 Material Editor에서 노드를 사용해봅니다.
Instance에 대한 내용과 Material Function과 같은 다양한 Material 관련 기능을 배워봅니다.
https://www.youtube.com/watch?v=X4p22xNSlPM
💡 본 내용은 언리얼엔진 공식 문서에 작성된 내용을 바탕으로 진행합니다.
자세한 내용은 언리얼엔진 공식 문서를 통해 확인하실 수 있습니다.Unreal Engine Materials | Unreal Engine 5.4 Documentation | Epic Developer Community
언리얼 엔진의 **머티리얼(Materials)**은 씬에서 오브젝트의 표면 프로퍼티를 정의합니다.
넓게 보면, 머티리얼이란 메시에 적용되어 시각적인 형태를 제어하는 **'페인트'**라고 할 수 있습니다.
3D에서의 머티리얼(Material)은 물체의 표면이 어떻게 보일지 결정해주는 ‘재질’ 입니다.
물체의 색, 울퉁불퉁함, 반사값, 투명도 등 다양한 값을 조절할 수 있습니다.
언리얼엔진에서는 **물리 기반 렌더링(PBR)**이 기본 쉐이딩 모델입니다.
물리 기반 렌더링은 빛이 실제로 무엇을 하는지, 표면이 현실의 라이트 작용 방식을 모방한다는 뜻입니다.
에너지 보존 법칙을 지키면서 현실에서 빛이 어떻게 작용하는지 모방하는 만큼, 더 정확하고 더 자연스러워 보입니다.
이러한 장점은 픽사(Pixar)와 디즈니(Disney)의 영화처럼 포토리얼하지 않은 렌더링에도 적용됩니다.
콘텐츠 드로워(Content Drawer) 를 열어 새로운 폴더를 생성합니다. 폴더의 이름은 Materials 입니다.
그 후 새로운 머티리얼을 만듭니다. 머티리얼의 이름은 M_이름 의 형태로 제작합니다.
💡 머티리얼(Materials) 네이밍 형식 : M_MaterialName
****머티리얼(Materials) 의 첫 알파벳을 이용해 M으로 구분합니다.



💡 언리얼엔진의 머티리얼 노드 그래프는 보이지 않는 곳에서 **HLSL(High Level Shading Language)**로 변환됩니다.
사용자는 HLSL 코드를 볼 수 있지만, 직접 편집할 수 없습니다.

| 이름 | 기능 |
|---|---|
| Viewport (뷰포트) | 현재 편집 중인 머티리얼이 표시됩니다. |
| Details (디테일) | 현재 선택된 모든 메리얼 표현식과 함수 노드에 대한 프로퍼티가 표시됩니다. |
| Material Graph (머티리얼 그래프) | 이 머티리얼에 속한 모든 표현식 그래프가 표시됩니다. |
| 기본적으로 각 머티리얼에는 하나의 베이스 머티리얼 노드가 있습니다. |
| 조작 | 동작 |
|---|---|
| 우클릭 + 드래그 | 그래프를 움직입니다. |
| 빈 공간 좌클릭 + 드래그 | 범위를 선택합니다. |
| 노드 좌클릭 + 드래그 | 선택한 노드를 움직입니다. |
| 마우스 휠 | 줌 인 / 아웃 |
| 빈 공간 우클릭 / TAB | 새로운 표현식 메뉴를 띄웁니다. |
💡 PBR 기반의 머티리얼 입력값입니다.
양이 많으므로, 원하는 내용을 찾으시려면 오른쪽 목차를 이용해주세요.
















투명도의 경우 반투명 블랜드 모드에서 활성화됩니다.








수학 계산과 관련된 이야기가 나올 수 있습니다.
모르는 부분은 언제든 물어봐주세요.

실수 값 하나부터 4차원 백터 값까지 존재합니다.
4차원 백터 값 기준으로 채널들을 표기하는 방법은 순서대로 다음과 같습니다.
R G B A
외부에서 변경할 수 없는, 머티리얼 노드에서 수정할 수 있는 값입니다.
float ~ float4 (vector4) 값까지 총 4가지 타입이 존재합니다.
프로그래밍에서 사용하는 변수와 비슷하다고 생각하시면 됩니다.
파라미터로 생성된 값들은 머티리얼 인스턴스에서 값을 변경할 수 있습니다.
스칼라 값(float)과 백터 값(float4 / vector4) 두 타입으로 존재합니다.
A + B


A / B


A * B


A - B


머티리얼 인스턴스 / 머티리얼 인스턴싱이란,
머티리얼의 리컴파일 없이 값을 변경할 수 있도록 해주는 기능입니다.

머티리얼 인스턴스로 사용할 머티리얼을 제작해봅시다.
색을 바꿀 수 있는 머티리얼을 제작해보겠습니다.
Metallic / Roughness 를 생성하여 원하는 재질을 제작합니다.
BaseColor는 인스턴스를 통해 조절할 것이기에, 기본 색만 지정해줍시다.

BaseColor에 연결한 백터 상수 노드를 우클릭하고,
Convert to Parameter 를 클릭합니다. 이름은 BaseColor로 설정해줍니다.



그 후, 콘텐츠 드로워에서 생성한 머티리얼을 우클릭하고
Create Material Instance를 클릭해줍니다. 이름은 MI_이름형태로 제작합니다.
💡 머티리얼 인스턴스(Material Instance) 네이밍 형식 : MI_Name
****머티리얼 인스턴스(Material Instance) 단어들의 첫 알파벳을 이용해 MI로 구분합니다.


생성된 머티리얼 인스턴스를 클릭하시면 다음과 같은 창을 확인하실 수 있습니다.
우측에는 부모 머티리얼에 생성된 Parameter들이 보입니다.
BaseColor 파라미터를 만들었기에 BaseColor 옵션이 보입니다.

체크 해제된 BaseColor 옵션을 활성화하고 색을 변경해봅니다.
실시간으로 좌측 머티리얼의 값이 변화합니다.



먼저 적용할 메쉬를 준비해줍니다. (Place Actors 에서 Sphere를 가져와봤습니다.)






지금까지 배운 머티리얼 인스턴스 기능을 이용해 다음과 같은 장면을 만들어주세요.
설정 값은 다음과 같습니다.


머티리얼 함수는 그래프의 일부를 재사용 가능한 에셋 패키지로 만들어 라이브러리에 공유하고
다른 머티리얼에 쉽게 삽입할 수 있습니다.
즉, 복잡한 그래프를 하나의 함수로 묶어 깔끔하고 사용이 편리하게 만들어주는 기능입니다.
콘텐츠 드로워(Content Drawer) 를 열어 새로운 폴더를 생성합니다. 폴더의 이름은 MaterialFunction 입니다.
그 후 새로운 머티리얼 함수를 만듭니다. 이름은 MF_이름 의 형태로 제작합니다.
💡 머티리얼 함수(Material Function) 네이밍 형식 : MF_Name
****머티리얼 함수(Material Function) 단어들의 첫 알파벳을 이용해 MF으로 구분합니다.

들어가면 아래와 같은 화면을 보실 수 있습니다.

간단하게 두 가지 색을 입력받아 더해주는 머티리얼 함수로 만들어보겠습니다.
우클릭 / 탭 을 눌러 Function Input 노드를 생성하고, 속성에서 Vector3 (3채널 값)을 받게 설정해줍니다.


인풋을 복사해 두 개를 만들고 Add 계산식을 연결해 아래처럼 완성시킵니다.

💡 Input / Output 노드의 디테일 패널에서 이름을 변경할 수 있습니다.
해당 함수를 사용할 머티리얼 에디터를 열어, 콘텐츠 드로워에서 드래그 & 드롭하여 머티리얼 함수를 추가합니다.


💡 Input / Output 핀의 순서를 바꿔줄 수 있습니다.
해당 이미지와 같이 B와 A의 순서가 달라 바꾸고 싶은 경우, 순서를 바꾸고 싶은 머티리얼 함수 노드의 Sort Priority 값을 변경합니다.
(숫자가 작을수록 위로 올라오며, 클수록 아랫 순위로 내려갑니다.)
노드를 연결하여, Add 계산 함수 기능이 잘 동작 하는지 확인해봅니다.


💡 예시로 진행한 머티리얼 함수 기능의 경우, 단순히 add 기능을 함수로써 만들어보는데에 그쳤습니다.
(즉, 굳이 머티리얼 함수가 아닌 add 계산식을 사용하면 되는 작업이었습니다.)머티리얼 함수는 다음과 같이 필요한 곳에서 유용하게 사용할 수 있습니다.
- 그래프 길이가 길어지는 기능 (계산이 복잡한 함수)
- 다양한 곳에서 반복적으로 사용하는 기능 (UV 셋업)
▼ UV 셋업 머티리얼 함수 예시
머티리얼 파라미터 컬렉션은 어떠한 머티리얼에서도 참조할 수 있는 파라미터 세트를 저장하는 에셋입니다.
실시간으로 변경하기 편리하며, 하나의 파라미터 컬렉션으로 여러 머티리얼을 컨트롤할 수도 있습니다.
콘텐츠 드로워(Content Drawer) 를 열어 새로운 폴더를 생성합니다.
폴더의 이름은 MaterialParameterCollection 입니다.
그 후 새로운 머티리얼 함수를 만듭니다. 이름은 MPC_이름 의 형태로 제작합니다.
💡 머티리얼 파라미터 컬렉션(Material Parameter Collection) 네이밍 형식 : MPC_Name
****머티리얼 파라미터 컬렉션(Material Parameter Collection) 단어들의 첫 알파벳을 이용해 MPC로 구분합니다.

열면 이런 창을 확인하실 수 있습니다.

아이콘 (Add Element)을 클릭하여 새로운 값을 만들 수 있습니다.
그리고 파라미터의 이름을 변경해주세요.


사용할 머티리얼 에디터를 오픈합니다.
그리고 CollectionParameter 노드를 생성합니다.


디테일 패널에서 사용할 파라미터 컬렉션을 선택한 후 사용할 파라미터를 선택합니다.


노드를 연결해주세요.

이제 머티리얼 파라미터 컬렉션에서 값을 조절하며,
원하는 대로 값이 변경되는 것을 확인합니다.

💡 이렇게 생성한 머티리얼 파라미터 컬렉션은 여러 개의 머티리얼에 사용할 수 있습니다.
여러 개의 머티리얼이 공유하는 값을 컬렉션 하나만 조절하여 한 번에 컨트롤 할 수 있습니다.
※ 본 강의자료의 외부 유출을 금합니다.
※ 작성자 | @문준형