Programming/UE5

[Niagara] 대충 정리 02 - 머테리얼 깎기 (Material)

Dorasima 2023. 7. 20. 20:47

0. 언리얼 머테리얼... 공부를 그리 많이 하지 않았지만, 미친 기능같다.

- 이전 글에 올렸던 Udemy 강의와, unreal doc을 보면서 대충 정리하는글

- 나중에 파편적인 기억만 남아도 금방 쓸 수 있게 작성해야겠다.

- 사용하기 어려운 shader 들을, 노드(그래프?)로 편하게 사용할 수 있게 만든 기능...인듯?

요거는 opengl 튜토리얼 하다 포기한 흔적 ㅋㅋㅋㅋ

(일단 나는 카메라 깎는 것 부터 엄청 어려웠다. 하물며 조명이라던가 뭔가 그럴싸한 shader를 깎는 건? ㄹㅇㅋㅋ)

(그냥 언리얼은 조명 놓고, 물체 배치하면 알아서 그냥 다 해주니깐... 마법의 주문만 외우면 되는 너낌)

-  shader는 화면에 찍힐 점이 어떨지를 결정하는... 로직(?)인데, 머테리얼은 그것보다 훨씬 쓰기 쉬우면서 훨씬 강력하고... 아무튼 훨씬 진보했다. 얼만큼인지는 내 지식이 없기에 피상적인 느낌만 전달 한다 ㅋㅋㅋㅋㅋㅋㅋ

 

1. 나이아가라에 쓰는 셰이딩 모델 (Shading Model) 그리고 블랜드 모드 (Blend Mode)

(약간 shader의 main 느낌이 아닐까..)

- 설명은 여기에 다 있다. 언리얼 엔진의 셰이딩 모델 | 언리얼 엔진 5.0 문서 (unrealengine.com)

 

셰이딩 모델

이 문서는 머티리얼 셰이딩 모델 프로퍼티 옵션을 자세히 설명합니다.

docs.unrealengine.com

- 이건 블랜드 모드 머티리얼 블렌드 모드 | 언리얼 엔진 문서 (unrealengine.com)

 

머티리얼 블렌드 모드

머티리얼 블렌드 모드와 그것이 머티리얼의 렌더링에 어떻게 영향을 끼치는가에 대한 개요입니다.

docs.unrealengine.com

- 우리가 쓸 셰이딩 모델은 Unlit, 조명에 의한 추가적인 계산(빛의 방향 / 색 / 세기 등)이 없는 친구

- 블랜드 모드는? 이것저것 골라서 쓴다.

- opaque - 그냥 냅다 불투명

- masked - Opacity Mask로 구녕 뚫기

- additive - 그냥 냅다 색을 픽셀위에 얼마나 색을 더할지

- translucent - opacity로 반투명 정도를 계산 등등

(그냥 Unreal Doc을 보면 바로 이해가 된다.)

 

2. 나이아가라 렌더러 (Renderer) 종류에 맞춰서 머테리얼 깎기

- 주로 Sprite Render나 Mesh Render를 쓸 것이다. (+ Ribbon  Renderer?)

- Sprite Renderer 는 Material을 Plane에 쏘는것 / Mesh Renderer는 진짜 Mesh에 Material을 얹어서 쏘는 것

 

(강의 내용을 예로 들면)

2_1. Sprite Renderer

- 특정한 Texture를 사용하는 머테리얼 일 때

좌 : 그냥 Material을 Default UV로 Sprite 하나에 넣어버리는 것  / 우 : 그게 아니면 Particle Update 색션에서 Sprite Life Cycle에 따라 Material을 잘라서 Anmation을 시켜주는 Sub UVAnimation 모듈
여기서 머테리얼에 사용한 Texture의 서브 이미지 크기를 지정하고, 저 모듈을 넣으면 된다.

- 그냥 특수효과용으로 엔진에서 제공하는 DefaultSpriteMaterial을 사용할 때

Unlit - Additive - Two faces 이다. SphereMask 라는 머테리얼 함수로 Plane에 쐈을 떄 Circle로 보인다.

2_2. Mesh Renderer

- Static Mesh를 쏘는 Renderer이고 Material도 그에 맞춰서 깎아야 한다.

- 물론 모델링 사이트에서 Material도 다 만들어서 오면 상관 없다.

요로콤 Blender 같은 모델링 프로그램에서 Mesh 만들고, Unreal에서 어떤식으로 Material이 적용이 될지 UV Editing 을 한다.
그거에 맞춰서 Material을 깎는다. 보면 Linear Gradient 라는 Material Function을 이용해서 칼날 부분(?)에서 그라데이션을 주었다.

3. 나이아가라 System에서 머테리얼 Output 조정 하기

- Material의 표현식 중에서 Particle Expression이 있는데, Particle System (Niargara)의 Emitter에 쓰이는 Material에서 사용한다. (문장 구성이 좀...)

- 여기에 다 있다. 쓰는 방법도... Particle 표현식 | 언리얼 엔진 5.1 문서 (unrealengine.com)

 

Particle 표현식

파티클 시스템에서 이미터에 적용할 머티리얼을 만드는 데 사용되는 표현식입니다.

docs.unrealengine.com

- 강의 에서는 Particle Color 와 Dynamic Parameter를 사용했다.

요로콤 Dynamic Paramter와 Paritlce Color 표현식을 사용하여 노드 연결을 해주면??

- 그렇게 하면?

요로콤 Emitter 의 특정 모듈에서 Sprite를 나타내는 Material(혹은 Material Instance)에 해당 parameter를 넘겨줄 수 있다.

- 이렇게 System 상 Emitter에서 값을 조절 하여 Material의 내부 로직대로 Output을 바꿀 수 있다.

 

4. Unreal이 제공하는 쓸만한 머테리얼 함수(Function)

- 다양한 시각적 효과를 주기위해 언리얼은 머테리얼에서 사용할 수 있는 많은 함수를 제공한다.

뭐가 엄청 많다.

 

- 그중에서 강의에서 배운것들을 정리해서 대충 적어 놓겠다.

4_1. 시각적 수정

- CustomRotator : UV를 냅다 돌리는 기능. 회전 중심과 회전량을 파라미터로 갖는다.

클릭하면 크게 보입니다.

- CheapContrast : 대비를 증폭 시켜주는 진구. CheapContrast_RGB 도 있다.

- Panner : UV 좌표를 주어진 값에 의한 등속도로 움직여주는 친구

 

 

4_2. 편의성

- RemapValueRangeNormalized : 스케일러 값(Input)을, Low와 High에 의거하여 0 ~ 1 사이로 정규화 시켜주는 친구.

- Saturate : 이 친구는 0과 1 사이의 값을 남기고, 나머지 벗어나는 값은 0과 1로 만들어버리는 친구.

- makeFloat2, Append / ComponentMask  : 여러 개의 Scalar를 Vector로 합치는 친구 / Vector에서 성분을 고르는 친구.

- TexCoord : UV 좌표 자체를 나타내는 친구. 

R과 G로 보면, 좌측 상단이 (0,0) 우측 하단이 (1,1)을 나타내는 걸 알 수 있다.

- Lerp : 두 값을 알파로 선형보간 하는거다... 딱 봐도 엄청 많이 쓰일 것 같다.

- SwitchParameter : Static 값을 가지는 Switch나, bool parameter 대신에 쓰는 놈이다.

- TransformVector : 기본 Rendering 계산은 접평면(?) 접공간(?)에서 한다. Default가 Tangent space 이다. 그 좌표계를 알아서 예쁘게 변환 해주는 기능이다.

- Sine_Remapped : 입력으로 remap할 위상과 값 2개를 받는다.

4_3. 그냥 언리얼이 제공하는 요상하고 강렬한 함수

- DistanceToNearstSurface : Global Level 단에서 가장 가까운 점을 잡아주는 기능이다.

- Fresnel : 카메라 정면이 빛을 적게 반사하고, 카메라와 이루는 각이 클 수록 빛을 많이 반사하게 하는 기능이다.

fresnel로 핑크 색이, 카메라와 각을 많이 이루는 곳에 (보이는 것을 원이라고 했을 때의 외곽) 많이 분포 되어있다.

- RadialGradientExponential : Gradient 친구 중 한명이다. UV에서 원형으로 뻣어나가는 값을 Exponential 하게 생성해주는 친구이다. 입력으로 UV, 중심점, 반경, 밀도, invert checker를 받는다.

- DepthFade : Translucent 친구와 불투명한 오브젝트가 겹칠때 저렇게 자연스럽게 뭉게주는 역할을 한다.

- DiamondGradient : 아마 얘도, gradient 친구들 중 하나일 것이다. falloff 값에 따라, 사각형에서 다이아몬드 모양으로 줄어들면서 값을 생성하는 친구이다.

- GenerateBand : 얘도 뭔가를 생성해주는 친구이다. Band (띠)를 생성해주는 친구이다.

입력값은 귀찮으니 직접 읽어보아라. 쉽다.

- DitherTemporalAA : 약간 점묘법을 이용할 수 있게 해주는 노드이다. 경계를 예쁘게 해주거나, 뭔가가 사라질때 자연스럽게(?) 해주는데에 쓰인다.

잘 안보이지만... 뭔가 매우 촘촘하게 점이 찍혀있다.

- Noise : 찐으로 noise를 생성해준다. 신기하다...

 

5. 그 이외 언리얼이 제공하는 머테리얼과 함께 사용하는 기능

- RenderTarget : Material로 Texture를 만들 수 있게 해주는 친구이다. 

 

 

해상도와, 포맷을 잘 설정하고

블루프린트에서 Material과 Rendertarget을 설정하고, 그 RenderTarget에서 Texture를 뽑아내면 된다.