상세 컨텐츠

본문 제목

Unreal Engine에서 실시간 3D Scene Reconstruction 구현하기 (2)

카테고리 없음

by zmo 2025. 2. 8. 22:53

본문

오늘은 Unreal Engine에서 실시간 3D Scene Reconstruction 구현하기의 첫번째 단계인 Unreal Engine설정을 먼저 하려고 했는데.. 버전이 작동하지 않아 어떻게 설정할지 먼저 알아보고 이와 관련된 메뉴 혹은 API에 대해 알아보도록 하자.

 

 

오늘 알아보기

Unreal Engine 설정 방법

Depth

RGB 데이터

Python API를 활용한 데이터 추출

UnrealCV

 

 


 

Unreal Engine 설정 방법

  1. Scene Capture Component 2D 추가
    • Unreal Engine에서 새로운 Blueprint Class (BP_Capture) 생성
    • Actor 기반으로 Scene Capture Component 2D를 추가
  2. Render Target 설정
    • Scene Capture Component 2D의 Texture Target 생성
    • Render Target을 HDR (High Dynamic Range)로 설정하여 Depth 저장 가능
  3. Blueprint를 사용해 Depth & RGB 데이터 저장
    • Render Target을 Texture2D로 변환
    • Export Render Target을 사용하여 이미지 저장
  4. Python API를 활용한 데이터 추출 (UnrealCV 사용 가능)
    • Unreal Engine에서 Python API를 사용하여 Depth & RGB 데이터를 자동으로 저장 가능

Depth (깊이 데이터)

Depth 데이터는 카메라에서 특정 픽셀까지의 거리를 나타내는 정보를 의미한다. 이는 Depth Map(깊이 맵) 형태로 저장되며, 흑백 이미지처럼 보이지만 각 픽셀 값이 거리(깊이)를 나타낸다.

Unreal Engine에서 Depth 데이터를 얻는 방법은 다음과 같다.

  • Scene Capture Component 2D: Render Target을 이용하여 Depth Texture를 생성하기.
  • UnrealCV (Unreal Camera Virtualization): Depth 이미지를 추출하는 데 유용한 플러그인.
  • Custom Shader: Unreal Engine의 Post Process Shader를 활용하여 Depth 값을 저장.
  • RGB-D 카메라(예: Kinect, RealSense)처럼 Unreal Engine의 가상 카메라에서 Depth 정보를 생성.

RGB 데이터

RGB 데이터는 말 그대로 컬러 이미지 데이터를 의미한다. 우리가 사용하기에 일반적으로 Unreal Engine에서 카메라로 출력되는 이미지를 캡처하여 저장할 수 있다. 물론 손으로 캡처하는 것은 많은 수고가 들기 때문에 보통 다음과 같은 방법을 사용한다.

  • Scene Capture Component 2D: Unreal Engine에서 가상의 카메라를 배치하여 이미지 저장.
  • UnrealCV: Unreal Engine에서 Python API를 사용하여 쉽게 이미지 캡처 가능.
  • Viewport Rendering: 특정 뷰포트를 렌더링하여 이미지 데이터를 저장.

Depth 데이터를 가져올때와 비슷하게 가져올수 있으며 보통 멀리 설치해 놓은 카메라의 화면을 보는데(?) 사용하기 때문에 이 데이터들은 게임에서 나오는 캐릭터 창이나 아이템을 확대해서 보여주는 등의 기능에 사용한다. 

 

Python API를 활용한 데이터 추출

Unreal Engine에서는 Python API를 제공하여 엔진 내 객체를 조작하고 데이터를 추출할 수 있다.

Unreal Engine의 unreal Python 모듈을 사용하여 카메라 제어하고, 게임 내 객체 위치, 카메라 포즈, 랜더링된 RGB/Depth 이미지 데이터 저장하여 Machine Learning 데이터셋 생성을 자동화시켜준다.

 

그렇다면 직접 Python에서 Unreal Engine의 카메라 데이터를 추출해보자

import unreal

# 카메라 액터 가져오기
camera_actor = unreal.EditorLevelLibrary.get_selected_level_actors()[0]

# 현재 위치 및 회전 정보 얻기
location = camera_actor.get_actor_location()
rotation = camera_actor.get_actor_rotation()

print(f"Camera Position: {location}, Rotation: {rotation}")

 

UnrealCV (Unreal Camera Virtualization)

UnrealCV는 Unreal Engine과 Python을 연결하여, 게임 환경에서 RGB, Depth, Object Mask 데이터를 쉽게 추출할 수 있도록 도와주는 플러그인이다. https://github.com/unrealcv/unrealcv 언리얼의 공식 github에서 다운받아 사용할수 있다.

아주 쉽고 빠르게 데이터를 추출할수 있으므로 어떻게 사용하면 좋을지 예제 코드를 통해 알아보자.

 

Python 예제 코드

import unrealcv

# UnrealCV 서버 연결
client = unrealcv.Client(('localhost', 9000))
client.connect()

# RGB 이미지 캡처
image = client.request('vget /camera/0/lit png')

# Depth 이미지 캡처
depth = client.request('vget /camera/0/depth png')

# 결과 저장
with open('rgb.png', 'wb') as f:
    f.write(image)

with open('depth.png', 'wb') as f:
    f.write(depth)