on
Megascan 3D Assets Material(part.1)
Megascan 3D Assets Material(part.1)
*UE5내의 브릿지에서 임포트한 에셋을 기준으로 작성
메가스캔데이터의 머티리얼은 인스턴스로 제작되어있고, 그 모체가 되는 머티리얼(이후 디폴트 머티리얼이라 칭함)의 노드는 아래이미지와 같다.
디폴트 머티리얼의 노드
디폴트 머티리얼의 노드를 보면 흔히 우리가 알고 있는 노드와 다르게생겼다. 보통 언리얼에서 머티리얼을 생성하면 아래의 왼쪽 이미지와 같은 노드가 생긴다. 그러나 메가스캔 디폴트 머티리얼은 아래의 오른쪽 이미지와같은 노드가 존재한다.
머티리얼 노드비교
이와 같은 차이점이 있는 이유는 메가스캔 데이터가 자체적인 머티리얼 레이어 함수를 이용하기 때문이다. 디폴트 머티리얼처럼 만들기 위해서는 기존 머티리얼 노드의 디테일 패널에서 "머티리얼"에 있는 "Use Material Attributes"를 활성화 해주면 된다.
머티리얼노드 디테일패널
디폴트 머티리얼의 경우 "Use Material Attributes"가 활성화된 노드에 "MaterialFunctionCall"이 연결되어있고, "MaterialFunctionCall"에 각각의 텍스쳐들이 연결되어있는 형태이다. "MaterialFunctionCall"은 미리제작된 머티리얼 함수를 불러오는 노드이다. 디폴트 머티리얼적용된 함수 노드는 아래의 이미지처럼 되어있다.
디폴트 머티리얼의 머티리얼 함수 노드 구조
머티리얼 함수의 노드는 일반 머티리얼 노드와 전반적으로 비슷하지만 최종 함수의 출력 연결을 나타내는 출력노드가 나타난다는 점에서 일반적인 머티리얼 노드와 차이점이 있다. 그래서 디폴트 머티리얼의 머티리얼 함수 노드에 "Output Result"가 존재한다.
디폴트 머티리얼의 경우 "Output Result"에 "StaticSwitchParameter"노드가 연결되어 있다. "StaticSwitchParameter"노드는 두개의 입력값을 받아서 파라미터값이 true면 첫째 값을 출력하고, false면 둘째 값을 출력하는 표현식이다.
"StaticSwitchParameter" 노드
*"StatticSwitch"노드도 있다. "StaticSwitchParameter"와 같은 기능을 하지만 스위치만 만들뿐 파라미터를 만들지 않는다.
"StatticSwitch"노드
*파라미터 : 머티리얼 파라미터란 머티리얼 확인을 위해 다시 컴파일하지 않고도 머티리얼의 모양을 바꿀수 있도록 해주는 특수 유형 머티리얼 표현식 노드이다.(머티리얼 인스턴스를 생성해서 각종 값들을 조절시 이용)
디폴트 머티리얼의 "StaticSwitchParameter"노드의 설정은 다음과 같다.
"StaticSwitchParameter"노드 디테일 패널
-Default Value : true면 첫째 입력이 출력되고, false면 둘째 값이 출력된다.
-Group : 이 방법을 통해 파라미터 이름을 MaterialInstanceConstant 내 그룹이나 카테고리 별로 정리할 수 있다. 머티리얼 내 Group 프로퍼티 이름이 같은 모든 파라미터는 인스턴스에서 해당 카테고리 아래에 나열된다.(아래 이미지 참조)
Group 프로퍼티가 같은 파라미터가 나열된 모습
-Sort Priority : 머티리얼 파라미터 리스트에서 이 파라미터를 표시할 곳을 조절한다. 낮은 값을 입력할 수록 리스트의 상단에 나타나게 된다.
"StaticSwitchParameter"노드에는 "MakeMaterialAttributes"노드가 연결되어있다.
*"MakeMaterialAttributes"
머티리얼의 특성을 합치는 역할을 한다. 출력에 대한 표준 특성 전부에 접근 가능하기 때문에 자체적인 머티리얼 함수를 만들때 좋다. 하나의 머티리얼 안에 두 종류 이상의 머티리얼을 섞어 정의하고자 하는 복잡한 머티리얼을 구성할 때도 유용하다.
"MakeMaterialAttributes"노드
이제 부터는 적용된 텍스쳐의 세부 파라미터에 대해 말하고자 한다.
Basecolor 노드(true)
Basecolor(true)
Basecolor 노드(false)
Basecolor(false)
Basecolor의 시작은 "FunctionInput"노드이다.
*"FunctionInput"은 머티리얼 함수 안에만 놓을 수 있는 표현식으로, 함수의 입력 중 하나를 정의한다. 이 노드는 머티리얼 함수와 함께 사용된다.
"FunctionInput"의 Input Type은 "Function Input Vector3"로 설정되어있다.
*Input Type은 이 입력값이 바라는 데이터 형이다. 이 입력에 전해지는 데이터는 이 형으로 변환되며, 데이터가 호환되지 않아 변환에 실패하면 컴파일러 오류를 던진다.
Input Type은 "Function Input Vector 3"와 "Function Input Material Attributes", "Function Input Scalar"를 제외한 나머지 타입으로 설정하면 오류가 난다. 그리고 "Function Input Scalar"는 오류는 나타나지 않지만 텍스쳐가 제대로 표현되지 않는다.
"StaticSwitchParameter"의 false에 연결된 Basecolor는 "FunctionInput"이 전부이지만 true에 연결된 Basecolor는 채도, 밝기, 색조, 대비를 조절할 수 있게 노드가 연결되어있다. 채도, 밝기, 대비는 "Constant4Vector"노드를 파라미터로 변환하여 머티리얼 인스턴스에서 조절할 수 있게 만들었고, 색조의 경우 따로 "Constant4Vector"를 이용해서 만들었다.
*채도, 밝기, 대비를 조절하는 노드를 "Constant4Vector"노드로 이용한 이유는 무엇인가?
아마 노드를 단순하게 만들기 위해서 그런것이 아닐까 추측해본다. 그리고 각각의 요소들이 2개이상의 값을 필요로 하지 않고, 1개의 값만 필요로 하기때문에 하나로 합칠수 있었을 듯 하다. 색조의 경우에는 rgb3개의 값이 필요하기 때문에 따로 만든 것 같다.
"Constant", "Constant2Vector", "Constant3Vector"로 제작해도 무관하다. 하지만 "Constant"나 "Constant2Vector"로 노드를 구성하게 되면 노드수가 많아서 한번에 관리하기 어렵다.
Basecolor의 노드 흐름은 다음과 같다. 채도 >> 밝기 >> 색조 >> 대비 이다.
채도는 밑에 이미지처럼 되어있다.
Basecolor 채도조절
*"Desaturation"은 일정비율에 따라 입력된 색의 채도를 감소(탈색)시킨다. 즉, 회색조로 변환하는 표현식이다.
색조 값과 "Desaturation"노드 사이에 "1-x"노드가 존재한다. 이 노드가 없어도 작동은 한다.
**"1-x"노드를 넣은 이유는?
직관성 때문인것 같다.
아티스트의 입장 : 대부분의 그래픽툴에서 채도를 높일 때는 높은 숫자를 입력하고, 채도를 낮출때 낮은 숫자를 입력한다.
프로그래머의 입장 : 프로그래밍에서 True = 1, False = 0을 나타낸다. 그래서 1은 채도가 있음으로, 0은 채도가 없음으로 예상할 것이다.
만약 "1-x"노드가 없다면 작동은 하겠지만 채도값을 0을 줘야지 채도가 높아지거나 존재하게 될것이다. 즉, 우리가 일반적으로 알고있거나 경험했던것과는 반대되는 상황이 될것이다.
밝기는 "Multiply"노드에 "Desaturation"과 "Constant4Vector"노드의 값이 연결되어서 밝기를 제어하고 있다.
색조도 밝기와 마찬가지로 밝기를 나타내는 "Multipy"노드와 색조용으로 따로 제작한 "Constant4Vector"노드가 "Multiply"노드에 연결되어 있다.
대조의 경우 앞의 채도, 밝기, 색조와 다르게 "Power"노드에 연결되어 있다.
Power 노드
*"Power"는 거듭제곱한 결과를 출력하는 노드다. Base에 입력된 값을 Exp에 입력된 값만큼 스스로 곱한 값이다.(ex. Base: 2, Exp : 4, 출력 : 2*2*2*2 = 16)
관련 언리얼엔진 문서
머티리얼 함수 : https://docs.unrealengine.com/4.26/ko/RenderingAndGraphics/Materials/Functions/Overview/
Material Attributes : https://docs.unrealengine.com/4.26/ko/RenderingAndGraphics/Materials/ExpressionReference/MaterialAttributes/
레이어드 머티리얼 : https://docs.unrealengine.com/4.26/ko/RenderingAndGraphics/Materials/LayeredMaterials/
from http://rladudgus.tistory.com/23 by ccl(A) rewrite - 2021-08-03 19:26:32