머티리얼 하나에 적용된 변경 사항을 다른 여러 머티리얼에 자동으로 적용하는 기능이 필요하셨나요? 아니면 기본 머티리얼을 재사용하여 로컬에서 미세 조정하는 기능은 어떤가요? Unity 2022.1에서는 에디터에서 머티리얼 배리언트(Material Variants)를 관리할 수 있게 되었습니다. 이는 프리팹과 유사한 개념으로 모든 렌더 파이프라인과 호환됩니다.
여러 머티리얼을 동시에 관리하는 팀이나 개인 크리에이터를 위해 만들어진 머티리얼 배리언트를 활용하면 머티리얼을 재사용할 수 있게 되어 협업 과정을 개선할 수 있습니다. 또한 작업 반복 속도가 증가하며, 원활한 업데이트와 오류 감소로 에셋 라이브러리를 향상할 수 있습니다. 많은 개발자들이 필요로 하는 이 솔루션을 활용하면, 표면 프로퍼티 대부분을 공유하는 머티리얼을 재사용하고 세밀하게 관리할 수 있습니다.
머티리얼 배리언트를 사용하면 일반 머티리얼을 기반으로 하는 템플릿이나 머티리얼 프리팹을 만들 수 있습니다. 이를 통해 템플릿 머티리얼과 같은 프로퍼티는 공유하고 템플릿과 다른 프로퍼티는 오버라이드하는 배리언트가 만들어집니다.
템플릿 머티리얼에서 오버라이드하지 않은 공통 프로퍼티를 변경하면 배리언트 머티리얼에 자동으로 반영됩니다. 머티리얼의 특정 프로퍼티가 배리언트에서 오버라이드되지 않도록 잠그는 것도 가능합니다.
한 예시로 프로젝트에서 목재(Wood) 머티리얼의 배리에이션 계층 구조를 다음과 같이 설정할 수 있습니다.
Wood
Wood머티리얼의 평활도/메탈릭 프로퍼티를 변경하면 계층 구조의 모든 머티리얼에 수정 사항이 자동으로 반영됩니다.
머티리얼 배리언트의 주요 이점 세 가지는 다음과 같습니다.
머티리얼 배리언트는 일반 머티리얼 에셋이며, 오버라이드된 파라미터 목록 외에 부모 머티리얼에 대한 레퍼런스도 보관합니다. 에디터 내에서 강력한 성능을 발휘할 수 있도록, 상속된 값은 캐시되며 계층 구조는 머티리얼이 액세스되고 그 부모 중 하나가 가장 최근의 버전 이후 변경된 경우에만 결정됩니다.
프리팹과 달리 머티리얼 배리언트는 계층 구조를 유지하기 위해 에셋 데이터베이스를 사용하지 않습니다. 계층 구조에서 변경 사항이 발생할 때 자식 머티리얼을 내부적으로 다시 임포트할 필요가 없습니다. 메모리에 로드된 자식만 새로 상속된 값으로 업데이트되므로 빠른 반복 작업이 가능합니다.
단, 머티리얼 배리언트 개념은 에디터에서 머티리얼 저작 워크플로를 개선하는 경우에만 활용 가능하다는 점에 주의하세요. 이 개념은 런타임에 영향을 미치지 않으며 전체 런타임 성능의 최적화에도 도움을 주지 않습니다. 사용하는 셰이더만 동일하다면 서로 다른 플랫폼에서 머티리얼 배리언트를 사용해 다양한 머티리얼을 제작할 수 있습니다. 머티리얼 배리언트 계층 구조별로 오직 하나의 셰이더만 사용할 수 있으므로, 지정된 레벨에 특정 셰이더를 설정하여 특정한 플랫폼을 타겟팅할 수는 없습니다. 하지만, 플랫폼을 타겟팅할 때 머티리얼 배리언트를 사용하여 머티리얼 프로퍼티를 편집하거나 특정 키워드를 활성화할 수 있습니다.
머티리얼 배리언트는 부모로부터 키워드를 상속하지 않습니다. 키워드 상태가 다른 프로퍼티 값에 좌우되는 경우가 흔하기 때문입니다. 예를 들어, 텍스처가 머티리얼에 할당된 경우에만 키워드가 설정될 수도 있습니다. 이러한 워크플로를 지원하기 위해 ShaderGUI 클래스에 ValidateMaterial이라는 새 API가 추가되었습니다. 이 메서드는 ShaderGUI를 사용하는 머티리얼이 수정될 때마다 또는 머티리얼 배리언트와 관련하여 해당 계층 구조가 결정될 때 호출됩니다. 이렇게 하면 키워드가 최신 상태를 유지하도록 할 수 있습니다.
마지막으로, 머티리얼 인스펙터의 필드에 사용할 커스텀 GUI를 만들고 싶은 경우, 이제 프리팹의 함수와 유사한 BeginProperty 및 EndProperty라는 함수를 활용할 수 있습니다. 호출 사이에 프로퍼티의 커스텀 GUI 코드를 래핑하면 Unity에 잠금 아이콘이 표시되고 머티리얼 배리언트에 대한 컨텍스트 메뉴가 나타납니다.
머티리얼 배리언트를 사용하려면 Unity 2022.1 이상의 버전을 사용해야 합니다.
머티리얼 배리언트는 기존 머티리얼과 호환됩니다. 기존 머티리얼의 배리언트를 만들려면 프로젝트(Project) 창으로 이동하여 Material Asset을 마우스 오른쪽 버튼으로 클릭하고 Create > Material Variant를 선택합니다. 기존 머티리얼을 머티리얼 배리언트로 전환할 수도 있습니다. 중복된 머티리얼을 이미 사용 중이고 해당 머티리얼을 공통된 부모 머티리얼에 다시 연결하여 프로젝트에 새 워크플로를 도입하고자 하는 경우에 유용합니다.
또한 부모 머티리얼의 일부 프로퍼티를 잠가 자식 머티리얼이 이를 수정하는 일을 방지하고(예: 표면 옵션), 부모 머티리얼에 영향을 미치지 않는 자식의 프로퍼티를 수정할 수 있으며(예: 기본 맵 색상), 부모를 수정(예: 새 기본 맵 텍스처)하여 모든 자식 머티리얼에 변경 사항을 적용할 수 있습니다.
언제든지 머티리얼 배리언트 계층 구조를 살펴 모든 레벨에서 적용된 변경 사항의 영향을 확인하거나 올바른 레벨에서 변경 사항을 적용하고 있는지 파악할 수 있습니다. 머티리얼 배리언트는 부모 재지정, 되돌리기, 오버라이드 상향 적용 등 다수의 유용한 기능을 제공합니다. 자세히 알아보려면 여기에서 기술 자료를 읽어 보세요.
현 단계에서는 신규 기능보다는 안정성에 집중하고 있습니다. 피드백이나 질문이 있다면 전용 Unity 포럼 스레드를 활용하시기 바랍니다.
머티리얼 배리언트를 직접 사용해 본 다음 시간을 내어 설문조사를 작성해 주세요. 해당 기능의 초기 품질을 검증하는 데 큰 도움이 됩니다. 새로운 기능을 제안하고 출시 예정인 후보 기능에 투표하려면 여기에서 공개 로드맵을 확인하세요.
Is this article helpful for you?
Thank you for your feedback!