Unreal Engine

Unreal Material - 03

Rapids. 2024. 4. 18. 09:11

1. Decal

Place Actors - Decal Actor를 레벨에 배치하여 사용할 수 있다.

 

Decal용으로 사용할 Material을 만들어준다.

Material Editor - Details 패널에서 Material Domain은 Deferred Decal로 바꿔준다.

Material Editor - Details 패널에서 Blend Mode는 Translucent로 바꿔준다. 

Decal용으로 사용할 메터리얼 생성 및 Details 패널 옵션 조절

 

간단한 연결 테스트, 텍스처의 컬러와 알파를 각각 연결하고 저장한 후 만든 Material을 Decal Actor의 Details 패널 - Decal Material 부분에 넣어준다. ( 또는 Material Instance화 시켜준 후 적용해준다. 네이밍 규칙 MI_이름)

 

*Decal의 방향과 맞지 않는 부분에 오브젝트가 맞닿아있으면 텍스처가 늘어난 듯 표현된다. 보통은 불필요한 부분에 넘치지 않도록 Decal Actor 자체의 크기를 조절해서 사용한다.

Decal Actor Scale 조절 전, 후

 

Decal은 주로 Alpha 채널이 또는 단일 흑백 맵이 필요한데, Master Material에서 Channel Mask Parameter 노드를 이용해서 텍스처의 원하는 채널만 뽑아와줄 수 있다.

중간에 Alpha 채널의 강약을 조절할 수 있는 옵션을 추가할 수 있다.

 

Decal의 정렬 순서( Sort Order )

여러가지의 Decal을 겹치게 쌓는 경우 위에 올라오는 Decal의 순서를 정할 수 있다.

Decal Actor의 Details패널 - Decal - Sort Order의 숫자를 바꿔어주면 높은 숫자를 지정해줄수록 해당 Decal이 위로 올라온다. (각 Decal 마다 다른 숫자를 지정해야 확실한 순서가 생긴다)

 

< 특정 오브젝트가 Decal에 영향받지 않게 설정하는 법 >

영향을 받지 않도록 설정하고 싶은 오브젝트의 Details 패널 - Recives Decals를 off해주면 Decal에 영향을 받지 않는다.

Recives Decals 체크 (왼) /  Recives Decals 해제 (오)

2. 잔디(Grass) Material

<Two Sides Material>

Blend Mode에서 Masked는 재질에 반투명 요소 (Opacity 정도의 조절) 가 필요없고, Alpha 맵에 의해 깔끔히 분리가 필요할 때 사용

Two sided를 체크해주면 양면 표현이 가능하다.

 

<움직이는 메시 만들기 : Wind 효과>

Time과 sine의 조합으로 반복하는 수치값을 만들어주고, 다시 0~1로 바꾸는 과정을 거쳐준다.

이렇게 반복되는 수치를 Alpha로 하는 Lerp 노드에 Y값이 10과 -10을 가지는 3 vector를 A,B에 각각 꽂아준다.

여기까지하면 10과 -10을 반복적으로 움직이는 수치를 만들어줄 수 있다.

 

위에서 만든 노드를 World Position offset에 연결하여 사용하기 위해서 Texture coordinate 노드를 활용한 기능을 짜준다.

Texture coordinate에 Component Mask로 G채널을 추출하여 UV의 V방향으로 생성되는 그라데이션을 생성해준다.

1-X를 활용해서 위에가 1값이 되도록 그라데이션이 뒤집어준다.

Power를 통해 그라데이션 범위를 정돈하고 ( 아래의 예시에서는 흰색 영역을 줄여주기 위해서 5를 제곱해주었다)

앞서 만든 반복되는 수치와 Multiply로 곱해준다. 곱해주면 검정부분에 해당하는 부분의 움직이지 않는다.

추가로 Constants를 파라미터화 하고 곱해주어서 Wind(바람의 강도)를 조절하는 노드로 사용할 수 있다.

 

* World Position offset : 메시의 버텍스 위치를 월드 포지션에 기반해 움직이도록 해준다.

 

3. 월드 포지션 기반 Texture Blend Material

높이, 거리에 따른 자동 Blend Texture를 만들고 싶을 때 유용. ex> 꼭대기에 눈 쌓인 산

<메터리얼 함수 : MF>

*Material Function : 자주 사용되는 조합을 저장하여 꺼내쓰기 위해 만들어 놓는 함수

 

Contents Drawer에서 우클릭 - Material - Material Function을 만들 수 있다.

 

VertexNormalWS 노드를 사용하면 월드를 기준으로 메시의 버텍스 노멀을 추출해줄 수 있다. 

메시의 상단에 Texture를 Blend 해줄 것이기 때문에 월드축에서 Z축에 해당하는 B채널을 Component Mask를 활용하여서 추출해준다.

Power와 Multiply를 이용하면 영역의 범위 및 강도를 조절해줄 수 있다.

여기서 Function input 노드를 이용하면 머티리얼 함수를 머티리얼 에디터에 불러와서 작업할 때 input pin이 생기도록 설정하여 외부 수치를 받아들여줄 수 있다.

마지막으로 WS가 붙은 노드를 작업하다보면 수치값이 어마 무시하기 때문에 원하는 수치 범위로 정리해주는 것이 중요하다. Clamp를 달아 0~1값으로 수치를 조절해준다.

 

Function input의 Details패널에 가면 Input pin에서 보여질 이름을 설정해 줄 수 있고, Sort Priority를 이용해 Input Pin의 순서도 설정해줄 수 있다.

Function Input 노드의 Details 패널

마지막으로 Material Function 에디터의 빈 곳을 클릭하면 Details패널에서 Expose to Library를 On해주면 

Material에디터에서 검색하여 사용하는 게 가능해진다.

 

<메터리얼 함수 불러와서 메터리얼 만들기>

검색창에 앞서 만든 Material Function의 이름을 검색하면 불러올 수 있다.

불러온 Material Function의 Input Pin들에 Constants를 연결해주면 사용 가능하다.

 

4. 전역 변수를 이용한 Material

<메터리얼 파라미터 컬렉션 : MPC>

*MPC : 전역 변수 조절용으로 사용, 같은 마스터 메터리얼을 사용하는 메시들을 한번에 조절하도록 사용할 수 있다.

네이밍 규칙 - MPC_이름

 

Contents Drawer에서 우클릭 - Material - Material Parameter Collection을 만들 수 있다.

 

Material Parameter Collection을 열면 아래 화면과 같은 에디터가 나오는데, Scalar 또는 Vector Parameters 중 원하는 타입에 + 버튼을 눌러 원하는 수 만큼 변수를 생성해줄 수 있다.

Parameter Name을 알기 쉽게 지정해주고 Default Value를 설정해 줄 수 있다.

 

<MPC 불러와서 메터리얼 만들기>

메터리얼 하나 생성해주고, MPC를 불러오기 위해서 CollectionParameter노드를 생성해준다.

CollectionParameter의 Details패널에서 앞서 만든 MPC를 적용해줄 수 있고, MPC에서 생성한 변수 목록도 볼 수 있다.

CollectionParameter노드는 메터리얼 그래프 안에서 사용될 변수만큼 생성해서 Details패널을 변경해서 사용해주면 된다.

 

이 때 주의 할 점은 MPC를 불러와서 Muliply해주거나 연산을 할 때 앞서 계산해놓은 수치들과 채널의 수, 즉 Vector의 수가 맞아야 오류가 뜨지 않는다.

아래의 경우 MPC는 Vector수가 4개이므로 텍스처 RGB에 맞춰 Mask로 3개의 채널만 뽑아 연산해주었다.

 

 

5. UV 타일링과 오프셋

 

6. Layerd Material

< UE4에 많이 사용했던 Layerd Material 방식 >

Material Editor에서 R esult node를 클릭 -  Details 패널 - Use Material Attribute를 On하면 결과 노드의 형태가 변한다.

Material 자체를 받아들일 수 있는 상태가 되기 때문에 Material Function을 이용해 이미 만들어놓은 Material을 불러와 사용할 때 유용하다.

 

Material Function을 만들어주고  Material 형태로 만들어 주기 위해서 Make Material Attributes 노드를 생성해서 연결해주어야한다. (Material Function은 기본적으로 Material을 만들기 위한 Input Pin이 제공되지 않는다) 

3가지의 다른 재질의 MF를 만들어 준다.

 

맨 처음에 만든 Material에 3가지의 MF를 불러온다.

Material 형식으로 만든 MF와 MF는 BlendMaterialAttribute 노드를 이용하여 섞어 줄 수 있다. (Material 버전 Lerp 느낌)

추가로 AO 맵을 완성된 Material에 덮어주기 위해서는 MatLayerBlend_AO를 사용해 줄 수 있다.

원하는 만큼 Material을 쌓아준 후 마지막은 결과 노드에 연결하여준다.

단일 메시지만 Alpha맵을 이용해 구역별로 다른 재질을 넣어준 결과물

 

< UE5에 많이 사용하는 Layerd Material 방식 >

Contents Drawer에서 우클릭 - Material - Material Layer를 만들 수 있다.

 

Material Layer를 열어 보면 기본으로 3개의 노드가 나오고, 이 역시 MF와 같이 MakeMaterialAttributes 노드를 이용해서 머티리얼을 만들어준다. Color 같은 경우에는 Parameter로 변환하여 노출시켜준다. 저장.

 

만들어진 ML 역시 Instance를 만들어줄 수 있다. 이번 예시에서는 3가지 Instance를 만들어 (MLI) 컬러를 다르게 변경해준다.

 

만들어진 MLI를 활용하기 위해서는 기본 메터리얼도 하나 만들어 주어야한다.

머티리얼을 하나 생성해주고, Material Attribute Layers를 Use Material Attribute를 On하여 축약시켜놓은 결과 노드에 연결해준다. 저장.

 

방금 만든 머티리얼의 Instance를 만들어주면 우측 Layer Parameters 패널에서 MLI를 쌓을 수 있는 레이어를 볼 수 있다.

필요한 만큼 레이어를 +버튼을 눌러 추가하여 MLI를 넣어준다.

쌓인 순서대로 제일 위에 가있는 레이어가 표현된다.

 

MLI를 적용한 Material Instance 창의 최종 모습

 

쌓아놓은 MLI에 마스크를 적용하여 부분적으로 분리해 내기 위해서는 Material Layer Blend를 생성해주어야한다.

Contents Drawer에서 우클릭 - Material - Material Layer Blend를 만들 수 있다.

 

기본적으로 4개의 노드가 있으며, 

예시에서는 채널별로 부위가 나뉘어진 Alpha맵을 가진 Texture를 이용하기 위해서 Texture를 불러오고 ChannelMaskParameter노드를 달아준다. 

ChannelMaskParameter노드의 아웃풋을 BlendMaterialAtteributes의 Alpha에 연결 시켜준다. 저장.

 

* ChannelMaskParameter 노드는 Vector4일 때 사용 가능하다. Vector 수가 모자르면 Append Vector 노드를 활용해서 Alpha 채널을 더해주거나 Constants를 연결해주면된다.

 

다시 Material Instance로 가서 Layer Parameters 패널을 들어간 후 각 레이어의 Blend Asset이라고 써있는 곳에 위에서 만든 MLB를 넣어주면 앞서 달았던 ChannelMaskParameter가 나타나며 채널별 알파맵을 적용할 수 있게된다.

 

 

< UE5에 많이 사용하는 Layerd Material 방식 : 응용편>

Material Layer Blend도 Instance 생성이 가능하다.

Material Layer Blend를 이용해 Alpha맵이 들어갈 수 있도록 해준 후, 우클릭 -  Create Blend Instance를 해주면 Material Layer Blend에서 Parameter화 시켜주었던 옵션을 기반으로 응용할 수 있는 Instance가 생성된다.

 

 

최종 정리 : Material Layer와 Material Layer Blend를 제작시 특정 노드를 Parameter화하고 이를 Instance로 변경하여 작업하면 Material Layer Instance와 Material Layer Blend  Instance를 이용해 작업한 Material Instance에서 노출 시킨 파라미터들을 조절 가능하게 된다.

 

* 노말 맵이 뒤집혀져있을 때는 텍스처를 더블클릭하여 텍스처 에디터에 들어가 준 후, Texture탭에서 Filp Green Channel을 On해주면된다. 저장.

 

* 텍스처 사용 갯수 제한 푸는 법

텍스처를 여러개 사용해서 Material  레이어를 쌓아서 사용하다보면 16개 제한을 넘었다는 오류 문구가 뜨면 텍스처가 잘 안나올 때가 있는데 이럴 때는 각 Material 에디터, Material  Layer 에디터, Material Layer Blend 에디터에서텍스처 노드를 클릭하고 텍스처들의 Details 패널에서 Sampler Source를 From texture asset(기본값)에서 Shared: Warp으로 바꿔주면 사용할 수 있는 텍스처 갯수가 늘어난다. From texture asset의 경우는 16개 제한이 있고, Shared:Wrap은 128개 제한이 있다.  모든 텍스처에 변경 값을 반영해 주어야 한다.

 

5. 동적 머티리얼 인스턴스(Dynamic Material Instance)

블루프린트 - Actor를 생성해본다. (네이밍 규칙 BP_이름)

 

블루프린트를 더블클릭해서 들어가 왼쪽 상단 Components 패널에서 Add - Static Mesh로 메시를 불러오고

추가된 메시 선택 상태에서 다시 Add - Box Collision을 생성 

Collision의 크기, 위치를 설정해준다. 

 

모두 세팅 됐으면 Construction Script 탭으로 이동하여

 

검색창에서 'Create Dynamic Material Instance(앞서 불러온 Static Mesh의 이름)' 노드를 불러와준다. 

그럼 자동으로 Static Mesh를 타겟으로 하는 노드가 생성된다.

 

Construction Script 실행 핀을 Create Dynamic Material Instance 실행 핀에 꽂아준다.

Return Value 핀을 우클릭하여 Promote to Variable(변수로 승격)을 해주면 SET노드가 자동으로 연결된다.

연결된 SET노드의 Details 패널에서 Variable Name을 알아보기 쉽게 바꿔준다.

 

My Blueprint 패널에서 VARIABLES에 여태까지 만든 변수를 볼 수 있는데,

여기서 Box를 클릭하여 Details 패널에서 Events- On Component Begine Overlap을 생성해준다.

자동으로 Event Graph로 넘어간다.

 

Event Graph에 앞서 변수로 승격했던 DynamicMaterial을 Get으로 가져와주고 핀을 뽑아 Set Vector Parameter Value를 연결해준다. 

Set Vector Parameter Value의 Parameter Name과 Value를 설정해준다.

* 이번 예시에서는 메터리얼에서 사용된 컬러를 바꿀 것이기 때문에 의자의 메터리얼에 들어가 파라미터화된 노드 이름을 확인하고 똑같이 입력해주어야한다.

Chair에 적용된 메터리얼의 Parameter이름들

 

On Component Begine Overlap의 실행 핀을 Set Vector Parameter Value에 꽂아주고, 필요할 경우 한번 더 다른 Parameter 값에 대한 노드를 연결시켜준다. 다했으면 블루프린트 컴파일 + 저장.

 

만든 블루프린트를 레벨에 올리고 게임모드를 실행하면 캐릭터가 Box Collision에서 설정했던 범위에 닿는 순간 의자 컬러가 변하는 것을 볼 수 있다.

콜리전에 닿지않을 때 (왼) / 콜리전에 닿았을 때 (우)

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

Unreal Lighting - 03  (0) 2024.04.22
생성형 AI - 02  (0) 2024.04.19
MAYA To Unreal Rigging - 02  (0) 2024.04.17
MAYA To Unreal Rigging - 01  (0) 2024.04.16
Unreal Lighting - 02  (0) 2024.04.15