Unreal Engine

Unreal Material - 04

Rapids. 2024. 4. 25. 11:33

[동적 머티리얼 응용편 : 1.랜덤 컬러 적용, 2.타임라인 노드 활용]

지난 머티리얼 시간 BP_Chair를 이어서 사용

 

1. Random 노드를 이용한 활용

Set Vector Parameter Value에서 Value 인풋핀에 Make color 노드를 연결하고 각 RGB채널에 Random Float in Range 노드를 연결해준다. Min은 0 / Max 는 1. 

Random Float in Range노드는 랜덤한 Float값을 뱉어낸다.

 

컴파일, 저장 후 Play를 하면

현재 On component Begin Overlap 이벤트를 사용중이기 때문에 충돌할 때마다 컬러가 랜덤하게 바뀌게 된다.

 

2. Add TimeLine 노드를 이용한 활용

Add TimeLine 노드를 생성하고 더블클릭하면 TimeLine노드 안으로 들어갈 수 있다.

 

Track을 눌러 Add Color Track 생성한 후 이름을 Color로 변경

 

그라디언트의 양끝 갈피를 더블클릭하면 색 변경 가능. 시간에 따른 색 변화를 줄 수 있는 타임라인이기 때문에 앞에서부터 순차적으로 원하는 컬러를 지정, 갈피를 추가하여 조절해준다.

 

Track을 눌러 Add Float Track 생성한 후 이름을 Opacity로 변경. 시간에 따른 Float값의 변화를 줄 수 있는 타임라인이기 때문에 앞에서부터 순차적으로 원하는 수치에 키를 넣어 그래프를 그려준다.

 

그래프에 대고 우 클릭시 키 생성 가능. 상단의 Time과 Value값으로 키의 위치를 변경할 수도 있다.

옆에 화살표로는 Key를 기준으로 그래프가 화면에 가득 차 보이도록 배치해준다.

 

여기까지 설정 모습. 컴파일.

 

다시 이벤트 그래프로 돌아와서 on component begin overlap 실행핀을 TimeLime의 Play from start에 연결하고 update로 나오는 출력 핀을 set vector parameter value의 실행핀에 연결해준다. 

 

! 타임라인의 노드를 보면 출력핀 쪽에 앞서 만든 그래프들이 추가된것을 볼 수 있다.(Color 와 Opacity)

 

타임라인에서 나오는 Color를 set vector parameter value의 Value핀에 연결해주면 앞서 설정한 타임라인 컬러에 따라 색이 순차적으로 바뀌는 것을 볼 수 있다.  (핑크, 노랑, 초록 순서로 바뀜)

 

추가로 앞서 만든 타임라인 Opacity활용. 블루프린트에 들어가 있는 의자의 머티리얼 에디터를 열어서 Emissive를 추가로 연결. 노드는 아래와 같다. Apply, 저장해주기.

 

조절할 파라미터인 Emissive 이름을 복사. ( 파라미터화 한 상태여야한다.)

머티리얼 창을 닫고 BP_Chair로 돌아온다.

 

Dynamic Material에서 핀을 뽑아서 Set Scalar Parameter Value노드를 생성한 후 파라미터 네임에 앞서 머티리얼에서 복사한 파라미터 이름을 넣어준다.

Set Scalar Parameter Value노드에도 실행핀을 연결해준다.

*주의 : 그래프 빈 공간에서 우클릭으로 Set Scalar Parameter Value 노드를 만들면 머티리얼 파라미터 콜렉션(MPC)을 조절할 수 있는 노드가 생기기 때문에 쓰임이 다르니 주의!

 

타임라인에서 나오는 Opacity를 Set Scalar Parameter Value노드의 Value에 연결.

두 가지의 이미시브 컬러가 변할 수 있게 Lerp노드에 연결했던 Emissive 파라미터가 타임라인의 수치에 따라 변화함에 따라 컬러가 서서히 바뀌는 것을 볼 수 있다.


[다양한 재질 머티리얼 제작]

1.ClearCoat

투명 필름, 도자기, 자동차 등을 표현할 때 유용한 재질

 

* 사전 체크 사항: 프로젝트 세팅 - Engine - Rendering - Material - ClearCoat Enable Second Normal을 On해주어야한다.

보통 프로젝트 세팅을 바꾸면 엔진을 재시작해야하는데 그 때마다 컴파일 시간이 생기기 때문에 프로젝트에 작업 어셋들이 많아지면 컴파일 시간도 길어진다. 웬만하면 사전에 사용할 기능을 파악하여 세팅해놓는 것이 좋다.  

 

메터리얼 생성 (M_ClearCoat)

디테일 패널에서 Shading Model을 Clear Coat로 바꿔준다.

 

기본 세팅 - 회색 3 벡터 컬러를 Base Color와 0.7정도의 Matallic을 달아주었다.

 

Roughness - Lerp로 맵의 수치를 재조정하여 연결

Normal - 가장 바깥쪽에 나타나는 노멀, 겉면

ClearCoat와 ClearCoatRoughness를 이용하면 겉면에 코팅하듯 빤짝이는 표현이 가능

ClearCoat의 아래쪽에 들어가는 노멀은 따로 노드를 생성해서 달아주게 된다.

 

ClearCoatNormalCustomOutput 노드를 생성해서 클리어코드 아래에 들어가는 노멀 표현을 연결해준다.

마지막으로 UV 타일링 조절 노드를 텍스처에 연결하여주면 완성. apply, 저장.

 

ClearCoat 완성 모습

 

2. Fabric

Fuzz(솜털과 같은, 천에 일어난 실들로 생기는 벨벳에서 두드러지는 반사 표현)

Fabric의 느낌을 내는 방법으로는 여러가지가 있다.

 

<Shading Model의 Cloth이용>

메터리얼 생성 (M_Cloth)

디테일 패널에서 Shading Model을 Cloth로 바꿔준다. Cloth로 바꾸면 Opacity가 열리고, Fuzz Color와 Cloth 핀이 생긴다.

Cloth는 0에서 1에 가까울수록 천의 표현을 해준다 (마스크를 연결하여 천과 천이 아닌 부분을 나눌 때 사용)

Fuzz Color는 Fresnel과 비슷한 표현으로 천의 표면에 생기는 희끄므리한 반사표현을 해준다. 

 

 

<카메라 벡터와 오브젝트 노멀을 내적한 페이크 머티리얼 제작>

Dot product를 이용한 Fresnel 생성 노드 조합

Dot product를 이용한 Fresnel 생성은 원리는 동일하나 0과 1의 방향이 반대이므로 1-x노드를 달아 반대로 뒤집어주어야한다.

 

이를 응용하여 1-x로 뒤집은 것과 뒤집지 않은 것을 Add로 더해주면 가운데와 외곽부분이 밝은 빛을 띄는 형태를 만들어 줄 수 있다. 

 

Base Color 텍스처와 AO, Roughness 텍스처를 불러와 연결하여주고, 특히 Base Color는 앞서 계산해놓은 Dot Product를 이용한 노드 계산 마지막인 Add 노드와 Multiply로 연결해준다.

 

Transform 노드를 생성하면 TransformVector라는 노드가 생성되는데, 이 노드는 TangentSpace의 노멀을 WorldSpace 노멀로 바꿔줄 수 있어 기존에 달아놨던 PixelNormalWS를 대체하여 달아줄 수 있다. 노멀 맵을 대체하여 사용해주면 노멀의 표면 표현에 따라 외곽선의 디테일을 살려줄 수 있다. 

 

추가로 UV 타일링을 달고 인스턴스에서 사용할 노드를 파라미터화 후 이름 정리를 해주면 된다.

 

메터리얼 인스턴스로 커스텀한 Fabric들

 

3. Tree

Blend Mode는 Masked, Shading Model은 Subsurface, Two sided를 On해준다.

 

 

SimpleGrassWind - 풀의 움직임을 줄 수 있는 노드 

 

4. Mirror. Reflect Material

<기본 노드로 조합한 반사 재질>

기본 노드로 거울과 같은 반사 재질은 만들 수 있지만, 캐릭터가 반사되지 않는다는 단점이 있다.

 

* 반사 퀄리티를 높이기 위해서는 프로젝트 세팅 - 엔진 - 렌더링 - 리플렉션 - Reflecton Capture Resolution을 높여주면 된다...

 

언리얼에서 반사를 표현하는 방법은 다양한데 그 중 하나로 Scene Capture 2d 액터를 사용할 수 있다.

레벨에 끌어다놓으면 카메라를 원하는 방향으로 설치하고, ( 거울 방향과 일치하도록. 거울에서 캐릭터를 보는 방향 ) 

 

Texture에서 Render Target 텍스처를 생성하고, Scene Capture 2d 액터의 디테일 패널에서 Texture Target에 생성한 Render Target을 넣어준다. Render Target Texture란 실시간으로 캡처한 것을 텍스처로 만들어주는 어셋이다.

 

카메라와 텍스처를 연결했으면, 새로운 머티리얼을 생성하여 Render Target Texture를 넣어주고 BaseColor에 연결한다. 저장.

 

다시 레벨로 돌아와서 카메라 위치에 거울이 될 박스를 생성하고 박스에 위에서 만든 머티리얼을 넣어주면 카메라가 찍는 모습을 반영하는 거울과 같은 작동을 하는 것을 볼 수 있다. 

단, 카메라로 비춘 모습이 반영되어 보여지는 것이라 좌우 대칭이 되지 않으므로 머티리얼을 적용한 박스를 좌우 반전 시켜주어 반사 방향이 거울과 같게 수정해주어야한다. 또는 머티리얼에서 Texture Coordinate 노드를 이용하여 텍스처 자체를 뒤집어 줄 수 있다.

 

머티리얼에서 텍스처를 좌우반전 수정한 모습
좌우반전을 수정한 결과

 

깨지는 화질을 수정하려면  Render Target Texture를 더블클릭하여 Size를 수정해준다.

 

수정 후 퀄리티

 

이러한 CCTV방식에서는 왜곡이 발생하는데 Scene Capture 2d 디테일 패널에서 FOV를 조절하고 박스 스케일을 조절해서 최대한 왜곡을 줄여보는 방법이 있다. 

 

5. SubSurface

사람 피부, 양초와 같은 빛의 산란을 표현해주는 재질

 

< Shading Model : Subsurface >

Shading Model을 Subsurface로 지정해준다.

Opacity와 Subsurface Color가 활성화된다.

Opacity는 0이하의 값은 반영하지 못한다. 

 

< Shading Model : Subsurface Profile >

Shading Model을 Subsurface Profile로 지정해준다.

또한 Content Drawer에서 우클릭하여 Subsurface Profile을 추가적으로 만들어준다.

다시 머티리얼로 돌아가 디테일 패널의 Subsurface Profile에 위에서 생성한 어셋을 넣어준다.

 

Subsurface Profile를 이용한 Subsurface의 원리는 렌더를 한칸씩 밀어 렌더링하면서 흐린 효과를 주는 것. 사람의 피부 재질을 표현하는데 특화되어있고, 일종의 Fake 방식이기 때문에 아예 Opacity를 베이스로 만드는 것 보다는 상대적으로 저렴하게 피부 재질을 계산하여 제작할 수 있다. 

 

<ss 재질의 커튼>

Shading Model Subsurface의 머티리얼을 하나 만들어준다.

 

단면과 양면으로 만들어진 두 가지의 커텐을 보면 단면 커튼의 경우 그림자가 생기지 않는데, 이를 해결 하기 위해서는 

단면 커튼의 디테일 패널에서 Shadow Indirect Only를 On하여 그림자를 아예 없애거나, 혹은 Shadow Two Sided를 체크하여 그림자를 생성해줄 수 있다.(둘은 상반되는 기능이므로 둘 중 하나만 사용하기)

 

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

Unreal Lighting - 04  (0) 2024.04.29
생성형 AI - 03  (0) 2024.04.26
Blender - 01  (0) 2024.04.24
Motion Capture - 01  (0) 2024.04.23
Unreal Lighting - 03  (0) 2024.04.22