언리얼 엔진에서 표준 머티리얼을 생성하고 편집하는 작업에는 긴 시간이 소요될 수 있습니다. 머티리얼 생성 워크플로의 속도를 높이고 과정을 간소화하기 위해 언리얼 엔진은 머티리얼 인스턴스 라는 특별한 머티리얼을 제공합니다. 이 튜토리얼은 프로젝트에서 머티리얼 인스턴스를 구성하고 사용하는 방법을 설명합니다.
머티리얼 인스턴싱
머티리얼 인스턴싱은 부모 머티리얼을 생성하고 이를 바탕으로 다양한 형태의 자손을 만드는 것을 뜻합니다.
이러한 유연성을 위해 머티리얼 인스턴싱은 상속 이라는 개념을 사용합니다. 상속은 부모 머티리얼의 프로퍼티가 자손에게 전달되는 것을 가리킵니다. 부모 머티리얼에서 파라미터 로 지정된 프로퍼티는 머티리얼 인스턴스 에디터 에서 아티스트에게 노출됩니다.

머티리얼 인스턴스를 사용하면 하나의 베이스 머티리얼로 다양한 베리에이션을 만들 수 있습니다.

머티리얼 인스턴스를 생성하고 사용하는 2단계 프로세스
- 먼저 인스턴스의 부모 머티리얼로 사용할 파라미터화된 머티리얼을 생성합니다.
- 콘텐츠 브라우저에서 머티리얼 인스턴스 상수(Material Instance Constant) 를 생성합니다. 이제 머티리얼 인스턴스 에디터에서 머티리얼을 커스터마이징할 수 있습니다.
머티리얼 인스턴싱에 대한 자세한 기본 정보는 개요를 참조하세요.
파라미터화된 머티리얼 생성하기
머티리얼 인스턴스는 모든 어트리뷰트를 부모 머티리얼에게서 상속받지만, 모든 어트리뷰트를 디폴트로 머티리얼 인스턴스 에디터에서 커스터마이징할 수 있는 것은 아닙니다.
머티리얼 어트리뷰트를 머티리얼 인스턴스에서 편집할 수 있게 하려면 일반적인 머티리얼 표현식이 아닌 파라미터 노드를 사용해 특정 어트리뷰트를 파라미터 로 지정해야 합니다.
머티리얼 그래프에 파라미터 노드를 추가하는 방법에는 두 가지가 있습니다.
머티리얼 팔레트에서 파라미터 노드 추가하기
Material Palette 에서 '파라미터(parameter)'를 검색하면, 표시되는 결과나 머티리얼 에디터를 우클릭하면 표시되는 메뉴에서 사용 가능한 모든 파라미터 노드를 볼 수 있습니다.
파라미터 노드를 머티리얼 그래프에 추가하려면 팔레트에서 노드를 드래그 앤 드롭하거나 우클릭 메뉴에서 선택합니다.

우클릭 메뉴(왼쪽)와 머티리얼 팔레트(오른쪽)의 파라미터.
파라미터 단축키
가장 흔히 사용되는 머티리얼 파라미터 두 가지는 머티리얼 에디터에서 키보드 단축키로 이용할 수 있습니다.
- 스칼라 파라미터(Scalar Parameter) - s키 를 누른 상태로 머티리얼 그래프에서 좌클릭 하면 스칼라 파라미터가 그래프에 배치됩니다. 스칼라 파라미터는 상수를 파라미터화한 버전으로, 하나의 숫자 값을 가집니다.
- 벡터 파라미터(Vector Parameter) - v키 를 누른 상태로 머티리얼 그래프에서 좌클릭 하면 벡터 파라미터가 그래프에 배치됩니다. 벡터 파라미터는 상수 4 벡터를 파라미터화한 버전으로, 4개의 부동 소수점 값을 가집니다.
단축키나 팔레트를 사용해 머티리얼 그래프에 스칼라 파라미터를 배치합니다.

파라미터에 러프니스(Roughness) 라는 이름을 붙이고 해당하는 머티리얼 입력에 연결합니다.
디폴트값과 값 범위
디테일 패널에서 파라미터의 디폴트값을 설정하거나 값 범위를 변경할 수 있습니다.

예를 들어, 러프니스 입력이 수락하는 값 범위는 0~1입니다. 러프니스 파라미터가 이 예상 범위를 벗어나지 않게 하려면 Slider Min 및 Slider Max 값을 각각 0과 1로 설정합니다.
러프니스 디폴트값을 0이 아닌 다른 값으로 변경하려면 디폴트값(Default Value) 필드에 원하는 값을 입력합니다.
러프니스 파라미터를 설정하고 Ctrl+D 를 눌러 노드를 복제합니다. 두 번째 스칼라 파라미터 이름을 메탈릭(Metallic) 으로 변경하고 해당하는 입력에 연결합니다. 그러면 아래와 같은 그래프가 만들어집니다.

노드를 파라미터로 변환하기
기존 머티리얼 그래프 내에서 표준 머티리얼 표현식을 파라미터로 변환할 수도 있습니다.
예를 들어, 머티리얼 그래프에 Constant3Vector 노드를 배치합니다. Constant3Vector는 머티리얼의 베이스 컬러를 정의할 때 자주 사용하는 표준(비파라미터화) 머티리얼 표현식입니다.

이 노드를 파라미터로 변환하려면 노드를 우클릭 하고 컨텍스트 메뉴에서 파라미터로 변환(Convert to Parameter) 을 선택합니다.

파라미터에는 ‘BaseColor’처럼 특징을 잘 나타내는 고유의 이름을 지정해야 합니다. 노드를 변환하면 이름 필드가 자동으로 선택됩니다.

위에 나타난 디폴트값(Default Value) 필드나 BaseColor 노드를 더블 클릭하면 나타나는 색 선택 툴을 통해 컬러를 변경할 수 있습니다.

언리얼 엔진의 모든 머티리얼 노드를 파라미터화할 수는 없지만, 파라미터화할 수 있는 모든 머티리얼 표현식에서는 우클릭 메뉴를 통해 파라미터로 변환(Convert To Parameter) 옵션을 사용할 수 있습니다.
파라미터화 머티리얼 예시
이제 아래처럼 머티리얼 그래프에 BaseColor와 연결된 벡터 파라미터 하나와 메탈릭 및 러프니스 입력과 연결된 스칼라 파라미터 두 개가 배치되어 있을 것입니다.

이제 머티리얼 인스턴스를 생성하면 이 파라미터 세 개를 사용해 머티리얼의 컬러, 러프니스, 메탈릭 프로퍼티를 변경할 수 있습니다.
머티리얼 에디터 좌측 상단 모서리에 있는 적용(Apply) 을 클릭해 머티리얼을 컴파일하고 저장(Save) 을 클릭합니다.

머티리얼 인스턴스 생성하기
간단한 파라미터화 머티리얼을 만들었으니 이제 머티리얼 인스턴스를 생성하고 머티리얼 인스턴스 에디터에서 인스턴스를 커스터마이징할 수 있습니다.
머티리얼 인스턴스를 생성하려면 콘텐츠 브라우저에서 머티리얼을 우클릭한 다음, 메뉴에서 머티리얼 인스턴스 생성(Create Material Instance) 을 선택합니다.

머티리얼 인스턴스의 이름은 생성에 사용한 원본 머티리얼의 이름을 가져옵니다. 머티리얼 인스턴스를 클릭하고 F2 키를 누르거나 이름 필드를 한 번 클릭 하면 인스턴스 이름을 변경할 수 있습니다.

머티리얼 인스턴스 편집하기
콘텐츠 브라우저에서 머티리얼 인스턴스를 더블 클릭 해 머티리얼 인스턴스 에디터 를 엽니다.

머티리얼 인스턴스 에디터는 머티리얼 파라미터를 커스터마이징하여 부모 머티리얼로 다양한 모습의 베리에이션을 만들 수 있는 인터페이스입니다.
머티리얼 인스턴스 에디터의 머티리얼 인스턴스.
머티리얼 파라미터 조정하기
머티리얼 파라미터는 머티리얼 인스턴스 에디터 우측의 디테일 패널에 있습니다. 이 파라미터들은 원본 머티리얼 그래프의 파라미터 노드 이름을 사용합니다.
아래의 방법에 따라 파라미터를 편집합니다.

- 파라미터 옆의 박스를 체크해 편집을 활성화합니다.
- 필드에 새로운 값을 입력하거나 클릭하고 드래그해서 값을 위아래로 슬라이드합니다. 벡터 파라미터의 경우, 컬러 스와치를 클릭해 색 선택 툴을 활성화합니다.
- 파라미터를 디폴트값으로 되돌리려면 여기 표시된 화살표 아이콘을 클릭합니다.
파라미터를 조정하는 과정에서 머티리얼 인스턴스 에디터의 머티리얼 프리뷰가 실시간으로 업데이트됩니다. 현재 머티리얼이 액터에 적용되어 있다면 레벨에도 변경 사항이 나타납니다.
파라미터 그룹 사용하기
파라미터를 파라미터 그룹(Parameter Groups) 으로 분류하면 머티리얼 인스턴스를 쉽게 정리하고 가독성을 높일 수 있습니다.
위 예시에서는 파라미터가 세 개뿐이라 쉽게 파악할 수 있지만, 파라미터가 매우 많은 마스터 머티리얼은 파라미터 그룹이 없으면 상호작용이 비효율적일 수 있습니다.
아래 슬라이더는 그룹이 있는 머티리얼 인스턴스와 그룹이 없는 머티리얼 인스턴스를 나타낸 것입니다. 파라미터 그룹이 없는 예시에서는 스칼라 파라미터들이 정리되지 않은 하나의 목록에 표시됩니다. 파라미터 그룹이 있는 인스턴스는 머티리얼 어트리뷰트별로 깔끔하게 정리되어 있습니다.


파라미터 그룹 사용법
파라미터 그룹은 머티리얼 인스턴스가 아닌 부모 머티리얼에서 설정합니다. 머티리얼 에디터의 디테일 패널에서 그룹을 설정할 수 있습니다.
머티리얼 그래프에서 머티리얼 파라미터 노드를 하나 선택합니다.

디테일 패널에서 그룹(Group) 필드에 이름을 입력합니다. 그룹 이름은 원하는 대로 설정할 수 있지만, 파라미터가 제어하는 머티리얼 어트리뷰트에 따라 그룹을 나누는 것도 좋은 방법입니다.

하나의 머티리얼 파라미터 표현식에 파라미터 그룹 이름을 지정하면 그룹 필드 옆의 드롭다운 메뉴에 해당 이름이 표시됩니다.
나머지 파라미터는 새 그룹 이름을 입력할 수도 있고, 드롭다운 메뉴에서 기존 파라미터 그룹을 선택할 수도 있습니다.

그룹 내에서 파라미터 정렬하기
정렬 우선순위(Sort Priority) 필드를 사용하면 그룹 내에서 파라미터가 표시되는 순서를 변경할 수 있습니다. 기본적으로 모든 파라미터는 알파벳 순서에 따라 정렬되지만, 이 경우 머티리얼 인스턴스 에디터에서 파라미터가 지저분하거나 비효율적인 순서로 표시될 수 있습니다. 아래 슬라이더에서는 알파벳 순서대로 파라미터를 정렬하는 경우 UV 타일링과 오프셋 컨트롤이 분리되지만, 각 파라미터에 정렬 우선순위 값을 지정하면 목록이 한층 개선되는 것을 볼 수 있습니다.


파라미터 순서를 변경하려면 노드를 선택하고 디테일 패널의 정렬 우선순위(Sort Priority) 필드에 새로운 값을 입력합니다.

파라미터 그룹 정렬하기
머티리얼 인스턴스 에디터에서 파라미터 그룹은 기본적으로 알파벳 순서에 따라 표시됩니다.
파라미터 그룹의 순서를 바꾸는 방법은 두 가지입니다. 첫 번째는 간단히 그룹 이름에 숫자를 추가하는 것입니다.
이 방식을 사용하는 메가스캔 부모 머티리얼에는 파라미터 그룹에 00~07 의 숫자가 붙어 있습니다.

이렇게 하면 파라미터 그룹이 메인 머티리얼 노드과 동일한 순서로 표시됩니다.
그룹 정렬 우선순위
디테일 패널의 그룹 정렬 우선순위(Group Sort Priority) 프로퍼티로 파라미터 그룹 순서를 변경할 수도 있습니다. 이 프로퍼티는 머티리얼 인스턴스가 아닌 부모 머티리얼에 있습니다.
- 머티리얼 그래프의 모든 노드를 선택 해제하여 머티리얼 프로퍼티에 액세스합니다.
- 디테일 패널에서 그룹 정렬(Group Sorting) 을 펼친 다음, 파라미터 그룹 데이터(Parameter Group Data) 를 선택합니다.
-
이 섹션은 머티리얼의 모든 파라미터 목록을 보여줍니다. 각 인덱스를 펼쳐 그룹 정렬 우선순위(Group Sort Priority) 를 변경하면 그룹의 정렬 순서를 수정할 수 있습니다.
머티리얼 인스턴스의 부모 머티리얼 변경하기
머티리얼 인스턴스가 사용하는 부모 머티리얼은 머티리얼 인스턴스 에디터에서 쉽게 변경할 수 있습니다.
부모 머티리얼을 변경하려면 머티리얼 인스턴스 에디터에서 머티리얼 인스턴스를 엽니다. 디테일 패널의 일반(General) 섹션에서 부모(Parent) 프로퍼티를 찾습니다.

드롭다운 메뉴로 다른 부모 머티리얼을 검색한 뒤 선택합니다. 콘텐츠 브라우저에서 머티리얼을 선택한 뒤 콘텐츠 브라우저에서 선택한 에셋 사용(Use Selected Asset in Content Browser) 버튼(왼쪽 화살표)을 클릭해도 됩니다.
부모 머티리얼을 변경하면 머티리얼 인스턴스의 외형과 프로퍼티가 완전히 바뀌게 되므로 주의해야 합니다. 부모를 바꾸면 이전에 사용하던 파라미터를 사용하지 못하게 될 수도 있습니다.

예를 들어, 드롭다운 목록에서 M_Metal_Gold 머티리얼을 선택하면 M_Parameterized 예시에 존재했던 3개의 파라미터(러프니스, 메탈릭, 베이스 컬러)를 골드 인스턴스에서는 사용할 수 없게 됩니다.

결론
머티리얼 인스턴싱은 프로젝트 전 부분에 걸쳐 사용할 수 있는 강력한 툴입니다. 무기나 소품에 약간의 개성을 추가하는 것부터 아티스트의 머티리얼 활용을 돕기까지, 머티리얼 인스턴스는 프로젝트에서의 머티리얼 생성 및 사용법을 간소화하고 통합하는 데 큰 도움이 될 수 있습니다.