언리얼 5

230926 재질

슬뷔 2023. 9. 26. 10:35

빌보드랑 비슷한 느낌 ( 계속 앞을 쳐다본다 ) 의 액터를 생성

=> 문자열을 랜더링 해주는 "텍스트 랜더 컴포넌트"

액터 상속받아서 TextActor 블루프린트 생성

* UMG 로 활용해도 된다

 

텍스트 랜더 컴포넌트는 기본적으로 빌보드기능을 제공하고 있지 않아서, 따로 재질로 처리를 할 것이다.

사용하고 있는 재질 복제해서 MT_Text 를 생성한다.

 

* 빌보드 컴포넌트는 카메라가 언제나 앞을 쳐다보게 하고 회전을 시킨다 (재질에서 하지 않음)

 

방법 :

월드 포지션 오프셋 이용

카메라를 향해 정렬할 수 있게 오프셋량을 계산해주는 Node 를 언리얼상에서 제공하고 있다

=> AlignMeshToTheCamera

 

* 재질은 무조건 "적용"버튼을 눌러야한다..

사용 방법 :

초보자용 안내문? 

 

* 디테일에 광원을 끄고, 이미시브 컬러를 주면 이 자체를 광원으로 사용할 수 있다.

https://mingyu0403.tistory.com/204

 

[Material] World Position 노드 알아보기

World Position 노드 현재 픽셀의 월드 스페이스 위치를 출력하는 표현식입니다. 개념 설명은 언리얼 문서가 정확하다. https://docs.unrealengine.com/ko/RenderingAndGraphics/Materials/ExpressionReference/Coordinates/index.h

mingyu0403.tistory.com


MT_ScreenUV 생성하고, 큐브에 적용

현재, 라이팅 처리(반사광)가 되어있어서 하얗게? 보인다.

 

무광으로 보이게 하려면?

스페큘러(반사광)러프니스를 사용한다.

반사광에 0을 주면 아래와 같이 무광으로 보이게 된다

https://docs.unrealengine.com/4.27/ko/Resources/ContentExamples/MaterialNodes/1_4/

 

1.4 - 러프니스

Material Nodes 예제 레벨에 대한 개요로, 예제 1.4: Roughness 입니다.

docs.unrealengine.com

https://m.blog.naver.com/bloodsoda/220960062160

 

[언리얼엔진4(Unreal Engine4)] 메테리얼 에디터(Material Editor)

색상RGB : 단축키 '3'누르고 마우스 왼쪽클릭해서 노드생성 러프니스, 메탈릭등 0과 1사이의 값 : ...

blog.naver.com


크린 포지션

https://mingyu0403.tistory.com/202

 

[Material] Screen Position 노드 알아보기

이 게시글은 움짤이 있습니다. 데이터가 많이 나갈 수도 있습니다. Screen Position 노드 현재 렌더링되고 있는 픽셀의 화면 공간 위치를 출력하는 표현식입니다. 개념 설명은 언리얼 문서가 정확하

mingyu0403.tistory.com

 

Panner 의 Speed 를 이용해서 흐르는? 느낌의 재질 구현

https://mingyu0403.tistory.com/199

 

[Material] Texture Sample, TexCoord, Panner 노드 알아보기

이 게시글은 움짤이 있습니다. 데이터가 많이 나갈 수도 있습니다. 텍스쳐 선택에 실수(?)해서 동그란 모양이 많이 나옵니다. Texture Sample 노드 텍스처에서 색 값을 출력합니다. 이 텍스처는 (노멀

mingyu0403.tistory.com

사용 방법 :

특수한 오브제? 에 이 기능을 넣을 수 있음


디퍼드 랜더링 ( 지연 랜더링 )

1. MT_DepthFade 생성

https://mingyu0403.tistory.com/197

 

[Material] SceneDepth 노드 알아보기

이 게시글은 움짤이 있습니다. 데이터가 많이 나갈 수도 있습니다. SceneDepth 노드 기존의 씬 깊이를 출력하는 표현식이다. PixelDepth 와 비슷하나, PixelDepth 는 현재 그려지고 있는 픽셀의 깊이만 샘

mingyu0403.tistory.com

ScreenPosition 을 이용해서 본인 위치를 가져와서 Scene Depth 을 가져와서 if 문을 작성한다

거리가 10m 넘어가면 사라진다!

사용 방법 :

안개 끼는 상황이나 독? 구름 상황을 연출가능하다 

 

* 만약, 오파시티가 안뜬다면?

블렌드 모드가 Opaque(불투명) 로 되어있으면, Opacity 가 비활성화 되어있다.

Translucent (투명) 으로 변경해주면 Opacity 가 활성화된다.

2. MT_SoftParticle 생성 (?) -> 살짝 다름!

Scene Depth => 기존의 씬 깊이를 출력하는 표현식이다.

SceneDepth 는 어느 위치의 깊이도 샘플링할 수 있다.

https://mingyu0403.tistory.com/195

 

[Material] DepthFade 노드 알아보기

이 게시글은 움짤이 있습니다. 데이터가 많이 나갈 수도 있습니다. DepthFade 노드 반투명 오브젝트와 불투명 오브젝트가 겹칠 때, 부드럽게 이어지게 만들어준다. https://docs.unrealengine.com/ko/RenderingA

mingyu0403.tistory.com

선이 눈에 보여 부자연스러운걸 DepthFade 효과를 통해 자연스럽게 만들어준다.

If 문을 사용하여 텍스쳐에서 추출해온 알파값과 DepthFade 알파값을 비교해서 Opacity 에 값을 넣어준다.


ObjectPositionWS (재질이 적용되는 물체의 월드좌표)

모든 픽셀이 동일한 값이 나온다

ObjectPositionWS 는 오브젝트 바운드의 월드 스페이스 중심 위치를 출력하는 표현식이다. 

WorldPosition (각 픽셀의 월드 좌표)

WorldPosition 표현식은 현재 픽셀의 월드 스페이스 위치를 출력한다.

시각화하려면 출력을 Emissive에 연결하기만 하면 된다.

PixelDepth에서 직교(orthogonal)까지의 거리를 구하는 것과 반대로, 주로 카메라에서 픽셀까지의 방사상(radial) 거리를 구할 때 사용된다.

WorldPosition은 텍스처 좌표로 사용하기 좋으며, 텍스처 좌표를 사용하는 관련 없는 메시들이 서로 가까이 있을 때 매치시킬 수도 있다.


Object Position 를 TransformPosition 을 이용하여 카메라 스페이스로 변환시켜 z값을 구하고,

그 값을 DepthFade 기준치 100 에 CameraDistance 500당 추가 배율을 1씩 적용시킨 값을 FadeDistance로 둔다.

(거리가 멀어질 수록 100이 더 곱해져서 연해진다?)

텍스쳐에서 추출해온 알파값과 DepthFade 의 알파값을 비교하여 if 문에 따라 Opacity 값을 넣어준다.

 

* 깊이 판정을 해서 아예 그리지 않는다

 

사용 방법 :

불투명하여 부자연스러운 것의 알파값을 조절해서 겹치는 부분의 투명도를 조절해 자연스럽게 하는 곳에 다 쓰일 수 있다.


3. MT_SoftParticle 생성

깊이 판정을 아예 하면 안된다! => 땅바닥 밑으로 들어간 것도 그려진다

Pixel Depth

=> 지금 랜더링되고있는 픽셀 본인의 깊이값 

=> 이 노드에는 따로 프로퍼티가 없다.

=> 적용해보면 움짤처럼 카메라와의 거리가 가까우면 0값에 가까운(어두운)색이 된다.

Scene Depth

스크린포지션으로 깊이를 가져온다

https://mingyu0403.tistory.com/197

 

[Material] SceneDepth 노드 알아보기

이 게시글은 움짤이 있습니다. 데이터가 많이 나갈 수도 있습니다. SceneDepth 노드 기존의 씬 깊이를 출력하는 표현식이다. PixelDepth 와 비슷하나, PixelDepth 는 현재 그려지고 있는 픽셀의 깊이만 샘

mingyu0403.tistory.com

 

PixelDepth는 (카메라 <-> 해당 머터리얼을 입힌 오브젝트) 거리

SceneDepth는 (모든 오브젝트) 거리

랜더타겟에 그려진 깊이와 이미 그려져있는 깊이와 비교

 

Pixel Depth - Scene Depth 를 했을 때,

1. 음수가 나왔다 => 알파값을 무조건 1로 가져간다

2. 기준거리가 100인데, 점점 커지다가 100보다 커서 100이 넘어가면..? => 알파값이 점점 0으로 간다


재질의 종류 ( 언리얼에서 크게 3가지로 분류 )

1. Master Material ( 원본 머테리얼 )

변경사항을 하나도 넣지 않은 순수한 머테리얼

2. Material Instance ( 실제로 사용하게 될 재질 )

만들어놓은 머테리얼 노드를 파라미터화해서 외부에서 그 노드 값만 수정하여 머테리얼을 다르게 만들 수 있는 기능

 

=> 머테리얼에 오른쪽마우스 클릭 -> 머테리얼 인스턴스 생성

=> 더이상 수정이 불가능

=> 런타임 도중에 파라미터값을 수정할 수 없다 ( 수정하려면 동적머테리얼을 생성해야한다 )

 

ex) 바뀌지 않을 부분을 Master Material 으로 만들고 바뀔 부분만 변수로 만들어서 살짝 변경?

자동차가 있으면, 빨간색 파란색 초록색 자동차를 선택할 수 있다

https://docs.unrealengine.com/5.0/ko/instanced-materials-in-unreal-engine/

 

인스턴스드 머티리얼

셰이더 리컴파일 없이 자손 머티리얼의 행동이나 외형을 변경할 수 있는 계층구조식 머티리얼 관계입니다.

docs.unrealengine.com

3. Dynamic Material 동적 머테리얼

=> 런타임 중에 계산이 가능한 인스턴스 머테리얼