주의! 본 정리 글은 '클래스 101'의 '언리얼 엔진 중급, 영화 퀄리티의 3D 메타버스를 창조해요.' 강의를 수강하고 정리한 글입니다. 해당 글은 아래 원칙 하에 작성되었습니다.
1. 강의에서 다룬 내용 기재를 최소화하고, 강의 흐름에 맞게 개인적으로 학습하는 과정을 기록한다.
2. 강의에서 제공하는 자료를 첨부하지 않는다.
3. 내용을 보충할 자료가 필요한 경우, 직접 제작한 자료를 사용한다.
(2023.06.01 추가)
클래스 101 문의 결과 저작권 문제없다는 답변받았습니다.
(2023.06.02 추가)
언리얼 엔진 중급, 영화 퀄리티의 3D 메타버스를 창조해요. | RYU Russell 러셀
언리얼 엔진 5 가 정식 출시되었습니다! 언리얼 엔진 5는 기존 언리얼 엔진 사용자들을 위해 언리얼 엔진 4와 호환되도록 제작되었으며, 언리얼 엔진 4 사용자라면 쉽게 즉시 언리얼 엔진 5를 사
class101.net
들어가며
지난 5월 말에 온라인 클래스 플랫폼인 '클래스101'에서 언리얼 강의를 듣기 시작했다. 강사님은 유튜브에서 RYU Russell 러셀 채널을 운영 중인 러셀님이었는데, 게임에 관심을 가지게 된 계기 중 하나가 러셀님 메이플 프로젝트인 만큼 군대에서부터 봐왔던 분이고, 언리얼 엔진을 다루는 실력은 확실하다는 생각이 들어서 수강을 결정했다.
5월에 잠깐 듣다가 시험이랑 개인 일정으로 인해 지금까지 미루게 됐는데 이번 기회에 듣고 정리하며, 언리얼 엔진에 대한 이해를 해보려고 한다. 강의는 Chapter 1부터 7까지로 구성되어있는데 Chapter 1은 강의 소개 느낌으로 진행되기에 정리하지 않고 본격적으로 내용을 다루기 시작하는 Chapter 2부터 정리하고자 한다.
정리는 단순하게 강의에서 '어떤 것을 가르쳤고, 어떻게 진행을 했느냐'에 초점을 맞추기 보다는 어떤 것을 알게 되었는데, 무엇을 해서 어떻게 이해했는가'에 집중하여 진행할 예정이다.
오늘 정리할 내용은 'Chapter 2. 더 사실적인 재질 연구 : 머티리얼 중급'이다. 이 Chapter에서는 BluePrint로 Sky Atmosphere를 만들어 하늘을 구성하는 방법과 머티리얼 블렌딩, 데칼, 머티리얼 함수에 대해서 다룬다. 그럼 정리를 시작해보자!

블루 프린트를 이용하여 Sky Atmosphere 구성하기
블루 프린트로 Sky Atmosphere를 구성하는 이유
보통 게임 엔진에서 논리 구조를 구현할 때는 코딩을 한다. 하지만 언리얼 엔진에는 블루 프린트라는 기능을 통해 비교적 간편하게 논리 구조를 표현할 수 있다. 이건 레고랑 비슷하다고 할 수 있을 것 같은데, 각양각색의 레고 블록(노드)들을 조합하여 원하는 결과물을 만들어낸다는 점에서 같다고 할 수 있을 것 같다.

하지만 이번에 블루 프린트로 Sky Atmosphere를 구성할 때는 위 처럼 노드들을 배치하고 연결하지는 않는다. 러셀님이 '다른 레벨이나 프로젝트에서 재사용이 가능한' 이라고 언급하신 걸 보면 그냥 블루 프린트 없이 설계해도 충분하지만 말 그대로 재사용을 위해 이렇게 구성하는 것 같다.
또한 Outliner에 여러 액터를 배치하여 복잡하게 작업하기보다는 하나로 묶어 관리하고, 추후에 기능이 필요할 경우, Sky Atmosphere를 구성하는 각 속성을 블루 프린트 내에서 조정하여 기능을 구현할 수 있으므로 이렇게 블루 프린트로 작업하는 것 같다. 정리하자면 아래와 같다.
- 다른 레벨이나 프로젝트에서 재사용하기 위함.
- Outliner에 여러 액터를 배치하여 복잡하게 작업하기 보다는 하나로 묶어 효과적으로 라이팅 관리를 하기 위함.
- 기능이 필요할 경우, Sky Atmosphere를 구성하는 각 속성을 바로 블루 프린트 내에서 조정하여 구현하기 위함.
그리고 블루 프린트에는 또 다른 장점이 있는데, 레벨에 배치된 블루 프린트는 원본 블루 프린트에 영향을 주지 않는다는 점이다. 다양한 레벨에 사용했는데 레벨에 배치된 블루 프린트를 수정할 때마다 다른 레벨이 변경되면 안 되기 때문에 레벨에 배치된 블루 프린트는 원본 블루 프린트에 영향을 주지 않는다. 블루 프린트의 인스턴스를 만들어서 레벨에 배치한다고 생각하면 편할 것 같다. 하지만 레벨에 배치된 블루 프린트에서 특정 영역을 수정할 경우, 원본 블루 프린트에서 해당 영역을 수정한다고 해도 레벨은 바뀌지 않기 때문에 주의해야 한다. 한 마디로 우선순위가 원본 블루 프린트보다 레벨에 배치된 블루 프린트가 높다.
Sky Atmosphere를 구성하는 요소
다음으로 Sky Atmosphere를 구성하는 요소를 살펴보자. 옵션 하나 하나까지 자세히 살펴보기보다는 어떤 역할인지 위주로 살펴볼 예정이며, 자세한 옵션의 경우는 하이퍼링크로 연결한 언리얼 공식 문서에서 확인하자. 아름다운 레벨 디자인을 위해서 이 요소들은 그냥 배치하기보다는 상세 옵션들을 조정해야 하기 때문에 공식 문서도 함께 살펴보면 좋을 것 같다.
- Directional Light : 말 그대로 광원에서부터 직선적으로 빛을 뿜는 액터다. Atmosphere Sun Light 옵션을 체크함으로써 하늘의 태양광으로 사용이 가능하다. 이를 회전시켜 태양의 위치를 바꿔서 다양한 시간대를 표현할 수 있다.
디렉셔널 라이트
디렉셔널 라이트에 대한 기초입니다.
docs.unrealengine.com
- SkyAtmosphere : 대기 상태를 물리 기반으로 렌더링하는 액터다. 대기 중의 빛의 산란이라던가, 태양(Atmospheric Directional Light)의 고도에 따른 하늘의 색을 나타내기에 Directional Light의 Atmosphere Sun Light 옵션을 체크해서 함께 사용해주어야 한다.
스카이 애트머스피어 컴포넌트
대기 원근을 적용해 지면에서 우주로 뷰를 전환하는 기능과 시간대 기능을 지원하는 물리 기반 스카이 및 애트머스피어 렌더링 시스템에 대해 설명합니다.
docs.unrealengine.com


- Exponential Height Fog : 맵의 높이에 반비례하여 밀도 있는 안개를 설치하는 액터다. Project Settings - Support Sky Atmosphere Affecting Height Fog 옵션을 활성화하여 안개의 색 또한 지정이 가능하다. 또한 Volumetric Fog 옵션을 활성화하고 세부 옵션을 조정하여 빛의 산란도 자유롭게 표현할 수 있다.
익스포넨셜 하이트 포그
높이 기반의 원거리 포그 시스템에 대해 개략적으로 설명합니다.
docs.unrealengine.com

- Sky Light : 레벨의 환경을 360도 큐브맵(HDRI)로 캡처하여 빛이 직접 닿지 않는 공간까지 전체적이니 라이팅(간접광)을 추가하는 액터이다. Sky Light의 간접 광은 캡처한 시점에 고정된 상태인데, 만약 레벨 내에서 빛이 바뀌는 경우가 있다면 자연스러운 라이팅을 위해 따로 설정을 해주어야 한다. Sky Light의 Mobility를 Movable로 설정한 뒤, Realtime Capture 옵션을 활성화하여 처리할 수 있다.
스카이 라이트
언리얼 엔진 4 의 스카이 라이트에 대한 개요입니다.
docs.unrealengine.com


- Post Process : 후반 보정과 이펙트를 추가하기 위한 액터다. 단순하게 색 보정을 하는 것에서 그치지 않고 다양한 프로퍼티를 조정하여 레벨을 더 아름답게 표현할 수 있다.
포스트 프로세스 이펙트
렌더링 직전의 전체 씬에 적용되는 이펙트입니다.
docs.unrealengine.com
Material 다루기
Vertex Blending Material
버텍스 블렌딩 머티리얼은 다양한 표현을 위해 둘 이상의 머티리얼을 혼합하는 것을 말한다. 공식 문서에서는 '버텍스 블렌딩 머티리얼'에 대해 찾아볼 수는 없었고 대신 '버텍스 컬러 머티리얼'이라고 소개된 기술이 비슷해보였다.
우선 블렌딩 머티리얼을 만들기 위해서는 퀵셀 브릿지에서 원하는 머티리얼을 찾아 다운받은 뒤, 아래의 이미지에서 빨간 동그라미로 표시한 버튼을 눌러 MegaScan을 켜준다. 언리얼 4에서는 MegaScan이 언리얼 창 상단에 있었는데, 언리얼 5에서는 아래 버튼으로 접근할 수 있었다. 이거 찾겠다고 삽질 했었다 ㅋㅋㅋ

MegaScan 창이 나왔으면 머티리얼을 Base, Middle, Top 순서대로 선택하여 Blend를 해준다. Browser 창에서 필터링을 이용하면 손쉽게 선택할 수 있다. 그럼 아래의 이미지처럼 블렌드 된 머티리얼을 확인할 수 있다.


블렌딩 된 머티리얼은 Base, Middle, Top, 그리고 Puddle 레이어로 구성되어 있는데, 각각의 레이어를 설정하여 원하는 방식으로 표현을 할 수 있다. Base, Middle, Top 레이어는 머티리얼을 할당한 뒤 설정을 하는 레이어고, Puddle 레이어는 말 그대로 웅덩이 표현을 위한 레이어이다. Puddle Layer를 사용하려면 아래 이미지의 위쪽에 보이는 Use Puddle Layer를 체크하고 활성화 해줘야 한다.

이렇게 만든 블렌드 머티리얼은 다음 항목에 소개할 Mesh Paint 모드를 이용하여 활용이 가능하다.
Mesh Paint 모드
Mesh Paint 모드는 말 그대로 Mesh의 Vertex를 기준으로 색을 칠할 수 있는 모드이다. 쉽게 말하면 모델의 Vertex에 정보를 할당하는 것이다. 내가 이해한 개념은 Vertex에 표현하고자 하는대로 Base Layer는 0, Middle Layer는 R, Top Layer는 G, Puddle Layer는 B 값을 할당하는 것이다. 더 자세한 건 언리얼 공식 문서의 '메시 페인트 오버 뷰'를 살펴보도록 하자.
우선 Mesh Paint 모드를 켜면 아래와 같은 창을 확인할 수 있는데, Blending 된 머티리얼이 적용된 모델을 Paint 할 때는 상황에 맞게 R, G, B 중 선택해서 작업하면 된다. Shift를 누른채로 드래그를 하면 지울 수 있다.

하지만 Vertex가 부족한 모델은 Mesh Paint 모드 자체가 Vertex를 기준으로 칠하는 것이기 때문에 섬세한 작업이 불가능하다. 이 경우, 모델을 remesh해서 vertex를 늘려주거나, vertex가 많은 모델을 만들어 작업을 진행해야 한다. 이런 작업은 다음에 소개할 Modeling 모드에서 가능하다.
Modeling 모드
모델링 모드는 언리얼 엔진 내에서 모델을 만들고, 수정할 때 사용하는 모드이다. 나는 vertex 개수를 조정하는 용도로만 써봐서 자세한 내용은 언리얼 엔진 공식 문서의 '모델링 모드 개요'를 참고하자.
언리얼 엔진에서 작업을 할 때 레벨 내에 있는 메쉬 오브젝트들은 폴리곤으로 구성된다. 이 폴리곤의 각 꼭짓점을 vertex라고 하는데, 이러한 구조는 View Mode를 Lit(Light)에서 Wireframe으로 바꿔보면 한 눈에 볼 수 있다.


그래서 모델링 모드에서는 무엇을 할 수 있느냐? 이 글에서 소개할 건 메쉬를 만드는 것과 메쉬의 vertex 수를 조정하는 remesh이다.
우선 모델링 모드로 들어가면 아래와 같은 창이 나오는데, Shapes에서 원하는 메쉬를 선택한 뒤 크기와 vertex 수를 조정하여 원하는 메쉬를 생성 및 배치할 수 있다. 아래 이미지의 노란색 선이 배치 중인 메쉬이다.

다음으로 remesh이다. 나는 언리얼 4로 배우면서, 언리얼 5로 실습하고 있는데 remesh를 못 찾아서 오랫동안 삽질을 했었다. remesh는 MeshOps에 있다는 점.. 꼭 알아두자! ㅋㅋ 아무튼 수정을 원하는 오브젝트를 선택한 채로 remesh를 누르면 아래와 같이 조정을 할 수 있다.

다만, remesh를 할 경우에는 원본까지 수정되니 조심해서 작업하도록 하자. 만약 기본 액터 창에 있는 메쉬의 vertex 수를 매우 많게 수정하면, 나중에 기본 액터 창에서 메쉬를 배치할 때 remesh 된 액터가 나오기 때문에 최적화 관련된 이슈가 생길 수 있다고 한다.
Decal
데칼은 텍스쳐를 오브젝트에 붙일 수 있는 Static Mesh이다. Static Mesh이지만 독립적으로 동작하기에 매우 간편하고 효율적이라고 한다. 사용법은 다른 머티리얼과 같이 퀵셀 브릿지에서 다운받아서 배치하면 되고, 몇 가지 내용만 생각하면서 배치하면 된다.
- 데칼은 맵 위에 올리면 정사각형으로 맞춰서 나오기에 스케일 조정을 해야 한다.
- 데칼끼리의 우선 순위를 조정할 수 있다.
- 데칼은 다른 오브젝트를 타고 올라갈 수 있기 때문에 바닥에만 설치할 거라면 높이를 낮춰줘야 한다.
- 데칼은 Puddle 보다 위에 적용된다.

모델링 Collision
Collision이란 게임 내에서 충돌 판정을 위해 모델의 크기를 지정하는 것을 말한다. Collision이 없다면, 모델은 보이더라도 다른 오브젝트와 어떠한 상호 작용도 하지 못한다.
언리얼에는 이런 Collision을 만드는 방법이 여러 가지가 있는데, 이 글에서는 Auto Convex Collision과 Complex Collision, 그리고 Simple Collision에 대해서만 소개하도록 하겠다.
우선 Auto Convex Collision (자동 컨벡스 콜리전)부터 살펴보자. 자동 컨벡스 콜리전은 컨벡스 분해를 통해 만든 콜리전으로 모델링 데이터를 통해 대략적으로 만들어지게 된다. 이 때, Hull Precision (헐 정밀도)에 따라 Collision이 얼마나 정확하느냐가 정해지는데 이 값이 높을수록 리소스를 많이 사용하기에 중요하지 않은 모델이라면 적당한 값을 설정해야 한다. 여담으로 중간이 뚫려있는 에셋들의 콜리전을 잘 만들어지지 않는다고 한다.


다음으로 Simple Collision과 Complex Collision이다. Simple Collision은 말 그대로 정밀도는 다소 떨어지지만 최적화 된 Collision을 말하고, Complex Collision은 모델링 폴리곤을 그대로 Collision으로 사용하는 것을 말한다. 이렇게 보면 Complex Collision이 좋아보이는데, 이를 사용하면 과부화의 문제 때문인지 Simulate Physics(물리 기반 움직임)를 사용할 수 없기 때문에 고정된 오브젝트에만 사용하라고 권장한다. 러셀님은 절벽과 같이 고정되어 있고, 정밀한 collision이 필요할 때 사용을 추천한다고 언급하셨다.


이 외에 Collision에 대한 보다 자세한 설명은 언리얼 공식 문서의 '자동 컨벡스 콜리전 툴을 사용하여 스태틱 메시에 콜리전 헐 추가'와 '단순 vs 복합 콜리전'를 참고하도록 하자.
Material Function
마지막으로 Material Function이다! 머티리얼 함수는 머티리얼 관련하여 설정한 기능이나 동작 처리를 재사용하기 위해서 블루 프린트를 통해 만든 함수를 의미한다.
예시로 아래의 이미지에서는 BaseColor와 Normal을 조정할 수 있는 함수를 만들고, 이를 사용하여 설정하는 모습을 확인할 수 있다. 추가로, Input과 Output의 Sort Priority(값이 높을수록 상위에 위치)를 조정하여 노드 내에서의 순서를 정리할 수 있으니 스파게티 코드가 되지 않도록 잘 정리해보자.


자세한 내용은 언리얼 공식 문서의 '머티리얼 함수 개요'를 참고하자.
후기
정리하는데 용어를 한글로 표기해야 되나, 영어로 표기해야 되나 고민을 많이 했다. 그리고 이도 저도 아니게 혼용해서 사용해버렸다. 아무리 강의를 정리하는 내용이라지만 시간도 너무 오래 걸린다. 내 활동을 기록하고 나중에 까먹지 않으려고 만드는 건데 아직은 애매한 것 같다.
그래도 다른 글들과 마찬가지로 정리 글의 성격만 파악하면 금방 퀄리티 있게 작성할 수 있을 것 같다. 실제로 정리하면서 다시 찾아보고 알게 된 내용도 있고, 도움이 됐기 때문에 일단은 꾸준히 해봐야 겠다.
'개발 > 언리얼' 카테고리의 다른 글
[Blueprint] 데미지 처리와 콜리전 채널 (0) | 2023.12.25 |
---|---|
[Blueprint] 기묘한 For Loop와 Delay의 관계 (0) | 2023.12.24 |
[RYU Russell, 언리얼 엔진 중급 클래스] 배운 내용 정리 (4) [完] (1) | 2022.08.16 |
[RYU Russell, 언리얼 엔진 중급 클래스] 배운 내용 정리 (3) (0) | 2022.08.03 |
[RYU Russell, 언리얼 엔진 중급 클래스] 배운 내용 정리 (2) (0) | 2022.07.15 |
주의! 본 정리 글은 '클래스 101'의 '언리얼 엔진 중급, 영화 퀄리티의 3D 메타버스를 창조해요.' 강의를 수강하고 정리한 글입니다. 해당 글은 아래 원칙 하에 작성되었습니다.
1. 강의에서 다룬 내용 기재를 최소화하고, 강의 흐름에 맞게 개인적으로 학습하는 과정을 기록한다.
2. 강의에서 제공하는 자료를 첨부하지 않는다.
3. 내용을 보충할 자료가 필요한 경우, 직접 제작한 자료를 사용한다.
(2023.06.01 추가)
클래스 101 문의 결과 저작권 문제없다는 답변받았습니다.
(2023.06.02 추가)
언리얼 엔진 중급, 영화 퀄리티의 3D 메타버스를 창조해요. | RYU Russell 러셀
언리얼 엔진 5 가 정식 출시되었습니다! 언리얼 엔진 5는 기존 언리얼 엔진 사용자들을 위해 언리얼 엔진 4와 호환되도록 제작되었으며, 언리얼 엔진 4 사용자라면 쉽게 즉시 언리얼 엔진 5를 사
class101.net
들어가며
지난 5월 말에 온라인 클래스 플랫폼인 '클래스101'에서 언리얼 강의를 듣기 시작했다. 강사님은 유튜브에서 RYU Russell 러셀 채널을 운영 중인 러셀님이었는데, 게임에 관심을 가지게 된 계기 중 하나가 러셀님 메이플 프로젝트인 만큼 군대에서부터 봐왔던 분이고, 언리얼 엔진을 다루는 실력은 확실하다는 생각이 들어서 수강을 결정했다.
5월에 잠깐 듣다가 시험이랑 개인 일정으로 인해 지금까지 미루게 됐는데 이번 기회에 듣고 정리하며, 언리얼 엔진에 대한 이해를 해보려고 한다. 강의는 Chapter 1부터 7까지로 구성되어있는데 Chapter 1은 강의 소개 느낌으로 진행되기에 정리하지 않고 본격적으로 내용을 다루기 시작하는 Chapter 2부터 정리하고자 한다.
정리는 단순하게 강의에서 '어떤 것을 가르쳤고, 어떻게 진행을 했느냐'에 초점을 맞추기 보다는 어떤 것을 알게 되었는데, 무엇을 해서 어떻게 이해했는가'에 집중하여 진행할 예정이다.
오늘 정리할 내용은 'Chapter 2. 더 사실적인 재질 연구 : 머티리얼 중급'이다. 이 Chapter에서는 BluePrint로 Sky Atmosphere를 만들어 하늘을 구성하는 방법과 머티리얼 블렌딩, 데칼, 머티리얼 함수에 대해서 다룬다. 그럼 정리를 시작해보자!

블루 프린트를 이용하여 Sky Atmosphere 구성하기
블루 프린트로 Sky Atmosphere를 구성하는 이유
보통 게임 엔진에서 논리 구조를 구현할 때는 코딩을 한다. 하지만 언리얼 엔진에는 블루 프린트라는 기능을 통해 비교적 간편하게 논리 구조를 표현할 수 있다. 이건 레고랑 비슷하다고 할 수 있을 것 같은데, 각양각색의 레고 블록(노드)들을 조합하여 원하는 결과물을 만들어낸다는 점에서 같다고 할 수 있을 것 같다.

하지만 이번에 블루 프린트로 Sky Atmosphere를 구성할 때는 위 처럼 노드들을 배치하고 연결하지는 않는다. 러셀님이 '다른 레벨이나 프로젝트에서 재사용이 가능한' 이라고 언급하신 걸 보면 그냥 블루 프린트 없이 설계해도 충분하지만 말 그대로 재사용을 위해 이렇게 구성하는 것 같다.
또한 Outliner에 여러 액터를 배치하여 복잡하게 작업하기보다는 하나로 묶어 관리하고, 추후에 기능이 필요할 경우, Sky Atmosphere를 구성하는 각 속성을 블루 프린트 내에서 조정하여 기능을 구현할 수 있으므로 이렇게 블루 프린트로 작업하는 것 같다. 정리하자면 아래와 같다.
- 다른 레벨이나 프로젝트에서 재사용하기 위함.
- Outliner에 여러 액터를 배치하여 복잡하게 작업하기 보다는 하나로 묶어 효과적으로 라이팅 관리를 하기 위함.
- 기능이 필요할 경우, Sky Atmosphere를 구성하는 각 속성을 바로 블루 프린트 내에서 조정하여 구현하기 위함.
그리고 블루 프린트에는 또 다른 장점이 있는데, 레벨에 배치된 블루 프린트는 원본 블루 프린트에 영향을 주지 않는다는 점이다. 다양한 레벨에 사용했는데 레벨에 배치된 블루 프린트를 수정할 때마다 다른 레벨이 변경되면 안 되기 때문에 레벨에 배치된 블루 프린트는 원본 블루 프린트에 영향을 주지 않는다. 블루 프린트의 인스턴스를 만들어서 레벨에 배치한다고 생각하면 편할 것 같다. 하지만 레벨에 배치된 블루 프린트에서 특정 영역을 수정할 경우, 원본 블루 프린트에서 해당 영역을 수정한다고 해도 레벨은 바뀌지 않기 때문에 주의해야 한다. 한 마디로 우선순위가 원본 블루 프린트보다 레벨에 배치된 블루 프린트가 높다.
Sky Atmosphere를 구성하는 요소
다음으로 Sky Atmosphere를 구성하는 요소를 살펴보자. 옵션 하나 하나까지 자세히 살펴보기보다는 어떤 역할인지 위주로 살펴볼 예정이며, 자세한 옵션의 경우는 하이퍼링크로 연결한 언리얼 공식 문서에서 확인하자. 아름다운 레벨 디자인을 위해서 이 요소들은 그냥 배치하기보다는 상세 옵션들을 조정해야 하기 때문에 공식 문서도 함께 살펴보면 좋을 것 같다.
- Directional Light : 말 그대로 광원에서부터 직선적으로 빛을 뿜는 액터다. Atmosphere Sun Light 옵션을 체크함으로써 하늘의 태양광으로 사용이 가능하다. 이를 회전시켜 태양의 위치를 바꿔서 다양한 시간대를 표현할 수 있다.
디렉셔널 라이트
디렉셔널 라이트에 대한 기초입니다.
docs.unrealengine.com
- SkyAtmosphere : 대기 상태를 물리 기반으로 렌더링하는 액터다. 대기 중의 빛의 산란이라던가, 태양(Atmospheric Directional Light)의 고도에 따른 하늘의 색을 나타내기에 Directional Light의 Atmosphere Sun Light 옵션을 체크해서 함께 사용해주어야 한다.
스카이 애트머스피어 컴포넌트
대기 원근을 적용해 지면에서 우주로 뷰를 전환하는 기능과 시간대 기능을 지원하는 물리 기반 스카이 및 애트머스피어 렌더링 시스템에 대해 설명합니다.
docs.unrealengine.com


- Exponential Height Fog : 맵의 높이에 반비례하여 밀도 있는 안개를 설치하는 액터다. Project Settings - Support Sky Atmosphere Affecting Height Fog 옵션을 활성화하여 안개의 색 또한 지정이 가능하다. 또한 Volumetric Fog 옵션을 활성화하고 세부 옵션을 조정하여 빛의 산란도 자유롭게 표현할 수 있다.
익스포넨셜 하이트 포그
높이 기반의 원거리 포그 시스템에 대해 개략적으로 설명합니다.
docs.unrealengine.com

- Sky Light : 레벨의 환경을 360도 큐브맵(HDRI)로 캡처하여 빛이 직접 닿지 않는 공간까지 전체적이니 라이팅(간접광)을 추가하는 액터이다. Sky Light의 간접 광은 캡처한 시점에 고정된 상태인데, 만약 레벨 내에서 빛이 바뀌는 경우가 있다면 자연스러운 라이팅을 위해 따로 설정을 해주어야 한다. Sky Light의 Mobility를 Movable로 설정한 뒤, Realtime Capture 옵션을 활성화하여 처리할 수 있다.
스카이 라이트
언리얼 엔진 4 의 스카이 라이트에 대한 개요입니다.
docs.unrealengine.com


- Post Process : 후반 보정과 이펙트를 추가하기 위한 액터다. 단순하게 색 보정을 하는 것에서 그치지 않고 다양한 프로퍼티를 조정하여 레벨을 더 아름답게 표현할 수 있다.
포스트 프로세스 이펙트
렌더링 직전의 전체 씬에 적용되는 이펙트입니다.
docs.unrealengine.com
Material 다루기
Vertex Blending Material
버텍스 블렌딩 머티리얼은 다양한 표현을 위해 둘 이상의 머티리얼을 혼합하는 것을 말한다. 공식 문서에서는 '버텍스 블렌딩 머티리얼'에 대해 찾아볼 수는 없었고 대신 '버텍스 컬러 머티리얼'이라고 소개된 기술이 비슷해보였다.
우선 블렌딩 머티리얼을 만들기 위해서는 퀵셀 브릿지에서 원하는 머티리얼을 찾아 다운받은 뒤, 아래의 이미지에서 빨간 동그라미로 표시한 버튼을 눌러 MegaScan을 켜준다. 언리얼 4에서는 MegaScan이 언리얼 창 상단에 있었는데, 언리얼 5에서는 아래 버튼으로 접근할 수 있었다. 이거 찾겠다고 삽질 했었다 ㅋㅋㅋ

MegaScan 창이 나왔으면 머티리얼을 Base, Middle, Top 순서대로 선택하여 Blend를 해준다. Browser 창에서 필터링을 이용하면 손쉽게 선택할 수 있다. 그럼 아래의 이미지처럼 블렌드 된 머티리얼을 확인할 수 있다.


블렌딩 된 머티리얼은 Base, Middle, Top, 그리고 Puddle 레이어로 구성되어 있는데, 각각의 레이어를 설정하여 원하는 방식으로 표현을 할 수 있다. Base, Middle, Top 레이어는 머티리얼을 할당한 뒤 설정을 하는 레이어고, Puddle 레이어는 말 그대로 웅덩이 표현을 위한 레이어이다. Puddle Layer를 사용하려면 아래 이미지의 위쪽에 보이는 Use Puddle Layer를 체크하고 활성화 해줘야 한다.

이렇게 만든 블렌드 머티리얼은 다음 항목에 소개할 Mesh Paint 모드를 이용하여 활용이 가능하다.
Mesh Paint 모드
Mesh Paint 모드는 말 그대로 Mesh의 Vertex를 기준으로 색을 칠할 수 있는 모드이다. 쉽게 말하면 모델의 Vertex에 정보를 할당하는 것이다. 내가 이해한 개념은 Vertex에 표현하고자 하는대로 Base Layer는 0, Middle Layer는 R, Top Layer는 G, Puddle Layer는 B 값을 할당하는 것이다. 더 자세한 건 언리얼 공식 문서의 '메시 페인트 오버 뷰'를 살펴보도록 하자.
우선 Mesh Paint 모드를 켜면 아래와 같은 창을 확인할 수 있는데, Blending 된 머티리얼이 적용된 모델을 Paint 할 때는 상황에 맞게 R, G, B 중 선택해서 작업하면 된다. Shift를 누른채로 드래그를 하면 지울 수 있다.

하지만 Vertex가 부족한 모델은 Mesh Paint 모드 자체가 Vertex를 기준으로 칠하는 것이기 때문에 섬세한 작업이 불가능하다. 이 경우, 모델을 remesh해서 vertex를 늘려주거나, vertex가 많은 모델을 만들어 작업을 진행해야 한다. 이런 작업은 다음에 소개할 Modeling 모드에서 가능하다.
Modeling 모드
모델링 모드는 언리얼 엔진 내에서 모델을 만들고, 수정할 때 사용하는 모드이다. 나는 vertex 개수를 조정하는 용도로만 써봐서 자세한 내용은 언리얼 엔진 공식 문서의 '모델링 모드 개요'를 참고하자.
언리얼 엔진에서 작업을 할 때 레벨 내에 있는 메쉬 오브젝트들은 폴리곤으로 구성된다. 이 폴리곤의 각 꼭짓점을 vertex라고 하는데, 이러한 구조는 View Mode를 Lit(Light)에서 Wireframe으로 바꿔보면 한 눈에 볼 수 있다.


그래서 모델링 모드에서는 무엇을 할 수 있느냐? 이 글에서 소개할 건 메쉬를 만드는 것과 메쉬의 vertex 수를 조정하는 remesh이다.
우선 모델링 모드로 들어가면 아래와 같은 창이 나오는데, Shapes에서 원하는 메쉬를 선택한 뒤 크기와 vertex 수를 조정하여 원하는 메쉬를 생성 및 배치할 수 있다. 아래 이미지의 노란색 선이 배치 중인 메쉬이다.

다음으로 remesh이다. 나는 언리얼 4로 배우면서, 언리얼 5로 실습하고 있는데 remesh를 못 찾아서 오랫동안 삽질을 했었다. remesh는 MeshOps에 있다는 점.. 꼭 알아두자! ㅋㅋ 아무튼 수정을 원하는 오브젝트를 선택한 채로 remesh를 누르면 아래와 같이 조정을 할 수 있다.

다만, remesh를 할 경우에는 원본까지 수정되니 조심해서 작업하도록 하자. 만약 기본 액터 창에 있는 메쉬의 vertex 수를 매우 많게 수정하면, 나중에 기본 액터 창에서 메쉬를 배치할 때 remesh 된 액터가 나오기 때문에 최적화 관련된 이슈가 생길 수 있다고 한다.
Decal
데칼은 텍스쳐를 오브젝트에 붙일 수 있는 Static Mesh이다. Static Mesh이지만 독립적으로 동작하기에 매우 간편하고 효율적이라고 한다. 사용법은 다른 머티리얼과 같이 퀵셀 브릿지에서 다운받아서 배치하면 되고, 몇 가지 내용만 생각하면서 배치하면 된다.
- 데칼은 맵 위에 올리면 정사각형으로 맞춰서 나오기에 스케일 조정을 해야 한다.
- 데칼끼리의 우선 순위를 조정할 수 있다.
- 데칼은 다른 오브젝트를 타고 올라갈 수 있기 때문에 바닥에만 설치할 거라면 높이를 낮춰줘야 한다.
- 데칼은 Puddle 보다 위에 적용된다.

모델링 Collision
Collision이란 게임 내에서 충돌 판정을 위해 모델의 크기를 지정하는 것을 말한다. Collision이 없다면, 모델은 보이더라도 다른 오브젝트와 어떠한 상호 작용도 하지 못한다.
언리얼에는 이런 Collision을 만드는 방법이 여러 가지가 있는데, 이 글에서는 Auto Convex Collision과 Complex Collision, 그리고 Simple Collision에 대해서만 소개하도록 하겠다.
우선 Auto Convex Collision (자동 컨벡스 콜리전)부터 살펴보자. 자동 컨벡스 콜리전은 컨벡스 분해를 통해 만든 콜리전으로 모델링 데이터를 통해 대략적으로 만들어지게 된다. 이 때, Hull Precision (헐 정밀도)에 따라 Collision이 얼마나 정확하느냐가 정해지는데 이 값이 높을수록 리소스를 많이 사용하기에 중요하지 않은 모델이라면 적당한 값을 설정해야 한다. 여담으로 중간이 뚫려있는 에셋들의 콜리전을 잘 만들어지지 않는다고 한다.


다음으로 Simple Collision과 Complex Collision이다. Simple Collision은 말 그대로 정밀도는 다소 떨어지지만 최적화 된 Collision을 말하고, Complex Collision은 모델링 폴리곤을 그대로 Collision으로 사용하는 것을 말한다. 이렇게 보면 Complex Collision이 좋아보이는데, 이를 사용하면 과부화의 문제 때문인지 Simulate Physics(물리 기반 움직임)를 사용할 수 없기 때문에 고정된 오브젝트에만 사용하라고 권장한다. 러셀님은 절벽과 같이 고정되어 있고, 정밀한 collision이 필요할 때 사용을 추천한다고 언급하셨다.


이 외에 Collision에 대한 보다 자세한 설명은 언리얼 공식 문서의 '자동 컨벡스 콜리전 툴을 사용하여 스태틱 메시에 콜리전 헐 추가'와 '단순 vs 복합 콜리전'를 참고하도록 하자.
Material Function
마지막으로 Material Function이다! 머티리얼 함수는 머티리얼 관련하여 설정한 기능이나 동작 처리를 재사용하기 위해서 블루 프린트를 통해 만든 함수를 의미한다.
예시로 아래의 이미지에서는 BaseColor와 Normal을 조정할 수 있는 함수를 만들고, 이를 사용하여 설정하는 모습을 확인할 수 있다. 추가로, Input과 Output의 Sort Priority(값이 높을수록 상위에 위치)를 조정하여 노드 내에서의 순서를 정리할 수 있으니 스파게티 코드가 되지 않도록 잘 정리해보자.


자세한 내용은 언리얼 공식 문서의 '머티리얼 함수 개요'를 참고하자.
후기
정리하는데 용어를 한글로 표기해야 되나, 영어로 표기해야 되나 고민을 많이 했다. 그리고 이도 저도 아니게 혼용해서 사용해버렸다. 아무리 강의를 정리하는 내용이라지만 시간도 너무 오래 걸린다. 내 활동을 기록하고 나중에 까먹지 않으려고 만드는 건데 아직은 애매한 것 같다.
그래도 다른 글들과 마찬가지로 정리 글의 성격만 파악하면 금방 퀄리티 있게 작성할 수 있을 것 같다. 실제로 정리하면서 다시 찾아보고 알게 된 내용도 있고, 도움이 됐기 때문에 일단은 꾸준히 해봐야 겠다.
'개발 > 언리얼' 카테고리의 다른 글
[Blueprint] 데미지 처리와 콜리전 채널 (0) | 2023.12.25 |
---|---|
[Blueprint] 기묘한 For Loop와 Delay의 관계 (0) | 2023.12.24 |
[RYU Russell, 언리얼 엔진 중급 클래스] 배운 내용 정리 (4) [完] (1) | 2022.08.16 |
[RYU Russell, 언리얼 엔진 중급 클래스] 배운 내용 정리 (3) (0) | 2022.08.03 |
[RYU Russell, 언리얼 엔진 중급 클래스] 배운 내용 정리 (2) (0) | 2022.07.15 |