해당 글을 읽고 공부했습니다
머테리얼 A와 머테리얼 B의 동작은 똑같지만 텍스쳐가 다르거나 러프니스 값이 달라서 반짝임 정도만 다르다고 할 때, 완전히 다른 새 머테리얼을 만드는 것은 시간적으로 손해다.
이러한 시간 소모를 줄이기 위해서 언리얼 엔진에서는 표준 머테리얼에 값이나 텍스쳐 등을 바꿀 수 있는 Material Parameter와 표준 머테리얼을 상속받아 머테리얼 파라미터를 수정해서 다른 머테리얼처럼 사용할 수 있는 특수한 유형의 머테리얼인 Material Instance를 제공한다.
이렇게 표준 머테리얼에서 바리에이션이라고 할 수 있는 머테리얼 인스턴스를 만드는 작업을 Material Instancing이라고 한다.
머테리얼 파라미터란, 표준 머테리얼을 다시 컴파일하지 않고도 머테리얼 인스턴스에서 머테리얼을 수정할 수 있도록 해주는 특수한 머테리얼 표현식이다. 머테리얼 파라미터의 값을 실시간으로 수정하거나, 머테리얼을 새로 컴파일하지 않고도 머테리얼의 모양과 느낌을 다르게 바꿀 수 있다.
다음과 같은 파라미터 노드들을 이용해 생성할 수 있다.
머테리얼 인스턴스는 하나의 머테리얼을 부모로 상속받아서 그 부모 머테리얼의 구조대로 동작하되, 부모 머테리얼이 파라미터로 내어주는 부분을 수정해서 부모 머테리얼의 다양한 바리에이션을 만들어낼 수 있도록 하는 기능이다.
부모로 심고자 하는 머테리얼에 우클릭한 뒤, 머테리얼 인스턴스 생성을 선택하면 생성된다.
머테리얼 인스턴스 유형에는 Constant, Dynamic 두 가지가 있다. Constant는 실행시간 전에 한 번만 계산되는 머테리얼 인스턴스이다. 따라서 게임플레이 도중에 변경이 불가능하지만, 그 이상의 컴파일이 필요하지 않기 때문에 퍼포먼스 상에서 이점이 있다. Dynamic은 게임플레이 도중에 머테리얼 파라미터의 값을 계산하고 변경할 수 있는 머테리얼 인스턴스이다. 캐릭터가 피격당했을 때 색깔이 바뀐다던지, 연속으로 발사해서 과열된 총열이 빨갛게 달아오르는 등의 연출을 사용한다든지 하는 다양한 연출을 할 수 있게 된다.
머테리얼 인스턴스 다이나믹(MID)의 생성은 에디터가 아닌, C++ 코드나 블루프린트 그래프내에서 이루어진다. Create Dynamic Material Instance
노드를 통해 MID를 생성하고, Set Parameter Value 노드를 통해 파라미터들의 값을 변경할 수 있다.