석류 작업노트

언리얼노드_마스터머테리얼 정리 본문

스터디/Unreal Engine

언리얼노드_마스터머테리얼 정리

석류! 2023. 2. 4. 00:11

1.1 마스터 머테리얼


언리얼엔진에서 에셋을 제작해서 씬에 올려보거나
퀵셀 또는 인터넷에서 에셋을 다운받아 사용을 하고
또는 이펙트, 쉐이더, 포스트프르세스 라이트 등등을 사용할 때
특수한 기능을 넣거나 할때 보통
언리얼 내에서 제공해주는 머테리얼을 사용해 기능을 넣어준다.

https://docs.unrealengine.com/4.27/ko/RenderingAndGraphics/Materials/HowTo/Instancing/

 

머티리얼 인스턴스 생성 및 사용법

머티리얼 인스턴스 구성 및 사용법 안내입니다.

docs.unrealengine.com

https://aja0408.tistory.com/52

 

언리얼엔진_인스턴스 머티리얼(Quixel기준 머티리얼 적용)

1. 인스턴스 머티리얼 마스터 머티리얼에 자식을 만들어서 셰이더의 리컴파일 없이 바로 여러 개의 머티리얼을 만들어 적용할 수 있음 부모와 자식관계이기 때문에 마스터 머티리얼을 수정하면

aja0408.tistory.com



머테리얼을 연결하고 같은 노드를 반복적으로 연결하지 않고 수치만 조절하며
자신이 만든 마스터 머테리얼을 반복적으로 사용하게끔 해줄 수 있다.
그러기 위해선 마스터 머테리얼을 직접 이어주어 만들어야 하는데
기본적인 기능들은 웬만하면 대부분 잘 만들고 잘 사용한다.
단지 이게 얼마나 깔끔한가, 기능을 어떻게 사용하게 했는가, 얼마나 최적화를 했는가
이정도의 차이로 인해 사람들이 만든 머테리얼이 다르다고 생각한다.

이번에 글을 쓴 목적은.. 마스터머테리얼은 이렇게 해야 된다 가 아닌
내가 지금까지 쓰고있고 배운걸 토대로 만든 머테리얼을 정리하기 위해 작성한 글이다.
기능에 관한거나 제작하는법 이런건 이미 유투브나 다른 프로젝트 따오면
충분히 자료가 많이 나오니 여기서 찾지 않아도 될것이다.

보통 마스터 머테리얼을 처음 만들게 되면 대부분 이런느낌으로 나올것이다..
정말 기본적인 기능들은 전부다 들어가있다. 조절하는데엔 무리가 없을 것이지만..
내가 프로젝트에서 처음 만들어 넣은 머테리얼이라 많이 초라하고 부끄럽다..
하지만 그랬기에 계속해서 찾아보고 뜯어보면서 나만의 공부를 해왔다

지금 이것이 지금 주로 사용하고있는 기본적인 마스터 머테리얼이다.

https://docs.unrealengine.com/4.27/ko/RenderingAndGraphics/Materials/Functions/

 

머티리얼 함수

패키지에 저장한 다음 여러 머티리얼에 재사용할 수 있는 머티리얼 그래프 조각입니다.

docs.unrealengine.com

https://youtu.be/PRJnfMH7hxc

이렇게 심플하게 만들기 위해서 머테리얼 펑션 기능을 사용해 주었다.
우리가 특정 기능들을 제작 해 두고 이 기능을 여기저기서 몇번이고 사용할 노드라면
이것들을 복사해서 넣어주는 것이 아니라 이것을 하나의 함수로 제작해서
인풋과 아웃풋 만 관리하여 편하게 사용하게 만들 수 있다.

2.1 머테리얼 엘리먼트 노드

이것이 현재 내가 사용하고 있는 마스터 머테리얼의 기본 기능 정리본이다.
왠만하면 모든 기능을 넣어두기 보단 실제로 사용하는 기능들 위주로 넣어 그때그때 추가해 사용중이다.

각 파트마다 설명을 해보자면

 

 

2.1.1 머테리얼_BaseColor

베이스 머테리얼은 다음과 같이 노드를 이어 사용중이다.
펑션으로 사용중이기에 텍스쳐 뒤에 Function Input 노드를 넣어 Vextor3 로 사용중이다.

알베도 머테리얼엔
채도 조절노드 Desaturation
밝기(인텐시티) 조절로 Multiply
색 오버레이로 4백터 x Multiply
대비 조절로 Power 노드
색조 조절로 Hue 기본펑션

이렇게 사용중이다.

 

이전까진 위에 사용한 것 처럼 벡터 하나하나 추가해서 사용을 했지만
요즘엔 4벡터를 변환하여 한번에 4개씩 묶어 사용중이다.

이를 인스턴스 머테리얼에서 보면 다음과 같이 나온다.
한번에 묶어 정리를 할수있다는 것이 장점.
다만 1개 2개 이렇게 사용되는데 4벡터로 넣어주면 괜히 남는자리가 생겨버리니
그럴땐 이전처럼 1벡터로 사용해도 무관.

남는다고 해서 큰 문제가 생기진 않지만 이왕이면 신경써주는것도 좋다 생각한다.

 

2.1.2 머테리얼_AO/Rou/Met

AO/Rou/Met 맵은 다음과 같이 사용중이다.

펑션을 사용하지 않았다면 바로 R / G / B 를 이어주어도 괜찮지만
지금은 Function Input을 사용중이기에 Generate Mask 를 이용해 채널을 분리해 주었다.

2.1.2.1 머테리얼_Rou

 

 

 

러프니스 노드로는 2가지 방식이 있다.
아래처럼 지금까지 사용하던 방식으로 사용할 수도 있고
위의 방식처럼 최소치와 최대치를 조절해서 Lerp로 섬세하게 조절해 줄 수 있다.

당연히 위의 방식으로 사용하는 것이 좋다.

다만 지금까지는 아래의 방식으로 사용하기도 했는데
아래의 방식으로 사용하게 된다면 Intensity로 한번에 모든 값을 곱해버리는데
이렇게 된다면 조절을 하는 도중에 1 또는 0이 넘어가게 되는 부분이 생겨버리게 된다.

그나마 쓰는 이유라고 한다면.. 컨트롤이 간편하다 였다고 생각한다.
지금까진 실무자가 아닌 학생끼리의 프로젝트였으니까.. 아래의 방식을 써도 무난하게 넘어갔지만
다른 프로젝트나 언리얼머테리얼에서도 대부분 위의 방식을 사용중이다.
이젠 넘어가서 위 방식에 적응하려 하고있다.

 

 

2.1.2.2 머테리얼_Met

메탈릭같은경우도 비슷하게 사용된다.
단지 러스니스는 모든 재질에 사용되지만 메탈릭은 금속/비금속으로 갈리기에 노드가 조금 추가된다.

Met_Base로 모든 맵에 사용될 메탈릭값을 정해준다.
굳이 파라미터로 해도되나 싶긴 하지만 보통 0으로 고정하여 사용한다.

다음으로 Lerp를 이용하여 0값과 메탈릭맵을 골라 사용할 수 있도록 해준다.
Met_Intensity와 맵을 곱해주어 사용할 메탈릭값을 조절할 수 있게끔 해주었다.
지금까지 사용한걸 보았을때 보통 메탈릭값을 조정하는 일은 많이 없었다.
금속이냐 비금속이냐를 주로 다루었고 메탈릭값이 아닌 러프니스를 주로 조절했기에
다른사람들이 제작한 머테리얼에서도 단순히 Multiply로 끝내는 경우가 대부분이였다.

다음으로 Power값으로 대비를 조절할 수 있게 해주었고

Metalic? 과 Round ( 반올림 ) 을 Lerp에 연결해
0.5아래면 비금속 / 0.5 위면 금속 으로 작동되게끔 해준다.

단순히 스위치로 작동되게 해주어도 충분히 잘 쓸수있다. 취향것 사용하자

노말맵의 RGB채널은 전부 의미를 지니고 있다.
R값은 양옆 / G값은 위아래 / B값은 깊이값을 나타냅니다.
그렇기에 노말의 세기를 조절하기 위해 채널을 분리해주어 조절해줍니다.

Generate Mask로 R/G값만 추출해 내어 Multiply로 값을 조절하고
나누어준 RG / B 값을 Append Vector 로 다시 합쳐주어 노말에 연결해준다.

2.2 머테리얼 어트리뷰트

 

 

https://docs.unrealengine.com/4.27/ko/RenderingAndGraphics/Materials/ExpressionReference/MaterialAttributes/#makematerialattributes

 

Material Attributes 표현식

여러가지 머티리얼 특성, 특히 레이어드 머티리얼 제작시 유용한 특성을 나누고 합치는 수단이 되는 표현식 노드입니다.

docs.unrealengine.com


Albedo 따로 / ARM 따로 / Normal 따로 펑션을 나누어 사용한다면
머테리얼에 바로 연결을 하게끔 해서 사용할 수도 있다.
하지만 이번엔 좀더 깔끔하게 보기 위해 어떤 에셋머테리얼에서도 사용되는 이 조합을
한 펑션에 넣어버려 묶어줄 생각이다.

그렇기 위해선 여러 벡터가 엮여 있기에 이를 머테리얼값으로 저장해 아웃풋으로 보내주어야 하는데
이를 위해 MakeMatterialAttributes 노드로 합쳐 내보내준다.

이 노드를 사용하기 위해선 마스터머테리얼 내에서도 설정에서
Use Material Attribute 를 체크해준다. 그럼 다음과 같이 바뀌어 사용할 수 있다.


그렇게 해서 만들어진 머테리얼은 이렇게 만들어진다.
하지만 지금의 머테리얼은 아주 기본적인 머테리얼로 여기서 기능을 추가하여 사용할 경우가 생길 것이다.
이미시브맵, 알파맵, 타일맵 등등.. 여러 노드를 연결해야 할 때가 있을텐데
그럴 때에 다음의 노드를 사용해 준다.

2.3 셋 머테리얼 어트리뷰트

이전에 만든 AttributeMaterial 노드를 SetMaterialAttributes 노드를 추가해 연결해준다.
이 노드의 기능은 추가로 사용하고 싶은 부분을 Attribute에 추가해 줄 수 있다.
예시를 들어 이미시브노드를 연결한다 치면
노드에서 + 를 눌러 창을 만들고 원하는 앨리먼트를 선택해준다.
그런다면 Input 칸이 생길것이고 그곳에 연결해 사용하면된다.

언리얼 퀵셀머테리얼을 뜯어보면 다음과 같이 사용이 된다.
이처럼 지금까지의 기능들은 실제로도 사용되고 상당히 깔끔하게 정리를 할 수 있다.

머테리얼 펑션으로 사용할만한 기능들을 여럿 만들어두고
용도가 다른 머테리얼을 만들어 그때그때 사용해주면 각 머테리얼들을 만들면서
복잡해지는 현상을 막을 수 있고 용이하게 수정해 줄 수 있다.

3.1 마무리

머테리얼을 공부하면서 지금까지 정말 많은 시행착오를 겪어왔다... ㅋㅋㅋ..
팀프로젝트를 겪으며 단순히 머테리얼만으로 끝나는 것이 아니고
특수한 기능을 추가하고 전체머테리얼컨트롤 ( 머테리얼컬렉션 ) 등등이 추가되며
노드는 늘어나고 복잡해지는 경우를 직접 겪고 나면서 굉장한 충격을 먹어왔다.

그렇기에 지금까지 계속해서 더 깔끔하게 사용하고 정확하게 알고 사용하려고 노력해왔다.
지금도 한참멀었지만.. 지금까지 공부한것을 정리해보며 다시 확인하려한다.

마스터머테리얼을 공부하려면 퀵셀에서 받아 머테리얼을 뜯어보는것이 가장 좋다.
에픽에서 공식으로 내온 머테리얼이기도 하고 왠만한 필수기능들은 다 들어있기에
그것부터 공부해보는것이 가장 좋다고 생각한다.
열심히하자!