개발/Unreal Engine 8

[UE 5]내가 UE 생 초보였을 때 공부한 방법

원래 소프트웨어가 복수 전공이기도 했고 개발 쪽엔 관심은 있었지만 UE 관련 스택은 전혀 없었는데 어쩌다 언리얼 개발자로 입사하면서 엔진 학습하려고 했던 방법에 대해 적어보려고 한다지금도 전문가 급이냐하면 입사 1년도 못 채운 신입이라 그런건 절대 아니지만 노베이스 생초보는 탈출한 상태에서 도움이 됐던 내용들 메모라고 생각해주면 될 것 같다 1. 공식 문서개발자들의 교과서. 아무래도 UE는 노베이스였지만 개발 자체는 노베이스가 아니었다보니 개발 문서 보는게 생소하지 않아서 여기서 가장 큰 도움을 받은 것 같다.처음에는 핵심 용어(액터, 폰, 캐릭터, 컨트롤러 등) 정의 위주로, 이후엔 하나하나 어떻게 쓰는건지 대해서 배웠었다. 2. 샘플 프로젝트 살펴보기 언리얼 엔진에서는 엔진 키고 나면 나오는 1인칭..

[UE 5]Postprocess를 통한 2D 배경 구현

오늘은 Postprocess를 통해서 캐릭터를 제외한 부분을 2D 배경으로 처리해주는 방법에 대해서 알아볼 것이다. Postprocess와 Stencil Depth를 이용해서 '캐릭터를 제외한 부분을 선택한 배경으로 덧씌우고, 캐릭터 부분은 온전하게 보이도록' 할 예정이다.프로젝트에서 실제로 활용했던 기능 중 하나인데 다음 제약 사항이 있어 해당 방법을 고안하게 됐다.목표 - '캐릭터를 제외한 부분을 선택한 배경으로 덧씌우고, 캐릭터 부분은 온전하게 보이도록'하기(해당 프로젝트에선 크로마키를 씌울 수 있도록 초록색 배경을 택했다. TextureParameter를 변경하면 다른 배경으로도 바꿀 수 있다)1. 기존 오브젝트의 라이프 사이클을 건드리지 않을 것2. 특정 액터(ex. 캐릭터)를 제외한 나머지 부..

[UE 5]else if 반복되는 코드 리팩토링하기

C++ 코드를 쓰다보면 Switch 쓰기가 불가능해서 String else if가 여러번 반복되는 코드를 만들어야할 수도 있다.하지만 else if만 여러개 반복되는 식으로 코드를 짜다보면 추가 삭제가 힘들고 가독성이 떨어지는 문제가 생길 수도 있으며 선형 탐색 방식이기 때문에 시간 복잡도도 O(N)이 나온다. 이럴 때 TMap과 TFunction을 이용한 HandlerMap을 이용해 코드를 리팩토링할 수 있다.해당 코드는 JsonObject를 받아와서 EventType(Stringfield:"type")에 따라 해당하는 Function을 처리하는 Controller의 헤더 파일이다.여기서는 예시용 코드라서 클래스를 Actor로 넣었는데, 이런 역할은 UGameInstanceSubsystem 이나 Pu..

[UE 5] PCG Graph 노드 별 기능 1

지난 글에서는 시간이 없어서 간단하게 PCG 기능을 세팅하는 법 위주로 다뤘었다.이번에는 주요 노드들의 기능과 사용법을 조금 더 자세히 정리해보려 한다.간단한 기능 요약Get Landscape Data: 월드의 Landscape Data를 가져온다. 원래 기본 Input에 들어가있었는데 노드로 따로 떨어졌다. 그래서 초기에 PCG 기능 소개하는 영상들엔 죄다 Input에서 Landscape 바로 끌고 오는데, 5.4에서는 노드로 불러와서 사용해야한다. Self Pruning: 가지치기. 겹치는 불필요한 포인트를 자동으로 제거해 최종 출력의 밀도와 충돌을 제어할 수 있다. 밀집된 결과물을 최적화할 때 유용하다. Surface Sampler: Landscape 또는 Static Mesh의 표면을 기준으로 ..

[UE5] Rider에서 빌드가 제대로 되지 않는 현상

소스코드 버전으로 언리얼을 사용할 때, Rider에서 제대로 빌드가 안되는 경우가 있다. 대부분은 시스템의 dotnet SDK 버전이 언리얼이 요구하는 버전과 일치하지 않기 때문이다. 1.Visual Studio용 .NET SDK 다운로드Visual Studio 빌드 도구나 Visual Studio 설치 프로그램에서 .NET 데스크톱 개발 및 C++를 사용한 데스크톱 개발을 설치하면 된다. 2.그래도 해결이 안된다면, 프로젝트 내에 dotnet 버전을 명시적으로 지정해주면 된다 언리얼에서 요구하는 dotnet 버전은 6.0.428이므로 언리얼 프로젝트 내에 global.json 파일을 만들어서 거기에 이렇게 작성하면 된다.{ "sdk": { "version": "6.0.428" } }이렇게..

[UE 5]PCG - 절차적 컨텐츠 생성

언리얼 엔진 5.2부터 공식적으로 도입된 프레임워크.레벨 디자인이랑 환경 제작, 배치 등을 자동화시켜주는 기능이다.시연 영상에서는 보통 자연 환경같은 것들 만들어주는 식으로 사용했는데, 레벨 디자인이나 모듈러화된 액터의 경우엔 건물을 제작한다든가 하는 등 여러 곳에 이용될 수 있다. 1.사전 준비2.사용 방법순서로 진행할거고 다음에는 모듈러 매시를 이용해서 건물 구성하는 법에 대해 적어볼 예정이다. 1.사전 준비 PCG는 플러그인 기반으로 작동하기 때문에 plugins에서 PCG를 활성화해줘야한다.새로 프로젝트를 만들고 [편집] - [플러그인]으로 창 띄운 다음에 Procedural Content Generation Framework(PCG)와 Procedural Content Generation Fra..

[UE5] TextureRenderTarget2D로 가져온 장면이 과도하게 밝게 보일 때

Spout로 OBS 화면을 Unreal Engine으로 가져와 공유하려고 UTextureRenderTarget2D에 렌더링했더니, 실제보다 훨씬 밝고 색이 흐려 보였다.나의 경우 RenderTarget의 RenderTargetFormat으로 인한 색 공간(Color Space)과 감마(Gamma) 처리의 불일치가 문제였다.Unreal Engine의 렌더링 파이프라인은 linear space 에서 조명 계산 등을 수행한 뒤, 최종 출력 단계에서 gamma correction을 적용하여 모니터에 맞는 영상으로 내보낸다. 그러나 Spout을 통해 전달되는 텍스처는 이러한 감마 정보가 메타데이터로 함께 전달되지 않기 때문에, 보내는 쪽과 받는 쪽이 동일한 해석을 하고 있지 않아서 밝기나 색상에서 차이가 발생한 ..

[UE 5]import한 Static Mesh 기본 회전 값 변경하는 법

같은 종류의 여러 매시를 마켓플레이스의 각각 다른 곳에서 가져와서 import했는데, 회전 값이 정말 자기 멋대로여서 월드에 넣기 곤란했던 경험이 있다. 이럴 때는 이미 가져온 Static Mesh의 기본 값을 조정해줘야할 수 있는데, reimport 기능을 사용하면 된다.   회전과 크기 값을 조정하는 방법은 다음과 같다1. 기준으로 할 매시에 맞게 일단 매시를 조정 2. 해당 매시를 콘텐츠 드로어에서 우클릭 - Reimport 해주자 3. 변경할 값을 입력하고 reimport를 눌러 적용해준다   이 방법을 통해 위치 크기 회전과 값은 오프셋 값뿐만 아니라 스켈레톤과 애니메이션 연결, 콜리전 설정 매시 병합 등 import할 때 결정하는 다른 여러 내용들도 변경할 수 있다. 나처럼 지우고 다시 imp..