
1. 시작하기에 앞서
- date
- 2월 16, 2026
- status
- Public
- tags
- unrealRL
1. 어쩌다 보니…#
회사에서 진행하던 프로젝트가 마침내 종료되었다.
프로젝트 진행 중간에 기획 방향이 갑자기 바뀌면서, 얼떨결에 강화학습을 프로젝트에 도입하게 되었다. 처음에는 “이걸 지금 단계에서 적용해도 되는 건가?” 싶은 걱정이 컸지만, 다행히 프로젝트는 무사히 마무리되었고 현재는 유지보수 기간으로 넘어가게 되었다.
사실 머신러닝이나 인공지능은 프로그래머스 부트캠프에서 공부한 이후로는 거의 손을 놓고 있었다. 하지만 이번 프로젝트를 계기로 다시 강화학습을 공부하게 되었고, 그 과정에서 단순히 모델을 학습시키는 것보다 훨씬 더 흥미로운 지점이 있다는 것을 느끼던 와중, 유튜브를 보다가 우연히 ARC Raiders 개발자인 Embark Studios의 인터뷰와 관련 자료를 접하게 되었다.
ARC Raiders에서는 로봇 NPC의 움직임을 단순한 키프레임 애니메이션만으로 처리하는 것이 아니라, 물리 기반 움직임과 머신러닝 기반 제어를 함께 활용해 훨씬 더 동적인 움직임을 만들어낸다고 한다.
특히 다리가 손상되거나 지형이 바뀌는 상황에서도 로봇이 균형을 잡으려고 반응하는 모습이 인상적이었다. 이걸 보면서 “나도 작은 규모로라도 비슷한 구조를 만들어볼 수 있지 않을까?”라는 생각이 들었다.
물론 상용 게임 수준의 시스템을 그대로 구현하는 것은 현실적으로 어렵다. 하지만 핵심 아이디어, 즉 물리 기반 로봇을 만들고, 관절 제어를 Action으로 넘기고, 이동 방향이나 자세 안정성을 Reward로 설계해 학습시키는 흐름은 충분히 실험해볼 수 있다고 판단했다.
그래서 이번 글에서는 Unreal Engine의 Learning Agents를 사용해, 간단한 거미 로봇이 강화학습을 통해 이동을 학습하는 과정을 직접 구현해보려고 한다.
2. 플랫폼 선택#
로봇이나 물리 기반 캐릭터를 강화학습으로 학습시키는 플랫폼은 여러 가지가 있다. 대표적으로 Isaac Sim, MuJoCo, PyBullet, Unity ML-Agents, Unreal Engine Learning Agents 등이 있다.
처음에는 Isaac Sim도 고려했다. Isaac Sim은 NVIDIA에서 제공하는 로봇 시뮬레이션 플랫폼이고, 실제 로봇 연구나 Sim-to-Real 분야에서 많이 사용된다. GPU 기반 물리 시뮬레이션과 로봇 센서 시뮬레이션, ROS 연동 같은 기능이 강점이다.
하지만 이번 프로젝트의 목적은 실제 로봇 제어보다는 게임 안에서 물리 기반 캐릭터가 어떻게 학습되고 움직일 수 있는지를 실험하는 것에 가까웠다. 그래서 로봇 연구 플랫폼보다는 게임 엔진 안에서 직접 에이전트, 물리, 애니메이션, 지형, 시각화까지 다뤄볼 수 있는 환경이 더 적합하다고 판단했다.
Unity ML-Agents도 좋은 선택지였다. 자료도 많고 예제도 잘 정리되어 있으며, 강화학습을 처음 실험하기에는 접근성이 좋은 편이다. 하지만 내가 만들고 싶은 것은 ARC Raiders에서 본 것처럼 묵직한 물리 기반 로봇 움직임에 가까웠고, 최종적으로는 게임 캐릭터, 지형, 애니메이션, 물리 제약을 모두 한 엔진 안에서 다루고 싶었다.
그래서 최종적으로 Unreal Engine을 선택했다.
Unreal을 고른 이유는 크게 세 가지다.
- 첫 번째는 물리 기반 캐릭터를 직접 구성해볼 수 있다는 점이다.
Skeletal Mesh, Physics Asset, Constraint, Motor Target 같은 요소를 직접 다루면서 로봇의 각 관절이 어떻게 움직이는지 확인할 수 있다. 강화학습에서 Action은 결국 관절에 전달되는 제어값이기 때문에, 물리 제약과 관절 제어를 엔진 내부에서 직접 확인할 수 있다는 점이 중요했다.
- 두 번째는 Learning Agents 플러그인을 통해 Unreal 내부에서 강화학습 루프를 구성할 수 있다는 점이다.
Agent가 Observation을 수집하고, Policy가 Action을 출력하며, Environment가 Reward와 Completion을 계산하는 구조를 엔진 안에서 직접 만들 수 있다. 이 구조는 단순한 예제 학습이 아니라, 실제 게임 오브젝트와 연결된 학습 구조를 이해하는 데 도움이 된다.
- 세 번째는 이후 확장 가능성이다.
처음에는 평지에서 걷는 것만 목표로 하더라도, 이후에는 절차적 지형을 만들고, 장애물이나 경사면을 추가하고, 발 접지 여부나 Raycast 기반 높이 정보를 Observation에 넣는 식으로 확장할 수 있다. 즉, 단순히 “걷기 성공”에서 끝나는 것이 아니라 점점 더 게임에 가까운 환경으로 발전시킬 수 있다.
물론 Unreal Learning Agents는 Isaac Sim이나 Unity ML-Agents에 비해 자료가 많지 않고, 블루프린트와 C++을 함께 다뤄야 하는 부분도 있다. 하지만 오히려 이번 실험의 목적에는 그 점이 더 잘 맞았다. 단순히 학습 결과만 보는 것이 아니라, 엔진 내부에서 Agent, Interactor, Policy, Trainer, Training Environment가 어떻게 연결되는지 직접 이해하고 싶었기 때문이다.