My Mallow - 3D 캐릭터 감정 일기
목차
내 안의 감정을 마주하는 3D 감정 일기, MyMallow를 소개합니다.
👉 English Version
MyMallow - 내 안의 감정을 마주하다
MyMallow는 Apple Developer Academy 4기 팀원들과 2개월간 진행한 iOS 프로젝트로, 자신의 감정을 의인화하고 직접 꾸밀 수 있는 3D 감정 일기 앱입니다.
사용자가 직접 그린 그림을 캐릭터의 텍스처로 적용하고, 원하는 동작을 녹화해 캐릭터가 그대로 따라 하도록 설정할 수 있습니다.
RealityKit
이번 프로젝트는 iOS의 3D 프레임워크인 RealityKit을 기반으로 진행되었습니다.
RealityKit은 3D 및 증강 현실(AR) 기반 애플리케이션을 구축할 수 있도록 지원하는 Apple의 iOS 프레임워크입니다.
고성능 렌더링, 물리 시뮬레이션, 애니메이션 시스템 등을 제공하여 몰입감 있는 3D 경험을 구현할 수 있습니다.
RealityKit에 대한 보다 자세한 내용은 아래 직접 제작한 소개 영상과 공식 문서를 참고해 주세요.
3D 모델
Blender를 이용해 3D 모델을 구현했으며, 표정과 색상을 다르게 설정하여 감정별로 여섯 개의 캐릭터를 제작했습니다.
RealityKit은 Pixar의 Universal Scene Description 형식을 지원하며, 텍스처가 하나의 바이너리로 묶인 USDZ 파일을 사용하면 편리합니다.
| 확장자 | 형식 설명 |
|---|---|
| .usd | Pixar의 USD(Universal Scene Description) 형식 |
| .usda | USD의 ASCII 포맷으로 사람이 읽고 편집 가능 |
| .usdc | USD의 압축(Binary) 포맷으로 용량 절감 및 성능 최적화 |
| .usdz | USD 포맷에 텍스처 등 리소스를 하나의 패키지로 묶은 형식 |
Blender에서 .fbx로 추출한 파일을 Reality Converter를 활용해 .usdz 형식으로 변환하여 사용했습니다.
캐릭터 텍스처는 사용자가 직접 그린 그림을 적용하도록 구현했습니다. 이 아이디어는 애니메이션 ‘짱구는 못말려’에서 그림으로 그린 캐릭터가 살아움직이는 에피소드에서 영감을 얻었습니다.
RealityKit은 기본적으로 물리 기반 렌더링을 지원하며, 3D 모델의 머티리얼을 런타임에 변경하여 텍스처를 입히는 것이 가능합니다. 앱에서는 다음과 같은 과정으로 구현했습니다.
- Blender에서 텍스처를 입힐 부위에 Material을 설정합니다.
- Blender에서 모델의 UV Layout을 추출합니다.
- Vision 프레임워크의 Contour 기능을 활용해 도면의 외곽선만 남겨 캔버스(Canvas)에 올립니다.
- 사용자가 캔버스 위에 그린 선(Path)을 이미지로 변환하여 3D 모델에 매핑합니다.
모션
MyMallow에는 다양한 카테고리의 195개 모션이 내장되어 있습니다. 내장 모션은 Mixamo에서 제공하는 애니메이션을 커스텀 모델에 적용하여 구현했습니다.
원하는 모션이 없는 경우, 모션 캡처 기술을 활용해 나만의 동작을 만드는 기능을 제공합니다. 이는 Apple ARKit에 내장된 Body Position Tracking 기술을 활용해 구현했습니다.
Mixamo와 Apple의 Body Position Tracking 기술에서 지원하는 모델의 본(Bone) 구조는 서로 다릅니다. Mixamo는 65개, Apple의 ARBodyTracking 모델은 91개의 본을 사용합니다.
커스텀으로 제작한 3D 모델에 모션을 적용하기 위해서는, 본의 구조를 맞춰주는 리깅(Rigging: 뼈대 구조와 제어 시스템을 설정하여 움직일 수 있게 만드는 작업)이 필수적입니다. 두 모델을 하나의 본 구조로 통합하려 했으나, 관절별 각도를 정밀하게 맞추는 과정이 까다로워 각각의 본 구조에 맞게 리깅된 모델을 상황에 따라 교체하는 방식으로 구현했습니다.
캡처한 모션을 그대로 적용하면 움직임이 다소 부자연스러울 수 있습니다. 이를 보완하기 위해 Low-pass 필터로 위치 이동을 보간하고, Spherical Linear Interpolation(Slerp) 필터로 회전 값을 보정하는 기능을 추가했습니다. 또한, 캡처된 모션을 원하는 길이로 편집할 수 있는 기능도 함께 구현했습니다.
내가 만든 감정 캐릭터들이 단체로 댄스를 추는 모습을 보면 기분이 좋습니다. 💃🕺
Particle
RealityKit은 눈, 비, 불과 같은 효과를 생성할 수 있는 Particle 컴포넌트를 지원합니다. 이는 Reality Composer Pro에서 디자인하거나 코드로 직접 구현할 수 있습니다. 특히 공간 음향(Spatial Audio)을 지원하여, 모닥불에 가까이 다가가면 ‘타닥타닥’ 장작 타는 소리가 실감 나게 들리도록 설정했습니다. 🔥
Skybox
물리 시뮬레이션
RealityKit의 Collision Detection을 활용해 충돌 물리 시뮬레이션을 구현할 수 있습니다. Collision Shapes로 충돌 판정 경계를 지정한 뒤 Physics Body를 적용하면 물리 시뮬레이션이 활성화됩니다.
GameplayKit은 경로 탐색이나 캐릭터 상태 관리 기능을 제공하여, 캐릭터들이 마치 살아있는 NPC처럼 자율적으로 동작하도록 만듭니다. RealityKit과 병행하여 사용하면 매우 효과적입니다.
물리 법칙이 적용된 3D Scene에서는 캐릭터의 움직임을 속도나 힘을 가하는 방식(Velocity & Force)으로 구현해야 물리 엔진이 올바르게 작동합니다. 좌표(Position)를 직접 수정할 경우, 캐릭터가 벽을 통과하는 등 물리 시뮬레이션의 현실감이 떨어지는 문제가 발생할 수 있습니다.
상태 머신(State Machine)을 활용하면 캐릭터가 특정 장소에 접근했을 때 맥락에 맞는 행동을 수행하게 할 수 있습니다. 예를 들어, 모닥불 근처에 도달하면 자동으로 자리에 앉거나 춤을 추는 상태로 전이되도록 설계했습니다. 또한 상태 전이 조건과 이동 로직을 세밀하게 조정하여, 캐릭터들이 서로 충돌하지 않으면서 조화롭게 맵을 배회하도록 제어했습니다.
시연
마무리
이번 프로젝트는 사용자의 특정 페인 포인트에서 시작하기보다, RealityKit이라는 기술을 탐구하고 이를 활용해 어떤 가치를 창출할 수 있을지 고민하는 과정으로 진행되었습니다. 3D 콘텐츠 앱의 지속 가능성을 고려해 “콘텐츠 생산의 사용자 위임”을 핵심 기획 방향으로 잡았고, 이를 구현하기 위해 RealityKit부터 3D 모델링, 리깅, GameplayKit, ARKit 모션 캡처까지 다양한 기술을 깊이 있게 접목해보는 과정이 즐거웠습니다.











