Unreal Engine

Unreal Material - 02

Rapids. 2024. 4. 11. 11:22

노드의 파라미터화

노드를 우클릭 - Convert to Parameter를 하면 Material Instance를 생성했을 때 값을 조절할 수 있는 옵션으로 노출시킬 수 있다. 

 

[BaseColor]

컬러를 담당하는 부분

Constant 3 Vector 노드

RGB 3개의 채널을 가지며 색상을 지정할 수 있는 노드, Color Picker를 이용해서 컬러를 지정해줄 수 있는데

보통 R,G,B, S,V 값은 색상을 조절하기 위해서 1이하의 값을 가지게 되는데, 색상 이외의 다른 형태로 값을 이용하기 위해서 엔진에서는 1이상의 임의의 값도 지정해줄 수 있다. 예시로 Emissive Color의 세기를 조절하기 위해서 Value(V)값을 10 이상의 값을 주어 밝게 빛나듯 표현해줄 수 있다.

 

Hex Linear, Hex sRGB값은 숫자와 알파벳의 조합으로 색상을 지정해줄 수 있다.

 

[Metallic]

금속성을 조절하는 부분, Rougness와 같이 연결되어야 디테일한 조절이 가능하다.

 

[Specular]

표면에 반사되는 것을 표현하는 부분, 엔진에서 Specular에 아무것도 연결안했을 때 값은 기본 0.5

최근에는 PBR Material을 조절할 때 Specular값을 기본 0.5로 그대로 두고 Rougness로 조절하여 표현을 조절한다.  

 

[Roughness]

표면의 거칠기를 조절하는 부분, 표면에 맺히는 하이라이트를 퍼트리는 역할을 한다.

 

[Anisotropy]

빛 맺힘의 방향성을 조절하는 부분, 최대 1까지의 변화만 반영한다. 1에 가까워질 수록 고리형태로 하이라이트를 맺히게 만들어준다.

 

[Emissive Color]

오브젝트의 발광정도를 조절하는 부분, Constant 3 Vector 노드를 달았을 때 컬러를 지정하고 Value값을 향상 시키면 V값이 높아질 수록 밝기가 쎄지며, 컬러는 흰색에 가까워진다.

 

[Opacity]

결과 노드 선택 - Details 패널 - Material - Shading Model을 Translucent(반투명)로 바꾸면 Opacity를 사용할 수 있다.

Shading Model 기본 갑은 Opaque로 불투명이라는 의미.

투명도를 조절하는 부분, 굴절이 들어가지 않기 때문에 유리 표현과는 다름.

투명도의 중간 쯤을 사용할 때 연산에 많은 비용이 들어간다. 

 

[Opacity Mask]

결과 노드 선택 - Details 패널 - Material - Shading Model을 Masked로 바꾸면 Opacity Mask를 사용할 수 있다.

앞서 Translucent 모드와 다른 점은 기본 Base Color, Metallic, Roughness 등을 같이 사용할 수 있다는 점이다.

또한 Opacity Mask의 경우에는 0~1사이의 값을 입력하더라도 무조건 0 또는 1로 인식하여,

보이거나 안보이거나의 상태를 띈다. 

 

 

[Master Material 제작]

0411수업 M_Master

 

보통 큰 부류의 Master Material을 잘 구축해놓으면 이를 Material Instance로 만들어 옵션만 조절하여 사용하기 때문에 Master Material을 제작해놓고 사용하는 방식으로 작업한다.

 

Material Editor의 우측 상단을 보면 Palette가 있는데 Category 목록에서 Expressions(표현식)과 Functions(함수)를 모아 볼 수 있다. 또는 검색 가능

파란색의 노드 - 함수를 의미, 언리얼에는 자주 사용하는 기능을 함수로 제공하고 있다.

그 중에서도 'Blend_'로 시작하는 함수들은 흔히 포토샵에서 사용하는 레이어 모드를 구현해놓은 함수들이다.

 

간단히 BaseColor의 Tint와 Intensity를 조절할 수 있는 노드를 구현해보았다.

 

파라미터화 한 노드는 비슷한 기능별로 정리하기 위해서 Details 패널에서 설정 값을 만져주어야한다. 정리하지 않으면 알파벳순으로 정렬하여 모두 섞이게 됨.

정렬을 원하는 노드를 클릭 - Details패널 - Material Expression - Group에 원하는 목록 작성

같은 Group으로 설정된 노드들은 묶어서 표현이 된다.

또한 Sort Priority를 사용하여 같은 Group안에서도 표시 순서를 정해줄 수 있다.

메터리얼 에디터에서 노드의 그룹 및 순위 조정(왼), 메터리얼 인스턴스에서 확인되는 결과(우)

 

Metallic을 조절하기 위해 기본 수치조절 버전과 텍스처 사용 버전을 Switch(Static Switch Parameter 노드를 이용해 바꿀 수 있도록 구현해보았다. Switch노드를 이용하면 체크 여부에 따라 드러나는 파라미터를 변경해줄 수 있게된다.

메터리얼 인스턴스에서 체크를 할 수 있는 switch관련 항목이 생성된 모습

 

 

Specular와 Roughness 구현, Roughness의 경우 거의 모든 어셋이 해당 텍스처를 가지고 있기 때문에 Switch 노드를 생략하였다.

 

Normal 맵을 간략히 설명하면 R과 G 채널에 의해 표면의 튀어나옴 정도를 표현해주게된다. 그렇기 때문에 B채널은 디테일이 없는 기본 1값이어도 무방하다.  Normal의 세기를 조절하기 위해서는 Flatten Normal노드를 활용해줄 수 있다.

 

UV 타일링 옵션을 넣어주기 위해서는 Texture Coordinate노드를 이용하게 되는데 여기에 Multiply 노드를 연결해 곱해주면높은 값을 곱해줄수록 타일링을 많이 시켜줄 수 있다. 하나의 Constant를 이용하여 UV를 한번에 조절해 줄 수도, 각각의 U,V constant를 생성 후 Append로 연결시켜 조절해 줄 수도 있다.

 

다음으로 UV의 Offset 조절을 위해서는 Texture Coordinate 노드에 Add를 연결 시켜주면 된다.

UV 타일링과 오프셋 기능을 합친 UV조절 노드

 

Uv 조절용 노드는 앞서 만든 각 Texture 노드 UVs 인풋 핀에 연결해준다.

 

여기까지만 해도 기본적인 Master Material을 만들 수 있지만 좀 더 추가적인 기능을 제공하기 위해 Normal관련 노드를 추가해보자.

 

<두 가지의 노멀 합치기>

노멀값은 기본적으로 각 채널에서 0~1사이의 값을 유지해야하기 때문에 Multiply나 Add로 단순히 합칠 수 없다. 

이 과정을 언리얼에서는 함수로 제공하는데 Blend Angle Corrected Normals 노드를 활용하면된다.

Detail Normal 맵이 없을 수 있기 때문에 Switch 노드를 달아서 연결해주고 없을 경우를 대비하여 False 인풋핀에 Constant 3 Vector노드를 이용해 B채널에 1값을 넣어 아무 역할을 안하는 노멀맵을 연결해준다. 

 

또한 노멀의 Strength를 조절해주기 위해 NormalStrength_WS노드와 FlattenNormal 노드를 이용해 줄 수 있는데, 둘 중 어느것을 써도 결과는 비슷하기 때문에 취향껏 사용해주면 된다. 

업그레이드 된 버전의 노멀 관련 노드

 

디테일을 더하기 위해 Dirt Texture를 추가해보자.

 

Channel Mask Parameter 와 Component Mask 차이

둘 다 특정 채널을 뽑아내는 노드이지만 Channel Mask Parameter는 하나의 채널만 선택이 가능하도록 리스트화 되어 표시되고 기본적으로 파라미터화 돼있으며, Component Mask는 파라미터화하면 원하는 채널을 여러개 선택하도록 체크박스를 제공하여 표시된다. (채널을 수동으로 껏다켰다 해줘야하기 때문에 귀찮을 수 있다. 하지만 여러채널을 동시에 사용해야한다면 Component Mask를 사용해주어야한다)

RGB 각 채널에 다른 이미지가 들어가있는 Texture를 분리하는 방법 2가지(왼)  Channel Mask Parameter 노드의 Details패널(오)

 

Dirt Texture를 사용하기 위한 세팅.

 

여기까지 세팅이 됐다면 기존에 생성했던 BaseColor와 Roughness에 섞일 수 있도록 연결해주어야한다.

필요에 따라 추가적으로 사용할 것이기 때문에 Static Switch Parameter 노드를 이용해준다.

 

Static Switch Parameter에 같은 이름을 입력하면 서로 연동되는 Switch노드를 가질 수 있다. 연동된 Switch는 하나의 노드에서 값을 변경하면 자동으로 같은 이름의 다른 노드에도 변경된 값이 적용된다. (노드의 초록색이 좀 더 밝아진다)

Use Dirt Overlay?라는 이름의 Switch노드를 2개 만들어 주어 BaseColor와 Roughness 연결에 각각 사용해준다.

 

먼저 Basecolor와 Dirt 연결.

 

다음으로 Roughness에 연결

 

여기까지 Master Material 제작완료

 

*Tip

연결선을 더블 클릭하면 중간에 Dot이 생기면서 이 지점을 기준으로 연결선을 다시 뽑아낼 수 있다.

추가로 Shift를 누른상태에서 연결되어있던 핀을 누르면 연결되어있는 선들을 모두 다른 핀으로 옮겨끼워줄 수 있다.

 

[Vertex Paint Material 제작]

0411수업 M_VertexPaint

 

메시의 버텍스에 컬러를 적용하는 방법. Vertex Paint모드는 Vertex를 기반으로 Paint를 칠하는 것이기 때문에 하이폴리곤으로 작업을 할 수록 (Vertex가 많을 수록) Paint 퀄리티가 높아진다. 픽셀이 더 쪼개진다고 생각하면된다.   

 

Vertex Color라는 노드를 활용하여 Vertex에 색을 입힐 수 있도록 input Data를 불러온다. Vertex Color를 Alpha값으로 사용하는 Lerp를 이용해서 최대 4가지 컬러를 입혀줄 수 있다.

VertexColor노드의 R,G,B채널을 Alpha값을 이용해서 각각 작업해줄 수 있다.

앞서 만든 메터리얼을 스피어에 적용을 하고

본격적인 Vertex Paint를 진행하기 위해서 Mesh Paint Mode로 진입한다.

Paint 모드를 선택하고 브러시칠을 해주면 앞서 반영했던 컬러가 입혀지는 것을 볼 수 있다.

(혹은 Shift + 브러시칠을 해주면 입혀져있던 컬러가 벗겨지면 배경 컬러가 드러나는 것을 볼 수 있다.) 

 

위의 Material을 처음에 Shape에 적용하면 맨 처음 컬러는 빨강 색으로 보여지게 된다.

그 이유는 VertexColor노드의 각 채널값이 기본 1이기 때문이다.

또한 Paint를 칠하면서 Visualization - Color View Mode를 이용하면 작업중인 VertexColor노드의 채널을 분리해서 뷰포트해서 볼 수 있고, Color Painting - Channels를 이용해 브러시칠을 할 때 영향을 받는 채널을 선택해줄 수 있다. (다 체크하고 작업하면 모든채널에 같은 값이 적용된다.

Mesh Paint Mode(왼)과 VertexPaint로 텍스처를 나누어 작업한 모습(우)

 

BaseColor와 Roughness, Normal에도 각 텍스처를 적용한 Material Node 

 

* Tip

두 가지의 Texture가 섞일 때 단순히 Opacity차이로 흐리듯 섞이는 것을 방지하고 자연스럽게 합치기 위해 Height맵을 사용하게 된다. Lerp의 B채널에 넣었던 Texture의 Height맵을 가지고와서 Multiply, add, power를 달아주고 Clamp를 달아서 최종 정리하여 Lerp의 Alpha 맵에 연결해준다.( 기존의 VertexColor R채널은 Multiply의 B, add의 A에 연결해준다)

 

이렇게 연결해주면, 하이트맵을 따라 Texture의 연결을 조절해줄 수 있기 때문에 벽돌 사이에 낀 이끼와 같은 표현을 자연스럽게 해 줄 수 있다.

'Unreal Engine' 카테고리의 다른 글

Unreal Lighting - 02  (0) 2024.04.15
Unreal 파이프라인 - 01  (0) 2024.04.12
Unreal Level Design과 Light - 01  (1) 2024.04.09
Unreal Lighting - 01  (0) 2024.04.08
Unreal Material - 01  (0) 2024.04.04