이 튜토리얼에서는 크롬과 눈 두 개의 레이어로 이루어진 간단한 레이어드 머티리얼(Layered Material) 을 만드는 과정을 보여드립니다. 최종 레이어드 머티리얼에서는 월드 기준 정렬된 블렌드를 사용해, 두 머티리얼을 실제로 전환하며 자동으로 메시 표면 위에 눈이 쌓이도록 합니다. 블렌드 함수는 항상 가장 위 표면을 확인하므로, 오브젝트를 회전해도 눈 머티리얼은 아래 이미지처럼 항상 윗면에 남아있습니다.
레이어드 머티리얼을 제작할 때는 일반적으로 각 레이어를 머티리얼로 생성한 뒤, 노드 네트워크를 새 머티리얼 함수에 복사 및 붙여넣기 합니다. 이번 튜토리얼에서는 시간을 절약하기 위해 처음부터 각 레이어를 함수에 배치하겠습니다.
단순한 크롬
크롬 텍스처 | |
---|---|
![]() |
![]() |
T_ExampleLayers_Metal_1_BC.png | T_ExampleLayers_Metal01_N.png |
(우클릭 후 다른 이름으로 저장) | (우클릭 후 다른 이름으로 저장) |
베이스 레이어는 표면에 비주얼 요소를 추가할 수 있는 약간의 흠이 존재하는 단순한 크롬 머티리얼입니다. 편집 여부를 보여주기 위해 머티리얼에 전반적인 외형을 미세 조정할 수 있는 몇 가지 입력도 포함합니다.
-
콘텐츠 브라우저(Content Browser) 에서 우클릭한 뒤 머티리얼(Materials) 을 클릭하고 컨텍스트 메뉴에서 머티리얼 함수(Material Function) 를 선택합니다.
-
머티리얼 함수의 이름을 Layer_Chrome 으로 지정합니다.
-
머티리얼 함수를 더블 클릭 하여 머티리얼 에디터에서 엽니다.
-
머티리얼 그래프에서 우클릭 한 뒤, 컨텍스트 메뉴에서 머티리얼 어트리뷰트 생성(Make Material Attributes) 을 검색하여 선택합니다.
-
Make Material Attributes 노드를 Output Result 노드에 연결합니다.
크롬 머티리얼 네트워크
다음 이미지는 크롬 레이어에 사용할 머티리얼 그래프입니다. 이미지 밑에 분석을 따라하면 쉽게 재현할 수 있습니다. 사용할 두 텍스처는 베이스 컬러(Base Color)와 러프니스(Roughness)에 사용할 T_ExampleLayers_Metal_1_BC.png , 노멀 맵에 사용할 T_ExampleLayers_Metal01_N.png 입니다. 둘 다 이 페이지 상단에서 다운로드하실 수 있습니다.
클릭하면 이미지를 확대합니다.
다음 내용은 머티리얼 그래프의 4가지 코멘트 블록에 대한 설명입니다.
-
베이스 컬러(Base Color) - 베이스 컬러에서는 선형 보간(Linear Interpolate, LERP)을 사용해 크롬의 베이스 컬러와 아주 짙은 회색 값(0.3)을 블렌드합니다. 베이스 컬러에서 함수 입력(Function Input) 노드를 생성하고 이름을 Tint 로 지정합니다. 디테일 패널(Details Panel)에서는 입력 타입을 Vector3 로 설정해야 함수에 색을 입력해 크롬의 색조를 변경할 수 있습니다. 한편 T_ExampleLayers_Metal_1_BC 텍스처의 빨간색 채널은 두 값 사이의 선형 보간에 사용합니다.
- 메탈릭(Metallic) - 금속 머티리얼이므로 메탈릭 입력을 1로 설정합니다.
- 러프니스(Roughness) - 러프니스는 크롬 머티리얼의 경우 아주 낮게 설정해야 하지만, 약간 수정해 주면 머티리얼의 전반적인 외형에 깊이감을 추가할 수 있습니다. 이때 크롬 텍스처의 빨간색 채널은 0.2, 0.4 값의 LERP에 사용합니다. 다시 말해 텍스처 맵의 어두운 영역에 대한 러프니스는 밝은 영역의 러프니스보다 높습니다.
- 커스터마이징 가능 노멀(Customizable Normal) - 이 네트워크는 탄젠트 스페이스 노멀 맵을 받아서 초록색과 빨간색 채널로 분리하여 맵의 디테일을 대규모로 제어합니다. 그리고 다른 함수 입력(Function Input)에서 가져온 값을 각 채널의 값에 곱합니다. 해당 입력의 타입은 스칼라로, 이름은 Normal Multiplier 로 지정되며 디폴트값은 1.0입니다. AppendVector 노드 를 사용하면 결괏값을 덧붙인 다음, 노멀 맵의 파란색 채널에 덧붙입니다. 그 결과 사용자는 노멀 배수(Normal Multiplier) 값을 변경하여 노멀의 높이를 조정할 수 있습니다.
전부 완료한 뒤 머티리얼 함수(Material Function)를 컴파일 및 저장하세요.
단순한 눈
눈 텍스처 | |
---|---|
![]() |
![]() |
T_Cave_Ice_Tiling_D.png | T_Cave_Ice_Noise_N.png |
(우클릭 후 다른 이름으로 저장) | (우클릭 후 다른 이름으로 저장) |
위의 두 텍스처를 다운로드한 뒤 언리얼 엔진에 임포트 합니다. 이제 다음 단계를 거치며 눈 레이어에 사용할 두 번째 머티리얼 함수를 만들어 보겠습니다.
-
콘텐츠 브라우저(Content Browser) 에서 우클릭한 뒤 머티리얼(Materials) 을 클릭하고 컨텍스트 메뉴에서 머티리얼 함수(Material Function) 를 선택합니다.
-
머티리얼 함수의 이름을 Layer_Snow 로 지정합니다.
-
머티리얼 함수를 더블 클릭 하여 머티리얼 에디터에서 엽니다.
-
머티리얼 그래프에서 우클릭 한 뒤, 컨텍스트 메뉴에서 Make Material Attributes 로 검색하여 선택합니다.
-
Make Material Attributes 노드를 Output Result 노드에 연결합니다.
눈 레이어 네트워크
다음은 눈 머티리얼 그래프를 간단히 나눈 것입니다. 이 레이어는 T_Cave_Ice_Tiling_D.png , T_Cave_Ice_Noise_N.png 텍스처를 사용하며, 둘 다 해당 페이지 상단에서 다운로드하실 수 있습니다.
-
베이스 컬러 - FuzzyShading 머티리얼 함수를 사용하기 때문에 네트워크에서 유일하게 비교적 복잡한 부분입니다. 이 함수는 머티리얼이 빛을 받을 때 텍스처가 너무 어두워지는 것을 방지합니다. 빛이 섬유질 표면을 통과할 때와 유사한 방식입니다. 그래서 벨벳, 이끼 또는 위의 예시처럼 눈을 구현하는 데 사용하기 적합합니다. 베이스 컬러 텍스처(T_Cave_Ice_Tiling_D.png)를 0.3의 제곱으로 높이면 텍스처의 대비가 약간 감소합니다.
다음으로 결과를 FuzzyShading 머티리얼 함수에 연결합니다. 머티리얼 에디터(Material Editor)의 함수(Functions) 탭에서 연결할 수 있습니다. Core Darkness 는 0, Power 는 1, EdgeBrightness 는 0.5로 설정합니다. 마지막으로 전체를 아주 연한 파란색(R=0.8, G=0.9, B=0.95)으로 곱해 차갑게 얼어붙은 분위기를 냅니다.
-
메탈릭(Metallic) - 비금속 표면이므로 메탈릭을 0으로 설정합니다.
-
러프니스(Roughness) - 라이트가 눈에 닿는 순간 눈이 약간 빛나도록 만들기 위해, T_Cave_Ice_Tiling_D.png의 빨간색 채널을 이용해 Lerp를 0.6~0.3으로 진행합니다.
-
노멀(Normal) - 노멀 맵 자체의 세팅도 약간 강하게 변경하겠습니다. 탄젠트 스페이스 노멀 맵의 효과를 낮추는 방법 중 하나로 파란색 채널의 세기를 두 배로 늘리는 방법이 있습니다. 노멀 맵에 (1,1,2)의 값을 갖는 Constant3 Vector 값을 곱하면 됩니다.
끝났으면 결과를 저장하세요!
레이어드 머티리얼
이제 머티리얼을 만들고 두 레이어 함수를 블렌딩할 수 있습니다. 해당 예제에서는 눈이 항상 표면의 위에 쌓이도록 설정합니다. 머티리얼에는 머티리얼 인스턴스에서 커스터마이징 가능한 파라미터도 있습니다.
-
콘텐츠 브라우저(Content Browser) 에서 신규 추가(Add New) 를 클릭하고 컨텍스트 메뉴에서 머티리얼을 선택합니다.
-
새 머티리얼의 이름을 Mat_SnowyChrome 으로 지정합니다.
-
머티리얼을 더블 클릭 하여 머티리얼 에디터에서 엽니다.
-
콘텐츠 브라우저 의 Layer_Chrome , Layer_Snow 머티리얼 함수를 머티리얼 그래프로 드래그합니다.
-
디테일 패널(Details Panel)에서 머티리얼 그래프의 배경을 클릭해 기본 머티리얼 프로퍼티를 표시하고 머티리얼 어트리뷰트 사용(Use Material Attributes) 옵션을 활성화합니다.
-
팔레트에서 MatLayerBlend_Simple 머티리얼 함수와 WorldAlignedBlend 함수를 추가합니다. MatLayerBlend_Simple에서는 크롬에서 눈으로의 전환 작업을 실행하고, World_Aligned_Blend는 표면이 가리키는 방향에 따라 Layer Blend를 진행합니다.
레이어드 머티리얼 네트워크
다음은 Mat_SnowyChrome 머티리얼 네트워크의 구조입니다. 코멘트 영역마다 설명이 달려 있습니다.
-
크롬 셋업(Chrome Setup) - 2개의 파라미터를 Layer_Chrome Material 함수에 연결하고 있습니다. 1번째는 Chrome Normal 이라는 스칼라 파라미터로, NormalMultiplier 입력을 조작합니다. 2번째는 ChromeTint 라는 벡터 파라미터로, Tint 입력을 조작합니다. 두 파라미터를 사용하면 노멀 맵의 세기를 변경하고, 머티리얼이 나중에 인스턴스화 할 때 크롬의 색조를 변경할 수 있습니다.
-
눈 셋업(Snow Setup) - 노드를 따로 추가할 필요가 없습니다. Layer_Snow 머티리얼 함수가 블렌드 노드에 직접 연결됩니다.
-
월드 정렬 블렌드 셋업(World Aligned Blend Setup) - WorldAlignedBlend 노드는 머티리얼 블렌드의 위치와 선명도를 조절합니다. Blend Sharpness 값을 10으로 설정한 뒤, BlendBias 라는 스칼라 파라미터를 생성하고 Blend Bias 입력에 연결합니다. 연결하면 블렌드가 발생하는 지점의 메시에서 수직 지점을 조정할 수 있습니다.
-
MatLayerBlend - 이 노드에는 블렌드를 진행하는 데 필요한 로직이 있습니다. 여기서 베이스 머티리얼은 Layer_Chrome, 상단 머티리얼은 Layer_Snow이며, 알파 입력에 연결된 WorldAlignedBlend 노드에서 전환 작업을 주도합니다.
전부 끝나면 머티리얼을 저장하세요!
레이어드 머티리얼 인스턴싱하기
이 머티리얼에 두 파라미터를 포함했으니, 이제 머티리얼 인스턴스를 만들고 머티리얼 레이어의 수치를 커스터마이징할 수 있습니다.
-
프로젝트에 시작용 콘텐츠(Starter Content)를 포함했다면 새 머티리얼을 적용할 의자와 탁자 세트가 있을 것입니다. 없다면 아무 에셋이나 씬에 배치해 보세요.
-
Mat_SnowyChrome 머티리얼을 우클릭한 다음, 컨텍스트 메뉴에서 머티리얼 인스턴스 생성(Create Material Instance) 을 클릭합니다. 기본 이름도 괜찮습니다.
-
콘텐츠 브라우저(Content Browser) 에 있는 머티리얼 인스턴스 에셋을 씬의 오브젝트 중 하나로 드래그합니다.
-
머티리얼 인스턴스를 더블 클릭 하여 머티리얼 인스턴스 에디터에서 엽니다. 크롬의 색조, 크롬의 노멀 맵 깊이, 크롬 위에 떨어진 눈의 양을 변경할 수 있습니다.