https://dev.epicgames.com/community/learning/tutorials/98E/unreal-engine-begin-play-engine-structure

 

Begin Play | Engine Structure | Tutorial

A high level overview of the engine structure, features and related BeginPlay coursework, walking you through the schematic that forms the basis for all...

dev.epicgames.com

https://d1iv7db44yhgxn.cloudfront.net/post-static-images/Engine%20Structure@2x.jpg

 

언리얼 엔진에 접근할 수 있는 다양한 방법

엔진 코드에 접근하기 위해서는

- 엔진이 어떤 방식으로 작업을 진행하는지 볼 수 있다, 더 엔진을 잘 이해할 수 있게 된다. 엔진 코드를 수정할 것이 아니라면 Install 시 런처에서 add하면 된다.

- 엔진 코드를 수정하여 커스텀 애셋을 만들 수 있다.

- 커스텀 엔진 빌드를 하는 경우 레지스트리에 빌드 ID가 등록된다.

- 커스텀 엔진 경로를 기존 엔진 경로와 동일한 위치에 두면 Perforce로 버전을 관리할 때 UnrealGameSync 툴을 이용하여 프로젝트를 팀 내에서 공유할 수 있다. 사용자들은 로컬에서 컴파일하지 않고 미리 빌드된 바이너리들을 서버에서 다운로드 받을 수 있다.

 

폴더 구조

- 엔진의 폴더 구조와 프로젝트 폴더 구조는 유사하다.

프로젝트는 엔진의 확장과 같은 역할을 하기 때문이다. 

 

- Content 폴더

모든 애셋을 저장하는 폴더

애셋을 옮기고 싶으면 에디터의 Content Browser에서 옮겨야 엔진이 레퍼런스 변화를 기록할 수 있다.

 

- Binaries 폴더

빌드 모듈이 존재한다. (PDB 파일, UBT에 의해 만들어진 Executable 파일) 

엔진 폴더에는 다양한 툴이 존재한다. (Swarm Agent, SwarmCoordinator, UnrealInsights, UnrealEditor.exe )

 

- Config 폴더

프로젝트 세팅이 저장되는 곳

엔진 폴더에는 BaseEditor.ini 프로젝트 폴더에는 DefaultEditor.ini가 있는데 프로젝트 폴더에 있는 Config 파일이 엔진의 것을 오버라이드 할 수 있다.

 

Config 폴더 내에 Platform 폴더가 존재하는데 폴더 이름은 플랫폼 명으로 만들어지고, Config 파일 이름은 플랫폼 이름을 포함해야 한다.

 

- Saved 폴더

프로젝트의 첫 실행 시 생성되는 폴더이다.

로컬 세팅 및 몇몇 데이터를 생성한다.

Saved 폴더 아래에 있는 폴더들

수정된 애셋을 자동 저장하는 Autosaves 폴더 : 애셋 복구하는데 사용할 수 있다.

Config 폴더 : 로컬 프로젝트를 위한 모든 오버라이드 설정 파일 포함

Crashes폴더 : 크래시 발생 시 로그를 저장, Dump파일 생성 (콜 스택 확인용)

Log 폴더 : 과거에 에디터나 게임 세션에서 찍혔던 로그를 확인할 수 있다.

 

- Intermediate 폴더

첫 실행 시 생성되는 폴더

Visual Studio 프로젝트 파일, 컴파일된 오브젝트 파일, 애셋 레지스트리 파일 (분석을 위해 사용됨) 등

 

에디터가 잘 안 켜질 경우 Intermediate 폴더와 Saved 폴더를 백업 후 삭제한 다음 다시 시도해 볼 수 있다.

이 폴더들에 프로젝트의 사용자의 로컬과만 관련 있는 파일들이 존재하기 때문에 이 폴더들은 다른 사용자들과 공유되지 않기 떄문이다.

 

공유되는 폴더 및 파일은 Config, Cotent, Source, Uproject 파일, (필요하다면 Binaries 및 커스텀 폴더를 추가 공유한다.)

보통 커스텀 폴더에는 Source Asset을 담는다. 이렇게 할 경우 다른 모든 사용자들에게도 상대 경로가 동일하기 때문에 아티스트가 애셋을 업데이트해도 reimport 할 필요가 없다.

 

- 플러그인 폴더

엔진 플러그인 폴더에 있는 플러그인들은 어느 프로젝트에서 사용 가능하다. 빌트 인 플러그인과 마켓에서 설치한 플러그인들이  위치해 있다. 커스텀 플러그인을 만든다면 프로젝트의 플러그인 폴더에 저장된다.

 

- UProject 파일

프로젝트를 정의하는 파일이다.

모듈 정의, 활성화된 플러그인 , Engine Association (엔진 버전) 정보를 포함한다.

 

Config는 계층적으로 오버라이딩 된다.

엔진 > 엔진 플랫폼 > 프로젝트 > 프로젝트 플랫폼 > 로컬 

 

 

애셋을 관리하는 방법

 

애셋은 두 가지 방법으로 만들어진다.

1. 외부 DCC tool에서 Import 

2. 에디터에서 직접 만들기

 

엔진에서 material을 텍스처로 굽는 거나 Modeling 툴을 사용하여 3D 메시를 생성하는 것도 애셋을 생성하는 방법 중 하나다.

 

애셋이 생성되면 asset Validation 플러그인이 애셋의 퀄리티를 보장하기 위해 사용된다. C++ 나 BP를 통해서 룰을 만들 수 있다. 예를 들면 네이밍 컨벤션, 텍스처 해상도, 메시 정점 수 등을 제한할 수 있다.

 

애셋은 모든 프로퍼티, 압축되지 않은 포맷의 Raw Data를 포함하는데, 이는 나중에 쿠깅 과정에서 타겟 플랫폼에 최적화된다.

 

- Derived Data Cache

현재 플랫폼에서 사용되는 애셋의 버전을 저장한다.

 

- Shared DDC

공유 폴더에 있는 맵을 최초로 열면 셰이더 컴파일, distance field와 같은 데이터가 생성되는데 공유 폴더에 저장되면 누군가 한 번만 실행하면 된다. 

 

- Redirector 

레퍼런스가 업데이트 되지 않았는데 옮겨진 애셋 

다른 사용자가 레퍼런스 중인 애셋을 다른 곳으로 옮겼을 경우 기존 Path에 생성된다. 나중에 가능할 때 Redirector를 Fix 하면 된다.

 

Primary Asset과 Secondary Asset

Primary Asset은 AssetManager에 의해 관리된다.

사용자는 커스텀 Primary Asset type을 정의하고 AssetManager가 그것을 인식하게 할 수 있다.

Primary Asset은 Secondary Asset들의 로드를 관리한다.

Level은 Primary Asset이다. 레벨에 존재하는 모든 액터 (Secondary Asset)의 로드를 관리한다.

 

Tool

- Session Frontend 툴

Tool 메뉴에서 액세스하거나 독립형 애플리케이션으로 실행 가능하다.

PC나 네트워크로 연결된 장치에서 실행되는 게임에 연결할 수 있다.

내부 기능 :

Automated Testing

Console

legacy Profiler

 

- Device Output Log, Device Manager

연결된 장치의 로그 출력, 실행 관리

 

- Unreal Insights

Session Frontend 내부에 있던 나머지 기능들이 이것으로 대체됨

에디터 툴 메뉴에서 실행된다.

이전 툴에 없던 추가적인 기능으로 모든 스레드에서 일어나는 이벤트를 자세하게 보여준다.

메모리 할당 및 각각의 네트워크 패킷을 분석할 수 있다.

 

빌드

Unreal Automation Tool에 의해 관리된다.

다양한 방법으로 빌드할 수 있다

1. basic packing 프로세스를 에디터에서 직접 진행할 수 있다.

2. Project Launcher를 사용하여 특수 빌드를 진행할 수 있다.

3. Command List를 사용하여 진행할 수 있다. 

 

- Building

C++ 코드를 포함한 프로젝트는 바이너리 빌드부터 시작한다. 바이너리 빌드 시 빌드 설정이 필요하다. (타겟, State)

target : Standalone Game, Editor, Client, Dedicated Server

State : Debug, Development, Shipping

 

- Cooking

바이너리 빌드 한 후에는 Cooking 과정을 거친다.

애셋을 타겟 플랫폼에 최적화하는 작업이다. 

1. Cook by the book : 모든 애셋을 쿠킹한다. 시간이 걸린다.

2. Cook on the fly : Cook process가 생략되고 Cook Server가 내 장치에서 실행되어 게임에서 애셋이 필요할 때 쿠킹된다. 로딩 시간이 길어지지만 반복 작업을 하는데 있어서는 효율적이다.

 

- Staging

Cooked Asset이 Staging Directory로 이동하고 이동한 애셋들은 Packaging 프로세스를 거친다.

Staging Directory를 지정할 수 있다.

Saved 폴더 아래에 있다.

 

- Packaging

모든 애셋을 패키징할 때 하나의 파일에 저장하거나 여러개의 청크에 나눠서 저장할 수 있다 또는  UAsset 그대로 저장할 수 있다. UAsset 그대로 저장하는 경우에 유저는 애셋 데이터에 접근할 수 있게 된다.

패키징하는 경우에는 암호화되기 때문에 DLC나 패치를 생성하는데 활용된다.

 

패키징될 때 어떤 언어를 제공할 지 결정할 수 있다. Localize Text 및 Asset

 

- Asset Audit (애셋 우클릭)을 사용하여 어떤 Asset이 어떤 Chunk로 가는지 확인할 수 있다.

 

- 레퍼런스 뷰어

흰색 줄은 Hard Reference 

보라색 줄은 Soft Reference

 

Hard Reference로 참조하는 애셋은 애셋이 로드될 때 자동으로 로드된다.

Soft Reference로 참조하는 애셋은 사용자가 필요할 때 임의로 로드할 수 있다. - 모든 애셋이 레벨과 함께 로드될 필요가 없기 때문에 로딩 시간을 줄여줄 수 있다.

 

- Gauntlet

자동화된 테스팅 및 검증 툴

+ Recent posts