Unreal Engine/GCC Class (5.5.4)

Unreal Engine 5 배워보기 - 8일차

보별 2025. 3. 27. 13:34

컴퓨터 및 게임 관련 전공인이 아닌 문외한 일반인이 언리얼 엔진을 배우면서 정리한 내용입니다.
그날그날 배웠던 내용을 제가 나중에 보기 위해 정리한 것으로, 지금 당장 보기에 부족한 점이 아주아주 많고 추후에 수정이 될 수도 있습니다.
오탈자 및 잘못 기재된 내용 지적, 부족한 내용 설명은 언제든지 환영입니다.

본글은 언리얼 엔진 5.5.4 버전 영문판을 기준으로 합니다.


----------------------------------------------------------------------------------------------------------------

 

8일차 학습 내용

- UV

   Component Mask

   Floor / Ceil + Divide

   Lerp

   Abs

   Frac

   Floor / Ceil + Lerp

   Panner

   Sin Remapped

   Power

   Fmod (Floating Modulate)

   Clamp

   One Minus

   Sphere Mask

   Sphere Gradient

- Env. Light Mixer

   Exponention Height Fog

   Sky Atmosphere

   Volumetric Cloud

- 밤하늘 만들기

- 지형 제작

 

UV

U와 V는 x, y, z와 같은 축 개념이다.

U는 가로축을 나타내며, 0~1 값을 나타내고 우측으로 갈 수록 값이 증가한다.

V는 세로축을 나타내며, 0~1 값을 나타내고 아래쪽으로 갈 수록 값이 증가한다.

즉, UV에서 (0, 0) 좌표는 좌측 상단(11시 쪽)이 되고, (0.5, 0.5) 정중앙이 된다.

Component Mask

uv 좌표 중 특정 축의 값만을 이용해서 색상 변경하고 싶을 경우 "Component Mask" 를 사용한다.

u를 누른 채로 좌클릭을 해서 "TexCoord" 노드를 생성한 뒤, "Component Mask" 노드를 생성하여 연결한다  

"Component Mask" 노드를 처음 생성하면 왼쪽 "Materail Expression" 쪽에 R과 G가 둘 다 체크돼있는데, 여기서 필요로 하는 좌표의 값을 선택해주면 된다.

u - x - r, v - y -h 서로 이렇게 연동되어있는 값인데, 자신이 u좌표의 값만 필요로 할 시 R에만 체크를 해주면 된다.

u값만 체크해줬기에 위 사진과 같이 가로축 방향으로 색상이 변하는 형태로 출력이 된다.

Floor / Ceil + Divide

"Floor" 와 "Ceil" 은 각각 바닥 함수, 천장 함수라고 하며, 정말 간단하게 표현하면 각각 내림값, 올림값이라고 할 수 있다.

'1.5' 라는 값이 "Floor" 에 들어가면 내림하여 '1' 이라는 값으로 되고, "Ceil" 에 들어가면 올림하여 '2' 라는 값이 된다.

"Floor" 와 "Ceil" 노드를 이용해 아래 그림처럼 모자이크 효과를 줄 수 있다.

노드를 해석하면 각 축의 값에 10을 곱한 뒤 그 값의 내림값을 10으로 나눠준 값을 출력하는 것이다.

예를 들어 '0.15' 라는 수치를 계산한다고 가정해보겠다.

'0.15' 에 10을 곱하면 '1.5' 가 되고, 이 값을 내림하면 '1' 이된다.

그리고 이 내림값인 '1' 을 10으로 나눠져서 최종적으로 '0.1' 의 수치가 나오게 된다.

즉, 0.1 x<0.2 인 모든 x값은 '0.1'로 출력되게 되기에, 가우스 함수와 같은 형태로 나온다.

그리고 u, v축 모든 값을 위의 과정으로 계산하여 출력된 색상값이 위 사진과 같이 표현된다.

"Ceil" 노드를 사용하면 아래 그림과 같이 표현된다.

123132123씰 그림 넣기1123123

Lerp

"Lerp" 는 2가지의 색이나 텍스쳐를 설정한 비율만큼 섞어주는 기능을 한다.

l을 누른 채로 좌클릭을 하거나  "Linear Interpolate" 라고 치면 "Lerp" 노드를 생성할 수 있다.

A, B에 각각의 텍스쳐를 연결하고, 'Alpha' 에서 두 색의 섞는 정도를 조절할 수 있다.

0에 가까울 수록 A 비율이 높아지고, 1에 가까울 수록 B 비율이 높아짐

'Alpha' 에 "Time 노드" 를 sin 이나 cos 함수와 연결하여 입력 시, -1~1 값을 왔다갔다하기에 색이 자동으로 변하게 된다.

"World Position Offset" 도 동일하게 "Lerp" 적용이 가능하다.

"Lerp" 와 "Floor" 값을 같이 이용하면 위 사진처럼 모자이크 강도가 변하는 효과도 줄 수 있다.

Abs

"Abs"는 절댓값을 나타낸다.

sin 이나 cos 함수에 절댓값을 적용하게 되면 기존에 -1~1 이었던 값이 '1 -> 0 -> 1' 이 되기에, 0에 해당하는 A의 등장 시간 비율이 줄어들어 해당 값이 아주 잠깐 반짝하고 보이게 된다.

Frac

"Frac" 은 '슉' 하고 이동하는 느낌을 주고 싶을 때 사용한다.

위 사진과 같이 노드를 연결하면 된다.

"Frac" 은 값이 0~1 값이 '1' 로 되는 순간 '1' 의 값을 없애버리는데, 이는 '1' 일 때 출력되는 값이 바로 사라져버리기 때문에 '슉' 하고 갑자기 사라지는 느낌을 줄 수 있다.

Floor / Ceil + Lerp

"Floor" 와 "Ceil" , "Lerp" 를 같이 사용하면 텍스쳐의 모자이크 강도가 변하는 효과를 볼 수 있다.

위 BP는 모자이크 강도 5*5 와 20*20 사이를 왔다갔다하는 BP이다.

위 BP는 uv의 좌표값을 텍스쳐에 적용시켜서 200*200 픽셀 크기와  20*20 픽셀 크기의 도트를 왔다갔다하는 BP이다. 

"TexCood" 노드와 텍스쳐 사이에 있는 곱해주는 값과 나눠주는 값을 높일수록 그림이 선명해지고, 반대일 경우에는 자글자글한 도트 느낌을 줄 수 있다.

Panner

"Panner" 는 텍스쳐를 지정된 방향과 속력으로 움직이게 하는 기능을 한다.

나무가 살랑살랑 흔들리는 효과는 마테리얼에 "Panner" 효과를 준 것이다.

p를 누른 채로 좌클릭을 하면 "Panner" 노드를 생성할 수 있는데, 'Speed' 에서 각각 x, y축으로 이동시키는 속력값을 줄 수 있다.

텍스쳐에 흰색인 부분이 있다면 흰색에 색을 입힐 수도 있다.

흰색의 값은 '1' 이기에, 색상 벡터의 값을 곱하면 해당 색상의 값이 그대로 나와서 적용할 수 있는 것이다.

그리고 텍스쳐에 검은색인 부분 있다면 "Opacity Mask" 로 검은색 부분을 제거해줄 수 있다.

*위 그림에서 r값만 연결해준 이유는 rgb, r, g, b 값이 적용된 그림이 모두 같아서, 어느 값을 넣든 결과는 동일하게 나오기 때문

Sin Remapped

"Sin Remapped" 는 2가지 값을 주고 그 값 사이를 왔다갔다하는 만큼의 수치를 텍스쳐에 주는 효과이다.

수치를 왔다갔다하는 점이 "Lerp" 와 비슷하다.

우선은 "Panner" 적용된 마테리얼을 하나 제작해준다.

위의 BP는 불모양의 텍스쳐에 "Panner" 효과를 줘서 계속 이동시키면서, "Emissive Color" 에도 연결하여 좀 더 밝게 만들어 용암같은 효과를 준 것이다.

"Sin Remapped" 노드를 생성하고 위와 같이 연결해주고, "Sin Remapped" 를 위의 "Multiply" 의 'B' 에 연결해주면 된다.

"Sin Remapped"에 입력된 'Value1' 의 값인 0.2, 'Value2' 의 값인 1 사이를 왔다갔다 하는 값 (0.2~1) 을 "Multiply" 에 줌으로써, "Base Color" 에 연결된 텍스쳐에는 속력 변화를, "Emissive Color" 에 연결된 텍스쳐에는 밝기 변화를 줄 수 있다.

* "Sin Remapped" 의 V3는 벡터값을 가리킴 (x, y, z)

"Sin Remapped" 노드에서 위 "Multiply" 노드에 연결하면 선이 2가닥 나가서 연결선이 더러워보이는데 간결화 해줄 수 있다.

"Sin Remapped" 의 핀을 끌어다가 'name' 을 검색하면 "Add Named Reroute Declaration Node" 가 뜨는데, 해당 노드를 만들면 위 사진처럼 초록색 노드가 끝에 연결된다.

이 초록색 노드를 복사하여 "Multiply" 노드들 사이에 두고, "Multiply" 노드에 각각 연결해주면 한층 더 깔끔하게 보인다.

Power

텍스쳐의 변화를 적용하면서 보기 위해 "Material Instance" 를 만들어주는게 좋다.

우선은 위 사진처럼 2가지의 텍스쳐를 가져와서 각각의 'D' 형식과 'N' 형식의 텍스쳐를 "Lerp" 에 연결하여 효과를 주고, 'D' 형식은 'Base Color' 에 'N' 형식은 'Emissive Color' 에 연결해준다.

그리고 "Lerp" 의 'Alpha' 값을 parameter로 승격시켜준다.

텍스쳐의 변화를 보면서 적용시키기 위해 "Material Instance" 를 사용하기 위해서 저런 식으로 만들었다.

위에서 만든 마테리얼을 우클릭하여 "Material Instance" 를 만들어준다.

"Material Instance" 에서 'Alpha' 값을 0~1로 변경해주면서 바로바로 적용되어 빠르게 확인이 가능하다.

파워 그림 + 설명 빠짐

Fmod (Floating Modulate)

"Fmod" a를 b로 나눈 뒤 그 나머지 값을 반환 는 주로 줄무늬를 줄 때 사용한다.

"Mask" 에 r값만 사용하게 설정하고, 위 사진과 같이 BP를 만들어준다.

"Fmod" a를 b로 나눈 뒤 그 나머지 값을 반환

r값에 입력한 'Value' 의 값을 곱해주고 내림한 뒤 "Fmod" 처리를 하는 BP이다.

"Fmod" 는 A에 입력된 값을 B로 나눈 뒤, 그 나머지 값을 반환하는 역할을 한다.

A에 입력된 정수값이 홀수일 경우 "Fmod" 를 거치면 '1' 이 나오고, 짝수일 경우 '0' 가 나오는데, 0과 1은 각각 색상 값이 검은색과 흰색을 나타내기에, 검은색, 흰색이 번갈아가며 나오는 줄무늬 효과를 줄 수 있다.

위의 마테리얼도 "Material Instance" 로 생성하여 변화되는 걸 바로바로 확인해보는게 좋다.

"Material Instance" 의 'Value' 값을 조정해보면 'Value' 값 만큼 줄무늬가 생기는 걸 확인할 수 있다.

*노드 선택 후, 마우스 우클릭을 하여 "Start Previewing Model" 를 누르면 진행단계에 따른 결괏값을 미리 보는게 가능

 

Clamp

"Clamp" 는 원하는 범위의 값을 잘라내어 해당 값의 부분만 적용시키는 역할을 한다.

텍스쳐에 연결된 "Clamp" 노드를 보면 0.8~0.9 값만 적용시키는데, 그렇기에 미리보기의 텍스쳐 색상이 하얗게 보인다.

흰색은 값이 '1' 인데, 적용된 값이 '1' 에 가깝기 때문이다.

"Clamp" 는 텍스쳐나 색상뿐만 아니라 "World Position Offset" 에도 적용 가능하다.

"World Position Offset" 에 연결된 벡터 노드를 보면, y축으로 0~100 값만큼 이동하면서 z축으로는 100~0 값만큼 이동시키는 명령이다. 여기서 "Clamp" 노드는 50~100 값만 적용시키는데, 이렇게 되면 y, z축 둘다 50~100 값만큼만 움직이기에 움직이는 범위가 줄어들게 된다.

하지만 0~100 값을 주는 명령은 계속 있기에, 정해진 50~100 값을 벗어난 0~50 값의 시간동안은 값의 변화가 없는 것처럼 가만히 있게된다.

One Minus

"One Minus" 는 텍스쳐나 색상을 반전시키는 기능이다.

위 사진을 보면 입력한 텍스쳐와 출력된 텍스쳐를 보면 서로 반전돼있는 걸 확인할 수 있다.

"One Minus" 단어 그대로 1에서 해당 값을 빼는 것인데, 1-1=0, 1-0=1 이런 식으로 결과가 나오게되어 값이 반전된다.

위 사진은 시간에 따라 반전시키는 BP를 작성한 것이다.

Sphere Mask

"Sphere Mask" 는 단어 그대로 원형의 Mask를 씌워주는 효과이다.

BP는 위 사진과 같이 작성하면 된다.

"Lerp" 노드 A에 연결된 텍스쳐가 바탕이 되는 텍스쳐이고, B에 연결된 텍스쳐가 Mask가 되는 텍스쳐이다.

"Sphere Mask" 의 'Radius' 는 Mask의 반경을 나타내고 'Hardness' 는 Mask의 선명도를 나타낸다.

'Hardness' 값이 커지면 Mask의 경계가 선명해지고, 작으면 경계가 흐려진다.

"Sphere Mask" 에 연결된 "Absolute World Position" 은 현재 공간의 월드 포지션 값을 가져오는 역할이고, "Actor Position" 은 마테리얼이 적용된 액터의 포지션 값을 가져오는 역할을 한다.

"Sphere Mask" 의 A값은 구멍을 뚫을 위치를, B값은 구멍을 뚫을 위치를 마테리얼이 적용된 액터에서 얼마만큼 이동 시키는지를 정해준다.

Sphere Gradient

"Sphere Gradient" 는 "Sphere Mask" 와 비슷하다.

"Sphere Gradient" 에는 Mask를 적용시킬 위치가 자체적으로 코딩되어 있기에, "Absolute World Position""Actor Position" 이 불필요하다.

 


"Sphere Gradient" 의 "Radius" 에서 Mask의 반경을 설정할 수 있고, "Center Position" 에서 Mask의 위치 조정이 가능하다.

"Center Position" 에 연결한 핀이 Mask 원심의 u, v값이다.

위 사진처럼 0.5, 0.5를 입력하면 u, v값이 각각 0.5, 0.5가 되어 정중앙에 원심이 위치한 Mask를 적용시킬 수 있다.

 

Env. Light Mixer

"Directional Light" 와 "Sky Light" 는 3일차 "Light" 에  있으니 생략하겠다.

"Project Settings" 에서 'exposure' 을 검색하면 "Auto Exposue" 이라는 설정이 뜨는데, 해당 설정을 꺼주면 "Postprocess" 를 추가하지 않고도 빛의 "Intensity" 조절만으로 레벨의 전체적인 밝기를 변경할 수 있다.

Exponention Height Fog

"Exponention Height Fog" 는 단어 그대로 안개를 표현해준다.

"Density" 는 안개 짙기 정도를 조절하는 수치이고, "Falloff" 는 높이에 따른 안개의 짙기 정도의 변화를 조절하는 수치이며, "Start Distance" 는 안개가 시작되는 플레이어로부터 거리를 나타내는 수치이다.

Sky Atmosphere

"Sky Atmosphere" 는 단어 그대로 대기를 나타낸다.

기본 설정이 지구의 대기와 거의 비슷하게 설정돼있으므로, 게임의 배경이 지구일 경우 설정을 건드릴 필요가 없다.

"Ground Radius" 는 현재 레벨의 배경이 되는 행성의 반지름을 조절하는 수치이다.

그리고 "Rayreigh" 대기의 가스양, "Mie" 는 대기 중의 먼지나 연기 등 잡다한 것, "Absorption" 은 대기의 오존양을 나타내는 수치이고, 세 값은 모두 태양빛의 산란에 영향을 주기 때문에 하늘의 색을 변화시키는데에 쓰인다.

Volumetric Cloud

"Volumetric Cloud" 단어 그대로 구름을 표현해준다.

게임에 기본적으로 보이는 구름은 구름 텍스쳐가 적용돼있다.

구름의 텍스쳐 또한 "Material Instance" 로 적용돼있는데, 여기서 구름에 관한 설정들을 만질 수 있다.

"Cloud Layout" 에서 "Layout Cloud Type" 은 각 구름 별 구름양을 조절, "Layout Cloud Global Scale" 은 설정된 구름 텍스쳐의 크기를 조절, "Layout Cloud Per Type Scale" 은 각 구름 별 크기를 조절, "Layout Windcontrols" 는 바람 세기 조절로 구름의 움직임을 조절, "Cloud Global Coverage" 는 전체적인 구름의 양을 조절할 수 있다.

"Cloud Shape" 에서 "Noise Strength Noise 1 구름 산개도 조절하는데, 수치가 낮아지면 구름이 뭉치고 높아지면 구름이 흩어진다. "Cloud Albedocolor" 는 구름의 색상을 조정할 수 있다.

"Storm" 에서 "Stormclouds" 는 구름을 먹구름처럼 보이게 만들어 줄 수 있고, "Multiscatter" 는 빛의 산란도를 조절하여 구름의 색상에 변화를 줄 수 있다.

 

밤하늘 만들기

"Content Drawer" 의 "Engine" 폴더에서 "BP" 를 검색하면 "BP_Sky_Sphere" 가 뜨는데, 해당 BP를 임의의 위치에 복사 후 "BP_Sky_Night" 로 변경해준다.

"BP_Sky_Night" 를 레벨에 불러오고, 기존에 있던 "Sky_Sphere" 을 지워준다.

"Directional Light" 의 "Intensity" 를 '0' 혹은 '0.2' 로 바꿔주고, 회전값을 270, 90, 180으로 설정해준다.

바뀐 설정의 "Directional Light" 를 복사하여, 하나는 뒤에 "_Sun" ,다른 하나는 "_Moon" 을 붙여준다.

그리고 "Moon" 의 회전값을 270, -90, 180으로 바꿔주고, "Sun" 의 "Cast Shadow" 를 꺼준다.

태양이 땅 아래에 있는데, 아래에 있음에도 레벨에 생성되는 그림자에 영향 끼치기 때문에 꺼주는 것이다.

"Skyatmosphere" 의 "Rayreigh Scattering Scale" 을 '0' 으로 바꿔준다.

마지막으로 개인의 취향에 맞게 "Exponention Height Fog" 의 z축을 조금 높이 높여줌으로써 밤같은 느낌을 살릴 수 있다.


그러면 아래 사진과 같은 밤하늘이 완성된다.

"BP_ Skynight" 를 클릭하면 몇 가지 설정을 변경할 수 있다.

"Star Brightness" 는 별의 밝기를 조절, "Cloud Opacity" 는 구름의 양을 조절할 수 있다.

 

지형 제작

아무것도 설정하지 않은 새로운 레벨을 제작해준 뒤, "Env. Light Mixer" 의 빛 5종류를 모두 불러오고 하나의 폴더로 묶어준다.

그리고 좌측 상단에서 "Landscape Mode" 로 바꿔주면 위 사진과 같이 평지 같은 게 생긴다.

"Landscape" 의 "Manage" 에서 "Landscape" 의 대략적인 크기를 조정해줄 수있다.

"Section Size" 위 사진에 보이는 밝은 사각형 크기를 나타낸다. 

"Number of Components" 위 사진에서 보이는 가장 큰 사각형 갯수를 나타낸다.

그리고 "Overall Resolution" 은 위 사진에서 보이는 가장 작은 사각형의 갯수를 나타낸다.

*shift+1: "Selection Mode" (액터 배치, 수정 등이 가능한 일반 모드) / shift+2: "Landscape Mode"

"Layer" 에서 4개의 "Layer" 를 생성해준 뒤, "Layer" 의 '+' 를 눌러 "Widget-Blended Layer(Normal)" 을 눌러준다.

그리고 "Create Layers from Assigned Materials" 를 눌러서 다운 받은 에셋의 "Landscape" 에 적용시킬 수 있는 "Material" 들을 "Layer" 에 불러올 수 있다.

불러온 마테리얼 우클리하고 "Fill Layer" 를 눌러주면 "Landscape" 가 해당 "Layer" 의 마테리얼로 덮어씌워진다.

"Sculp" 탭에서는 본격적으로 지형을 제작할 수 있다.

좌클릭으로 지형을 올리고, shift를 누른 채로 좌클릭을 해서 고도를 내린다.

"Tool Strength" 는 지형 변화의 강도를 조절하고, "Brush Type" 은 지형 변화 브러시를 변환시킬 수 있다.

좌: falloff 0.2 // 우: falloff 0.5

"Brush Settings" 의 "Falloff" 는 중심으로부터 외곽까지 경사도를 조절할 수 있는데, 추천하는 수치는 0.2 정도이다.

"Erase" 는 지형의 높이를 초기화시킬 때 사용하고, "Smooth" 는 지형을 조금 부드럽게 다듬어주고, "Flatten" 은 처음 선택한 위치 기준으로 높이를 맞춰준다.

"Ramp" 는 경사를 제작할 때 사용하는데, 부자연스럽게 생성되기에 적용 후에 부드럽게 잘 다듬어 줘야한다.

"Erosion" 은 시간이 지남에 다라 지형이 침식되는 걸 표현해주고, "Hydro" 는 물에 의한 침식을 표현해준다.

"Noise" 는 자체적으로 "Noise" 효과를 줄 수 있다.

위 사진을 보면 잔디 사이에 돌이 노출되어 있는데, 경사도에 따라서 마테리얼이 계산하여 돌을 자연스럽게 노출시켜준다.

"Paint" 탭의 "Erase", "Smooth", "Flatten" 등의 설정은 "Sculp" 와 작동방식은 비슷하고, "Sculp" 와는 다르게 높이가 아닌 주위의 마테리얼의 색을 기준으로 해서 조절해준다.

"Foliage Mode" 의 "Paint" 에서는 풀 같은 텍스쳐를 지형에 배치할 수 있고, shift를 누른 채로 좌클릭을 하여 배치한 마테리얼들을 지울 수 있다.

"Filter" 를 통해 자기가 원하는 오브젝트 위에만 텍스쳐를 생성해줄 수 있다. 체크된 부분 위의 오브젝트에만 텍스쳐를 생성한다.

"Density/1Kuu" 에서는 배치할 마테리얼의 빽빽함을 조정해줄 수 있고, "Z Offset" 은 텍스쳐가 생성되는 z축 위치를 지정해줄 수 있다.

"Allign to normal" 은 경사의 각도에 맞춰 텍스쳐를 기울여 생성해주는 것이고, 체크 해제 시 무조건 z축과 평행하게 생성된다.

주로 크기가 큰 나무를 가파른 언덕에 생성해줄 때 체크를 해제해서 배치한다.

"Random Yaw" 는 텍스쳐에 무작위 z축 움직임을 줄 것인지를 결정해주고, "Ground Slope Angel" 은 입력한 경사의 각도의 범위 내에서 텍스쳐가 생성되지 않게 한다.

"Collision Presets Blockall" 은 텍스쳐에 충돌 물리를 적용할 것인지의 여부를 결정해준다.

풀이나 자갈 같은 작은 텍스쳐에는 적용하지 않고, 바위나 나무 같이 큰 텍스쳐에는 적용시켜준다.

"Foliage" 작업을 할 때, 텍스쳐끼리 겹치는 경우가 있는데, 이건 PCG 반경을 설정하여 일정 범위 내에 텍스쳐가 생성되는 것을 막아줌으로써 메시끼리 겹치지 않게 해줄 수 있다