LYSC
Unreal Engine

언리얼 엔진 5(UE5)로의 전환을 진지하게 고민하다

2023.02.15

수년간 유니티를 메인으로 사용해왔지만, 언리얼 엔진 5의 나나이트와 루멘 기술을 접하고 느낀 압도감, 그리고 엔진 전환에 대한 고찰.

엔진 전쟁의 시대: 유니티에서 언리얼로?

게임 개발자로서 하나의 엔진에 익숙해진다는 것은 큰 자산이자 동시에 보이지 않는 벽이 되기도 합니다. 저는 지난 수년간 유니티(Unity)를 사용하며 C#의 생산성과 방대한 에셋 스토어의 혜택을 누려왔습니다. 하지만 최근 공개된 **언리얼 엔진 5(Unreal Engine 5)**의 기술적 진보는 단순한 업그레이드를 넘어 게임 제작 방식의 패러다임을 바꾸고 있다는 느낌을 주었습니다.

특히 1인 개발자로서 고퀄리티의 비주얼을 혼자서 구현하기란 불가능에 가까웠으나, UE5의 핵심 기술들은 그 장벽을 허물어뜨리고 있습니다.

나나이트(Nanite)와 루멘(Lumen): 게임 체인저

UE5를 고민하게 만든 결정적인 이유는 바로 **나나이트**와 **루멘**입니다.

나나이트(Nanite) - 가상화된 지오메트리

과거에는 폴리곤 숫자를 줄이기 위해 LOD(Level of Detail)를 수동으로 만들고 베이킹(Baking)하는 과정에 엄청난 시간을 쏟았습니다. 나나이트는 수억 개의 폴리곤을 가진 시네마틱 급 에셋을 직접 엔진에 올릴 수 있게 해줍니다. 엔진이 런타임에 지오메트리를 가상화하여 필요한 만큼만 렌더링하기 때문입니다.

루멘(Lumen) - 완전 동적 글로벌 일루미네이션

라이트맵(Lightmap)을 굽는 시간은 개발 효율을 떨어뜨리는 주범이었습니다. 루멘은 빛의 반사와 굴절을 실시간으로 계산하여, 라이트 하나만 옮겨도 씬 전체의 조명이 즉각적으로 반응합니다. 이는 아트 작업 속도를 기하급수적으로 높여줍니다.

C#에서 C++ 및 블루프린트로의 전환

가장 큰 허들은 역시 프로그래밍 언어의 전환입니다. 유니티의 C#은 관대하지만, 언리얼의 C++는 엄격합니다. 하지만 언리얼의 C++는 **블루프린트(Blueprints)**라는 강력한 비주얼 스크립팅 시스템과 긴밀하게 연결되어 있어, 로직의 핵심은 C++로 짜고 가변적인 부분은 블루프린트로 처리하는 하이브리드 방식이 가능합니다.

간단한 C++ 액터 클래스 예제

유니티의 `MonoBehaviour`에 익숙하다면, 언리얼의 `AActor` 클래스가 그 역할을 대신한다는 것을 이해하는 것부터 시작해야 합니다.

// MyActor.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class MYPROJECT_API AMyActor : public AActor
{
    GENERATED_BODY()

public:    
    AMyActor();

protected:
    virtual void BeginPlay() override;

public:    
    virtual void Tick(float DeltaTime) override;

    // 에디터에서 노출되는 변수
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MySettings")
    float RotationSpeed = 50.0f;
};

// MyActor.cpp
#include "MyActor.h"

AMyActor::AMyActor()
{
    PrimaryActorTick.bCanEverTick = true;
}

void AMyActor::BeginPlay()
{
    Super::BeginPlay();
    UE_LOG(LogTemp, Warning, TEXT("Hello, Unreal Engine 5!"));
}

void AMyActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
    
    // 매 프레임 액터 회전
    FRotator NewRotation = GetActorRotation();
    NewRotation.Yaw += RotationSpeed * DeltaTime;
    SetActorRotation(NewRotation);
}

1인 개발자의 고민: 생산성 vs 퀄리티

언리얼 엔진은 기본적으로 '무거운' 엔진입니다. 프로젝트 설정부터 빌드 시간까지 유니티보다 많은 사양을 요구합니다. 하지만 **Quixel Megascans** 라이브러리가 무료로 제공된다는 점, 그리고 나나이트/루멘 덕분에 최적화에 쏟는 시간이 줄어든다는 점은 생산성 측면에서 큰 이득입니다.

유니티가 '유연함'과 '모바일 최적화'에 강점이 있다면, 언리얼은 '압도적인 비주얼'과 '완성된 툴셋'에 강점이 있습니다. 내가 만들고자 하는 게임이 실사풍의 오픈월드인지, 아니면 가볍고 캐주얼한 모바일 게임인지에 따라 엔진 선택은 달라질 것입니다.

인사이트 요약

결론적으로 언리얼 엔진 5로의 전환은 단순히 툴을 바꾸는 것이 아니라, 기술적 한계를 뛰어넘어 더 넓은 표현의 장으로 나가는 과정입니다. C++의 복잡함은 블루프린트가 보완해주고, 비주얼적인 노동은 나나이트와 루멘이 덜어줍니다. 1인 개발자에게 UE5는 이제 거부할 수 없는 선택지가 되고 있습니다.

심화 분석: 기술적 도전과 해결책

기술적 구현의 디테일

C++를 기반으로 핵심 로직을 작성하고, 블루프린트는 상위 레벨의 이벤트 처리나 단순한 연동에만 사용하여 성능 손실을 방지했습니다. 또한 데이터 테이블(Data Table)과 비헤이비어 트리(Behavior Tree)를 활용해 복잡한 시스템과 AI를 구조화했습니다.

언리얼 엔진 5의 나나이트(Nanite)와 루멘(Lumen)은 혁신적이지만, 하드웨어 요구 사양이 높습니다. 이를 보완하기 위해 가상 쉐이딩(Virtual Shading)과 적응형 해상도 기술을 적절히 혼합하여 사용해야 합니다.

성능 벤치마크 및 최적화 지표

루멘 적용 시에도 최적화된 설정을 통해 RTX 2060 환경에서 4K 해상도로 안정적인 30FPS 이상을 확보할 수 있었습니다.

실무 적용 시 주의사항

블루프린트(Blueprint)는 강력하지만 복잡한 로직은 C++로 이전하여 성능을 확보하는 것이 좋습니다. 두 언어의 균형 잡힌 사용이 핵심입니다.

작성자 프로필

LYSC Studio

1인 게임 개발과 웹 기술에 관심이 많은 개발자입니다. 경험을 통해 배운 것을 공유하고, 함께 성장하는 것을 즐깁니다.