컴퓨터 및 게임 관련 전공인이 아닌 문외한 일반인이 언리얼 엔진을 배우면서 정리한 내용입니다.
그날그날 배웠던 내용을 제가 나중에 보기 위해 정리한 것으로, 지금 당장 보기에 부족한 점이 아주아주 많고 추후에 수정이 될 수도 있습니다.
오탈자 및 잘못 기재된 내용 지적, 부족한 내용 설명은 언제든지 환영입니다.
본글은 언리얼 엔진 5.5.4 버전 영문판을 기준으로 합니다.
----------------------------------------------------------------------------------------------------------------
7일차 학습 내용
- Material
색 변경
텍스쳐 삽입
Metallic
Specular
Roughness
Emissive Color
Opacity
Normal
World Position Offset
Texture Opacity
Opacity Mask
Additive
Modulate
Two Slided
- Master Material
- Material Instance
- BP 응용
무작위로 액터의 색상을 변경해주는 BP
들어갔다 나오면 액터 생성이 중단되는 BP
들어갔다 나오면 액터 생성이 중단되는 BP
매초 무작위로 액터의 색상을 변경해주는 BP
다양한 parameter를 매초마다 변화시키는 BP
- For Loop
- Is Valid
Material

"Material" 을 새로 생성하고. 생성된 "Material" 파일을 더블클릭하면 위와 같은 화면이 나온다.
위 화면 중앙에 있는 노드를 "메인노드" 라고 하는데, 해당 노드는 모든 값을 받은 뒤 조합하여 최종적으로 메터리얼에 정보를 넘겨주는 역할을 한다.
메인노드를 클릭한 상태로 좌측의 "details" 을 보면 다양한 설정이 있다.
"Material Domain" 은 해당 마테리얼이 사용되는 용도, "Blend Mode" 에서는 해당 메터리얼이 다른 오브젝트와 겹쳤을 때 어떻게 작용할 지, "Opaque" 에서는 투명도 여부, "Shading Model" 에서는 빛의 영향을 받을 지를 정할 수 있다.
unlit 빛의 영향 x default light 빛의 영향
색 변경

메인노드에서 "Base Color" 옆의 색상을 클릭하여 변경이 가능하지만, 이 방법보다는 옆에 노드를 생성하여 r, g, b 값을 각각 주는 노드를 "Base Color" 핀에 연결하여 색상을 변경하는 방식을 주로 사용한다.

1을 누르고 좌클릭을 하면 0~1의 x값만 입력 가능한 노드가 생성된다.
0을 입력하면 검정색이 출력되고 1을 입력하면 하얀색이 출력되는데, 해당 노드는 무채색의 색상을 부여할 때 사용한다.

2를 누르고 좌클릭을 하면 0~1의 x, y값이 입력 가능한 노드, 3을 누르고 좌클릭을 하면 0~1의 x, y, z값이 입력 가능한 노드가 생성된다.
x, y 값만 입력 가능한 노드는 각 x, y 값이 색상에서 r, g값에 해당하고, x, y, z값이 입력 가능한 노드의 경우에는 x, y, z값이 각각 r, g, b 값에 해당한다.
그리고 x, y, z 값에 수치를 입력하면 해당 r, g, b 값이 적용된 색상으로 바뀌게 된다.
텍스쳐 삽입

좌측 "details" 탭에서 텍스쳐 추가가 가능하다.
언리얼 내 기본으로 들어있는 텍스쳐 파일들을 보면 파일 뒤에 'D', 'M', 'N' 이라는 글자가 붙여져 있는데, 이는 각 텍스쳐의 용도가 다름을 의미한다.
이 중에서 'D' 는 "Diffuse" 를 의미하는 단어로, 끝에 D가 붙어있는 텍스쳐 파일 중 하나를 불러오면 된다.

텍스쳐를 추가하면 위 사진처럼 새로운 노드가 생성되고, 해당 노드의 RGB 값을 "Base Color" 핀에 연결하면 텍스쳐가 적용된다.
Metallic

x값만 입력이 가능한 노드를 생성하고 이를 "Metallic" 핀에 연결하면 마테리얼의 금속성을 조절 가능하다.
0에 가까워질수록 비금속이 두드러지고, 1에 가까워질수록 금속성이 두드러진다.
Specular

x값만 입력이 가능한 노드를 생성하고 이를 "Specular" 핀에 연결하면 마테리얼의 빛 반사 정도의 조절이 가능하다.
Roughness

x값만 입력이 가능한 노드를 생성하고 이를 "Roughness" 핀에 연결하면 마테리얼 표면의 거칠기의 조절이 가능하다.
0에 가까워질수록 반사가 잘 될 정도로 표면이 매끄러워지고, 1에 가까워질수록 반사가 안 될 정도로 표면이 거칠어진다.
Metallic, Specular, Roughness 모두 단독으로 사용하기보다는 셋 모두 조합해서 사용하는 편이다.
Emissive Color

x, y, z값이 입력 가능한 노드를 생성 후에 Emissive Color 핀에 이어주게 되면, 해당 마테리얼의 표면이 지정한 색상으로 빛을 발하게 된다.
위 사진을 보면 빛을 발하고 있는 상태이지만, 빛이 나는 것처럼 보이지는 않는다.

"Shading Model" 을 "Unlit" 으로 설정하여 빛의 영향을 받지 않은 원래의 색이 나오도록 하고, 노드 사이에 곱셈식을 연결해줘서 빛의 세기를 증폭시키면 좀 더 색상이 뚜렷해진다.
*언리얼 엔진에서 사용하는 메터리얼은 PBR 방식; 표면이 현실의 빛의 적용 방식을 모방
Opacity
"Opacity" 투명도를 의미한다.
우선은 투명도를 체감하기 위해 마테리얼에 텍스쳐를 입혀준다.
처음에는 메인노드의 "Opacity" 가 활성화 되어있지 않은데, "Blend Mode" 에서 "Translucent" 로 바꿔주면 아래 사진처럼 "Opacity" 가 활성화된다.


"Opacity" 가 활성화 되면서 일부 다른 것들은 비활성화 되는데, 이는 비활성화된 수치가 투명 상태에서는 필요가 없기 때문이다.
물론 강제로 켜줄 수는 있다.
x값만 입력이 가능한 노드를 생성하고 이를 "Opacity" 핀에 연결하면 마테리얼의 투명도를 조절 가능하다.
0에 가까워질수록 투명해지고, 1에 가까워질수록 불투명해진다.
Normal

텍스쳐를 불러와 적용한 다음에 우선 사진 속 예시 도형을 구가 아닌 큐브로 바꿔준다.
구일 때는 잘 보이지 않던 밋밋함이 큐브로 바꾸게되면 두드러진다.

T를 누르고 좌클릭을 하면 텍스쳐 삽입창이 뜨는데, 여기에 위에서 삽입한 'D' 로 끝나는 텍스쳐 파일과 동명인 'N' 으로 끝나는 텍츠쳐를 불러와 "Normal" 에 연결하면 굴곡이 져있는 것처럼 보이는 착시효과를 줄 수 있다.

"Base Color" 에 일반색을 주면 "Normal" 에 연결된 텍츠쳐의 굴곡 착시의 확인이 가능하다.
World Position Offset
"World Position Offset" 은 각 x, y, z축에 값을 주면 해당 값을 준 만큼 마테리얼을 이동시켜주는 역할을 한다.




마테리얼이 적용된 액터의 위치가 현재 위치가 아닌 다른 위치에 있는 것처럼 보이는 착시 효과를 준다.

'Wireframe' 으로 보면 액터는 이동하지 않고 제자리에 있는 것을 확인할 수 있다.

x, y, z값이 입력 가능한 노드를 생성하고 이동시키고 싶은 방향의 축에 값을 준 뒤, 위 사진처럼 sin 함수를 곱해주면 sin 함수의 값에 따라 움직이는 듯한 착시를 줄 수 있다.
*ctrl + d: 그 자리에 바로 복사해서 붙여넣기
*https://mebiusbox.github.io/contents/EffectTextureMaker/
간단한 texture를 제작 가능한 사이트
Texture Opacity

텍스쳐를 불러와 메인노드의 "Opacity" 에 연결하면, 해당 텍스쳐의 색상(r,g,b)에 따른 0~1 값이 그대로 투명도의 값으로 바뀌게 된다.
즉, r, g, b의 값이 0 일 경우 투명해지고, 1 일 경우엔 불투명해지며, 그 사이의 값일 경우엔 반투명해진다.

위 "Texture Opacity" 설정을 적용시키면 위와 같은 형태로 나오게 된다.

텍스쳐를 더블클릭하면 해당 텍스쳐의 r, g, b, a값이 따로따로 나뉘어진 형태의 그림으로 볼 수 있다.

a값만 나타내는 그림이 있다면 a값만 활성화 시켜서 "Texture Opacity" 를 적용하는게 좋다.
Opacity Mask
위에서 해본 "Texture Opacity" 와 똑같은 원리로 동작하고, 비슷한 방법으로 적용할 수 있다.
비슷하다고 한 이유는 적용법에서 약간 차이점이 있기 때문이다.

우선 "Blend Mode" 를 "Masked" 로 바꿔줘야한다.

그리고 "Masked" 로 변경 시, "Opacity" 핀이 비활성화 되고 "Opacity Mask" 핀이 활성화되는데, 이 때 텍스쳐를 "Opacity Mask" 핀에 연결해줘야한다.

위 "Opacity Mask" 설정을 적용시키면 위와 같은 형태로 나오게 된다.
"Texture Opacity" 와 다른 차이점이 하나 더 있는데, "Masked" 설정은 투명도가 0 혹은 1, 2가지 값 밖에 존재하지 않는다는 것이다.
만약 색상값 수치가 0.5 일 경우 반올림해서 1 로 적용하고, 색상값 수치가 0.4 일 경우 반올림해서 0 으로 적용한다.

그래서 "Texture Opacity" 에 적용했던 텍스쳐를 "Opacity Mask" 에도 똑같이 적용시키면 아래와 같은 형태로 나오게 된다.

즉, "Texture Opacity" 는 그라데이션 효과를 줄 수 있지만, "Opacity Mask" 는 그라데이션 없이 명확하게 구분이 되는 형태로 나오게 된다.
0, 1 두가지 값만 있는 흑백 이미지의 경우에는 "Opacity Mask" 기능을 사용하는게 더 좋다.
Additive
"Additive" 는 투명하게 설정된 마테리얼들이 겹쳤을 때 더 밝아도록 보이게 만들어주는 효과를 줄 수 있다.

적용법은 "Blend Mode" 를 "Additive" 바꿔주면 끝이다.

"Translucent" 과는 다르게 위 사진과 같이 겹치면 겹치는 부분이 더 밝아져서 불이나 수증기 등에 씌우는 마테리얼로 활용한다.
Modulate
"Modulate" 는 투명하게 설정된 마테리얼들이 겹쳤을 때 더 어두워지도록 보이게 만들어주는 효과를 줄 수 있다.


"Blend Mode" 를 "Modulate" 로 바꿔주고 "Shading Model" 을 "Unlit" 으로 바꿔주면 적용된다.
위의 설정처럼 바꿔주면 "Base Color" 가 비활성화되고, "Emissive Color" 가 활성되기에 색상을 다시 "Emissive Color" 에 연결해줘야한다.

"Modulate" 가 적용되면 위 사진처럼 샐로판지 같은 느낌의 마테리얼이 생성되고, "Additive" 와는 다르게 겹치면 더 어두워지게 된다.
Two Slided
"Two Slided" 는 단어 그대로 마스크를 양쪽면 다 적용시켜주는 효과이다.

설정법은 따로 해줄 것 없이 일반적인 Mask 설정에 "Two Slided" 만 체크해주면 된다.

위에서 만든 Mask 들은 Plane 에 적용시켰을 시, 앞쪽면만 설정된 Mask 로 보이고 뒷쪽면은 적용이 안된 투명한 상태로 나온다.
하지만 "Two Slide" 를 적용하면 일반적인 "Mask" 와는 다르게, 위 사진처럼 뒷쪽면까지 적용된 채로 보이게 된다.
그렇기에 컴퓨터 자원을 많이 잡아먹으므로 "Two Slide" 는 꼭 필요한 경우가 아니라면 지양하는 것이 좋다.
Master Material
중복이 되는 마테리얼들 한 번에 조정해주는 역할을 한다.
일일이 하나씩 새로 마테리얼을 만들어서 바꿔줄 필요도 없고, 바뀌는 걸 바로바로 확인하고 적용 가능하기 때문이다.

"Master Material" 에서 메인 노드를 우클릭하여 "Promote to a Parameter" 을 누르거나, s를 누른 채로 좌클릭을 해서 pharmeter 노드를 생성한 뒤 각 속성 별로 연결해주면 된다.

속성 별로 위 사진과 같이 연결해주면 된다.
Material Instance
"Material Instance" 은 원본 마테리얼을 복사하여 일부 파라미터만 변경해서 적용할 수 있게 하는 마테리얼이다.

위에서 제작한 "Master Material" 을 우클릭하면 "Create Material Instance" 를 통해 "Material Instance" 를 만들어줄 수 있다.

"Material Instance" 를 복사하여 필요한 마테리얼 수 만큼 제작 후, 각 "Material Instance" 에서 "Pharameter Groups" 의 목록 중 수정하고 싶은 값만 수정 후 적용시킬 수 있다.
위 사진에 "Base Color" 와 "Metallic" 밖에 없는 이유는 일단 2가지 속성만 pharmeter 노드에 연결해서 활성화 해줬기 때문이다.

위 사진을 보면 "Pharameter Groups" 가 "Global Scalar Parameter" 와 "Global Vector Parameter" 로 나뉘어져 있는 것을 확인할 수 있다.
"Global Scalar Parameter" 는 0~1 값을 입력하는 설정들이고, "Global Vector Parameter" 는 x, y, z값으로 나뉘어져 있는 설정들이다.
"Material Instance" 에서 "World Position Offset" 도 추가해줄 수 있다.

"Master Material" 에 들어가서 "World Position Offset" 에서 sin 함수를 곱해줬을 때처럼 노드를 작성해준 뒤, x값만 입력 가능한 노드를 생성한 다음 이름을 "Distance" 로 설정해주고 거기에 0 을 입력해주면 된다.
"World Position Offset" 을 설정하지 않을 마테리얼들을 위해 0 을 넣어 작동하지 않게 해준 것이고, 만약 "World Position Offset" 을 활성화하고 싶은 "Master Material" 이 있을 경우 해당 "Master Material" 에서만 "Distance" 값을 1로 수정해주면 된다.

위 사진과 같이 "Material Instance" 를 작은 창으로 띄워놓고 하면, 마테리얼 설정 변경에 따른 변화가 바로바로 적용되어 확인하면서 작업하기 편하다.
"Master Material" 사용 시 연산량 많기 때문에 해당 마테리얼이 많아지만 무거워져서 컴퓨터 소스를 많이 잡아먹는다.
그렇기에 되도록 "Master Material" 보다 연산량이 적어서 가벼운 "Material Instance" 를 사용하는 게 좋다.
*Opacity는 텍스쳐를 사용하기 때문에 "Master Material" 에서 적용시킬 수 없음
*아래 사진처럼 "Material Instance" 에서 "Two Slided" 도 적용 시킬 수 있음
체크 두 개 다 해야함; 왼쪽 체크는 "Two Slided" 사용, 오른쪽 체크는 "Two Slided" 적용

BP 응용
무작위로 액터의 색상을 변경해주는 BP

"BP_Ball" 을 실행하여 이벤트 그래프로 들어가준다.
"Create Dynamic Material Instance" 노드 생성 후, Shpere get 변수를 'Target' 에 연결해주고, 'Source Material' 로 "MI_Basecolor" 를 넣어준다.
색상을 바꿔줄 것이기에 "Make Color" 노드를 생성해주고, "Set Vector Parameter Value" 를 생성해준다.
r, g, b 이렇게 3개의 값이 들어가기 때문에 'Vector Parameter' 로 생성해줘야한다.
그리고 "Set Vector Parameter Value" 의 "Parameter Name" 우리가 변화시킬 Parameter 인 "BaseColor" 를 입력해주고, 무작위로 r, g, b 값을 변경하여 색상을 바꿔줄 것이기에 "Random Float" 를 3개 생성하고 각각의 값에 연결해주면 된다.
들어갔다 나오면 액터 생성이 중단되는 BP

"Set Timer by Event" 의 'Retrurn Value' 를 바깥으로 끌어서 "Promote to Variable" 로 set 변수를 생성한다.
그리고 해당 set 변수의 이름을 "Timer_SpawnBall" 로 변경해준다.

예전에 배웠던 액터 밖으로 나가는 걸 인식하는 충돌 이벤트 노드를 생성하고, "Clear and Invalidate Timer by Handle" 에 위에서 생성한 "Timer_SpawnBall" 변수의 get 변수를 연결하면 된다.
매초 무작위로 액터의 색상을 변경해주는 BP

위에서 제작한 무작위 색상을 변환 BP를 'Custom Event' 로 정한 뒤에 "Set Timer by Event" 노드만 연결해주면 된다.
다양한 parameter를 매초마다 변화시키는 BP

무작위로 액터의 색상을 변경해주는 BP 뒤에 추가로 연결해주면 굳이 시작 부분 BP를 추가로 작성해주지 않아도 된다.
우선 "MI_Basecolor" 에서 scalar 값을 가진 parameter 를 활성화해준다.
"Set Scalar Parameter Value" 노드를 생성해주고 "Parameter Name" 에 변화시키고 싶은 값을 넣은 뒤, "Random Float" 노드를 연결해주면 된다.
For Loop
"For Loop" 에 대한 개념은 2일차에서 배웠으니 개념에 대한 설명은 생략하고, 아래에 있는 사진의 BP만 해석하겠다.

"Bp_Ball" 이 생성되는 위치값 중 z축 값을 0~9 값을 루프시킨 값에 100을 곱하여 더한 뒤, 각각 z축의 값이 나타내는 위치에서 총 10개의 액터를 생성시키는 BP이다.
"For Loop" 노드가 2개 나란히 연결되어있으면 "2차 배열" 이라고 한다.

위의 BP에서 z축 뿐만이 아니라 y축 값에 똑같은 루프를 주고 생성시키는 BP이다.
앞의 루프에서 0 출력한 뒤 두번째 루프에서 0~9 값을 출력하면, 다시 앞의 루프로 돌아가 1 을 출력한 뒤 다시 두번째 루프에서 0~9 값을 출력하는 방식의 반복이기 때문에 총 100개의 액터가 생성된다.
"For Loop" 노드가 3개가 연결되어있으면 "3차 배열" 이라고 하고, 똑같이 "For Loop" 0~9 노드를 추가한다고 하면 총 1000개의 액터가 생성된다.
Is Valid

"Is Valid" 특정 액터를 검색하고 검색값이 존재하면 실행되고, 존재하지 않으면 실행되지 않게 하는 노드이다.
"Is Valid" 노드를 추가한 쪽의 BP를 보면 "BP_Ball" 을 검색한 뒤 "BP_Ball" 의 크기를 5배로 키우는 BP이다.
"BP_Ball" 을 검색했을 때 "BP_Ball" 이 없으면 오류 메세지가 뜨게 되는데, 해당 오류 메세지는 "BP_Ball" 이 없음에도 강제로 찾아서 크기를 키워버리는 명령을 내려버리기 때문이다.
그렇기에 해당 오류를 없애려면 "Is Valid" 노드를 추가하여, 없을 경우에는 크기 확대를 실행하지 않도록 하는 것이다.


게임 시작을 하면 3초 후, "Directional Light" 의 y축 회전값이 -45º 로 바뀌는 명령인 BP이다.
"Directional Light" 값을 변경해주기에 "Directional Light" 변수를 추가해줘야한다.

아침 6시의 느낌을 주기 위해 "Directional Light" y축 회전값에 -5º 를 주는 함수이다.

밤 9시의 느낌을 주기 위해 "Directional Light" y축 회전값에 5º 를 주고, "Fog Density" 를 0.1로 설정해주는 함수이다.
"Fog Density" 는 "Exponetion Height Fog" 값 중 하나기에 을 변경해주기에 "Exponetion Height Fog" 변수를 추가해줘야한다.

게임 시작을 하면 3초 후, 위에서 설정한 밤 9시 느낌을 주는 함수를 실행시키는 BP이다.
'Unreal Engine > GCC Class (5.5.4)' 카테고리의 다른 글
| Unreal Engine 5 배워보기 - 9일차 (0) | 2025.03.28 |
|---|---|
| Unreal Engine 5 배워보기 - 8일차 (0) | 2025.03.27 |
| Unreal Engine 5 배워보기 - 6일차 (0) | 2025.03.25 |
| Unreal Engine 5 배워보기 - 5일차 (0) | 2025.03.24 |
| Unreal Engine 5 배워보기 - 4일차 (0) | 2025.03.20 |