본문 바로가기

Unreal engine

언리얼엔진 5 머티리얼 | 인스턴스에서 텍스처 사용유무 스위치 만들어 주기

Unreal Engine에서 하나의 머티리얼(Material)을 생성하고, 이를 인스턴스(Material Instance)로 활용하여 다양한 오브젝트에 재사용하는 워크플로우는 매우 일반적이다. 하지만 이 과정에서 자주 마주치는 문제가 있다. 바로 각 머티리얼마다 사용하는 텍스처 종류가 서로 다르다는 점이다. 예를 들어 어떤 머티리얼은 Metalic 텍스처가 없고, 다른 머티리얼은 Specular 나 Ambient Occlusion 텍스처 파일이 없는 등, 각 머티리얼마다 텍스처 파일 사용 여부가 다르고, 그 자리를 숫자로 대신해야 하는 경우도 있다. 다시 말해, 텍스처 사용 여부를 변경이 불가능하도록 만든 머티리얼 파일의 경우, 인스턴스로 재활용하기 어려워지는 문제가 발생한다.

 

이럴 때에는 'OO 텍스처 사용' 여부를 결정하는 스위치(체크박스) 하나만 넣어줘도 해당 문제가 해결된다.

 

로직을 설명하자면 아래와 같다.

'OO 텍스처 사용' 시 → 텍스처 파일 창 활성화
'OO 텍스처 사용' 해제시 → 숫자값 넣기

 

이렇게 일종의 텍스처 사용여부 스위치를 넣어 로직을 구성해주는 방법을 아래에서 기재하고자 한다.

 


텍스처 사용여부 스위치 만들어 주기

 

 

1️⃣ 기본 머티리얼(M_parent) 생성하기

🔸작업 폴더에서 우클릭, '머티리얼' 생성, 이름은 M_parent 로 설정

🔸만들어진 M_parent 더블클릭하여 '머티리얼 그래프' 창 열기

 

 

🔸MyAsset 디렉토리를 만들어 아무 머티리얼 텍스처 에셋 한 세트를 임포트해준다.

🔸여기서는 잔디 Grass 텍스처 한세트를 임포트했음. 형식만 잡아주는 거라 텍스처 퀄리티는 크게 상관 없다.

📌참고로 외부에셋이 없는 경우 fab.com 에서 무료 에셋 하나를 받아주면 된다.

 

 

🔸그래프 창으로 모두 끌어와 M_parent의 해당 노드들과 각각 연결

📌  특정 텍스처 파일이 없는 경우, 아무 텍스처 파일을 복사해서 일단 연결해둔다

🔸이번 예제에서는 기본적으로 가장 많이 쓰이는 텍스처들인 '베이스 컬러', '메탈릭', '스페큘러', '러프니스', '노멀', '앰비언트 오클루전'만 포함할 것이다.

 

 

2️⃣  텍스처 노드를 파라미터로 변환하기

🔸각 텍스처 노드들 위에서 마우스 우클릭 - '파라미터로 변환' 버튼을 누르고, 이름을 정해준다.

🔸본 예제에서는 'Base 텍스처', 'Metalic 텍스처', 'Specular 텍스처', 'Roughness 텍스처', 'Normal 텍스처', 'AO 텍스처' 로 이름 변경

📌  이미 정한 이름을 재변경하고 싶다면 노드를 누른 후, 좌측 상세패널에서 바꿀 수 있음(일반 - 파라미터 이름)

 

 

3️⃣ StaticSwitchParameter로 텍스처 사용 여부 제어하기

🔸드디어 Ture/False 불린 스위치가 들어올 차례. 핵심은 StaticSwitchParameter 라고 하는 노드이다. 

🔸Base color가 없는 텍스처는 없으니까, 이것은 건너뛰고 Metalic 부터 스위치를 걸어주겠다.

 

🔸스위치 노드 추가

: 그래프 빈공간 우클릭 StaticSwitchParameter 검색하여 클릭 이름은 'Metalic 텍스처 사용' 으로 변경

🔸상수 노드 추가

: 단축키 1 + 마우스 좌클릭 → 상수 노드 한 개 추가   값은 0.0 유지   상수노드를 파라미트로 변환(우클릭 메뉴)하여 'Metalic 값' 로 이름 변경 (이부분은 텍스처가 아닌 숫자값을 주고 싶을 때 사용)

🔸연결하기

: 기존 Metalic 텍스처 노드의 RGB 핀은 True에, 새로 만든 상수노드의 노드핀은 False 에 연결 후, 스위치 노드의 노드핀은 기존에 텍스처 파일이 연결되어 있던 '메탈릭' 노드에 연결해준다.(아래 스크린샷 참고)

 

 

🔸그 다음, 나중에 인스턴스 디테일 창에서 보기 편하도록 Metalic 에 관련된 파라미터들은 그룹명을 모두 Metalic 으로 묶어준다 -  'Metalic 텍스처', 'Metalic 값', 'Metalic 텍스처 사용' 세 노드를 각각 눌러서 좌측 디테일 패널 창에 동일한 그룹명을 써줘야 함

 

 

🔸위와 같은 설정을 나머지 다른 텍스처에도 일일이 다 해준다(Specular, Roughness, Normal, AO)(혹시 더 효율적인 방법 알고 계시면 공유해주세요)

🔸텍스처 종류별로 그룹화해주는 걸 잊지 않는다.

🔸좌측 상단 메뉴에서 적용  저장 두 버튼을 모두 누른 후 빠져나온다.

📌참고로 노드 선택 후 Ctrl + D 누르면 복제됨. 노드 여러개 잡고 단축키 써도 한번에 복제됨

 

 

4️⃣ 머티리얼 인스턴스 생성 및 파라미터 설정

> 머티리얼 그래프 창을 끄고 레벨 화면으로 돌아온다

> 콘텐츠 드로어를 열어서 방금 만든 M_parent 를 찾아 우클릭 → '머티리얼 인스턴스 생성' 클릭, 이름은 MI (Material Instance)로 바꿔줌. 이름은 본인이 알아보기 편한 것으로 설정하면 된다. 

 

 

🔸MI  더블클릭, 우측 디테일 패널 '파라미터 그룹' 하위에 내가 만들어준 텍스처 파라미터들이 그룹명별로 정렬되어 있다. Default 값을 False로 해둬서 스위치가 없는 Base Color 외 다들 텍스처 파일들은 비활성화 되어 있음

 

 

🔸 텍스처 파일 활성화시킬 때 주의점! 체크박스 두 개를 모두 클릭해줘야 함

🔸 메탈릭을 예로 들어보면, 아래 화면에서 'Metalic 텍스처 사용' 체크박스를 일단 클릭 → 변화 없음

🔸 그 옆에 있는 라벨 없는 체크박스도 추가로 클릭 → 텍스처 설정창 나옴

 

 

💡 참고로, 지금 스위치 체크박스가 젤 아랫줄에 있어서 다소 헷갈릴 수 있는데, 파라미터의 우선순위를 조정하고 싶다면 M_parent 에서 스위치 노드(ex. Metalic 텍스처 사용)를 클릭하고 디테일 패널의 그룹명 아랫줄에 나오는 '정렬 우선순위' 숫자를 감소시켜주면 된다.(예제 파일에서는 기존 32였던 숫자를 31로 감소시켜줌)

 

M_parent, 파라미터의 디테일 패널, 정렬 우선순위
MI, 디테일 패널, 정렬 우선순위가 바뀐 파라미터의 위치

 

 


마무리하며

 

StaticSwitchParameter는 머티리얼 컴파일 타임에 영향을 주는 특성이므로, 최소한으로 줄여 사용하는 것이 좋다. 너무 많이 쓰면 인스턴스 최적화 품질을 저해할 수 있다. 한편, Material Layer 시스템이라는 것이 있다고 한다. 복잡한 머티리얼에 대해서는 더 나은 대안이 될 수 있다고 하니, 초급을 벗어난 중고급 작업자들은 그 부분은 확인해보는 것도 좋을듯 하다.