PROJECT OVERVIEW
흡입·수집·성장이 이어지는 슬라임 탐험
말랑원정대는 Slime Rancher의 핵심 경험을 재구성한 Simulation / Action Adventure 프로젝트입니다. 플레이어는 월드를 탐색하며 슬라임과 자원을 Vacpack으로 수집하고, 보관한 대상을 활용해 재화와 능력을 확장합니다.

이동과 상호작용을 개별 기능으로 나열하기보다 탐색 → 수집 → 관리 → 활용 → 성장이 반복되는 하나의 플레이 루프로 연결하는 데 초점을 두었습니다.
MY CONTRIBUTION
논문의 제약 기반 물리 모델을 실제 게임의 슬라임 표현으로 옮기고, 다수 개체가 등장하는 환경에서도 유지할 수 있도록 다음 두 시스템의 설계와 구현을 담당했습니다.
- XPBD 기반 슬라임 파티클·Distance·Volume·Collision 제약 계산
- Unreal Insights 분석과 거리·시야 기반 Custom Simulation LOD 구조
01 / XPBD SOFT-BODY SIMULATION
소프트바디 물리 시뮬레이션을 논문에서 게임 구현까지
강체 물리만으로는 슬라임의 눌림과 복원을 표현하기 어려웠습니다
슬라임은 충돌할 때 표면이 눌리고 늘어난 뒤 원래 형태로 복원되어야 합니다. 이를 힘 기반 Soft Body로 구성하면 안정적인 실시간 결과를 위해 작은 시간 간격과 반복적인 파라미터 조정이 필요했습니다. 특히 Solver 반복 횟수와 프레임 시간에 따라 강성이 달라지면 동일한 슬라임도 실행 조건마다 다른 움직임을 보일 수 있었습니다.
기반으로 삼은 논문은 Macklin, Müller, Chentanez의 XPBD: Position-Based Simulation of Compliant Constrained Dynamics입니다. 기존 PBD의 단순성과 안정성을 유지하면서 Compliance와 누적 Lagrange Multiplier를 도입해 시간 간격과 반복 횟수에 대한 강성 의존을 줄이는 접근을 적용했습니다.

각 제약을 반복 해결해 변형과 복원을 하나의 흐름으로 만들었습니다
Static Mesh의 Render Data에서 Vertex와 Triangle을 읽어 런타임 Dynamic Mesh와 파티클을 구성했습니다. 매 프레임 외력으로 위치를 예측한 뒤 Distance·Volume·Collision 제약을 반복 해결하고, 보정된 위치로 속도와 Dynamic Mesh의 Vertex를 갱신했습니다.

물리 논문의 제약 계산을 Unreal Engine의 런타임 메시와 충돌 흐름에 연결해, 시간에 따라 눌리고 복원되는 슬라임의 플레이 표현을 구현했습니다.
02 / CUSTOM SIMULATION LOD
보이는 품질은 유지하고, 보이지 않는 Solver 비용은 줄이다
모든 슬라임에 같은 계산을 적용하면 CPU 비용이 급격히 증가했습니다
각 슬라임은 파티클 예측과 세 종류의 Constraint Solver를 여러 번 반복합니다. 300마리 이상의 개체가 동일한 Full Simulation을 매 Tick 수행하면서 초기 버전은 평균 10–15 FPS, 슬라임 1개당 1회 처리 시간이 약 21ms까지 증가했습니다.
비용 조절 기준
거리 기준으로 1,000 / 4,000 / 10,000 Unreal Unit 구간을 나누고, 멀어질수록 Solver 반복 축소·시뮬레이션 정지·Actor 제거 단계로 전환했습니다.
시야 방향 기준을 함께 사용해 화면 안의 슬라임은 최대 LOD 1까지만 허용하고, 화면 밖의 슬라임은 한 단계 더 낮춰 보이지 않는 계산을 우선 줄였습니다.
표현 품질과 계산량을 함께 제어하기 위해 근거리 LOD 0은 5회, LOD 1은 2회 Solver를 반복하고 LOD 2부터는 파티클 계산을 중단했습니다.
Unreal Insights로 병목을 찾고 거리·시야 기준으로 계산 단계를 나눴습니다
TRACE_CPUPROFILER_EVENT_SCOPE로 RunXPBD와 각 Solver의 CPU 시간을 분리해 확인했습니다. 이후 카메라 거리와 시야 방향을 함께 판단해 근거리에서는 전체 변형을 유지하고, 멀거나 보이지 않는 슬라임은 반복 횟수 감소·시뮬레이션 정지·제거 단계로 전환했습니다.
10–15 FPS
300마리 이상
슬라임 1개 · 1회 약 21ms
25–30 FPS
21ms → 2,751μs
약 86.9% 단축
40–50 FPS
LOD 1 · 206 → 127μs, 38.9% 단축
LOD 2 · 206 → 4μs, 98.1% 단축
측정 조건: 슬라임 300마리 이상 배치, Unreal Insights CPU Profiling 기준. μs 수치는 슬라임 1개당 1회 처리 시간입니다.
Custom LOD 적용 후 300마리 이상의 슬라임 환경에서 평균 40–50 FPS를 확보하면서, 가까운 슬라임의 말랑한 움직임은 유지했습니다.
RESULT & GROWTH
수식을 플레이 감각으로, 병목을 설계 기준으로
수식을 런타임 구조로 번역
XPBD의 Compliance와 Lagrange Multiplier를 Unreal Engine의 파티클·Dynamic Mesh·충돌 처리로 옮기며, 논문의 수식을 실제 게임 시스템으로 구현하는 과정을 경험했습니다.
복잡한 변형을 작은 제약으로 분리
슬라임의 형태를 한 번에 계산하지 않고 Distance·Volume·Collision Constraint로 나누어, 각 물리 특성을 독립적으로 분석하고 조정할 수 있도록 구성했습니다.
프로파일링 결과로 품질 단계를 결정
Unreal Insights에서 측정한 병목을 기준으로 거리와 시야에 따른 Simulation LOD를 설계하며, 시각적 품질과 CPU 비용 사이의 기준을 수치로 판단하는 습관을 갖게 되었습니다.
말랑원정대를 통해 논문의 물리 모델을 게임 플레이로 구현하고, Constraint Solver의 책임을 분리하며, 측정 결과를 바탕으로 시뮬레이션 비용을 설계하는 개발자로 성장할 수 있었습니다.
↑ 맨 위로