런타임
이 섹션에서는 babylon-mmd의 MMD 런타임 컴포넌트에 대해 설명합니다.
MMD 런타임은 MMD 모델과 카메라에 애니메이션을 적용하는 데 필요한 컴포넌트를 제공하며, 다양한 다른 시나리오를 처리하기 위한 기능도 제공합니다.
애니메이션 적용 유형
런타임을 로드하고 사용하는 방법은 작업 중인 3D 모델 및 애니메이션 데이터의 포맷에 따라 달라집니다.
예를 들어, 가장 일반적인 시나리오는 PMX 모델을 로드하고 VMD 애니메이션을 적용하는 것입니다. 이는 기본적으로 처리되며, 더 복잡한 시나리오에 대해서도 논의합니다.
설명을 진행하기 전에, 이 섹션에서 사용되는 일부 용어를 명확히 해보겠습니다:
- MMD 모델: MMD 소프트웨어에서 사용되는 PMD/PMX 포맷과 babylon-mmd의 BPMX 포맷에서 로드된 3D 모델
- MMD 애니메이션: MMD 소프트웨어에서 사용되는 VMD/VPD 포맷과 babylon-mmd의 BVMD 포맷에서 로드된 애니메이션 데이터
- 휴머노이드 모델: 인간 형태의 비 MMD 모델, 일반적으로 FBX, GLTF, VRM 포맷에서 로드됨
- 휴머노이드 애니메이션: 휴머노이드 모델에 적용되는 애니메이션 데이터, 일반적으로 FBX, GLTF, VRMA 포맷에서 로드됨
우리는 세 가지 경우에 대해 논의합니다:
- MMD 모델에 MMD 애니메이션 적용하기
- MMD 모델에 휴머노이드 애니메이션 적용하기
- 휴머노이드 모델에 MMD 애니메이션 적용하기
각 경우마다 다른 런타임 컴포넌트가 사용되므로 필요한 컴포넌트를 명확히 이해하는 것이 중요합니다.
MMD 모델에 MMD 애니메이션 적용하기
MMD 모델에 MMD 애니메이션을 적용하는 것은 babylon-mmd의 가장 기본적이고 핵심적인 기능이며, 이를 달성하기 위한 많은 옵션이 제공됩니다.
기본적으로 이는 MMD 런타임으로 처리됩니다.
MMD 런타임 컴포넌트
런타임은 기능별로 모듈화되어 필요에 따라 선택적으로 사용할 수 있습니다.
MMD 애니메이션을 적용하기 위한 다음 세 가지 프로세스는 독립적인 모듈로 분리되어 있습니다:
각 프로세스를 시각화한 이미지. 모델: YYB Hatsune Miku_10th, 모션: メランコリ・ナイト by ほうき堂, 프레임 3390.
엄밀히 말하면 Solve IK, Append Transform, Morph와 Simulate Physics의 순서는 바뀔 수 있습니다. 그러나 일반적인 시나리오에서는 대부분 그림에 그려진 순서대로 진행됩니다.
- 애니메이션 평가
- IK 해결, 트랜스폼 추가, 모프
- 피직스 시뮬레이션
각 프로세스를 처리하기 위한 다양한 메서드가 제공되며, 사용자는 필요에 따라 적절한 메서드를 선택할 수 있습니다.
애니메이션 평가
애니메이션 평가는 특정 시간 frameTime
에 대해 MmdAnimation
에서 애니메이션 데이터를 평가하는 프로세스입니다.
이를 수행하기 위해 다음과 같은 구현이 제공됩니다:
독립형:
클래스 | 설명 | 비고 |
---|---|---|
MmdRuntimeCameraAnimation | 카메라 애니메이션 평가자 구현 | 안정적이고 괜찮은 성능을 제공하는 표준 자바스크립트 구현. |
MmdRuntimeModelAnimation | 모델 애니메이션 평가자 구현 | 안정적이고 괜찮은 성능을 제공하는 표준 자바스크립트 구현. |
Babylon.js Animation
기반:
클래스 | 설명 | 비고 |
---|---|---|
MmdRuntimeCameraAnimationContainer | Babylon.js Animation 기반 카메라 애니메이션 평가자 구현 | Babylon.js 애니메이션 컨테이너 Animation 을 사용. |
MmdRuntimeModelAnimationContainer | Babylon.js Animation 기반 모델 애니메이션 평가자 구현 | Babylon.js 애니메이션 컨테이너 Animation 을 사용. |
Babylon.js 애니메이션 런타임 기반:
클래스 | 설명 | 비고 |
---|---|---|
AnimationGroup | Babylon.js 애니메이션 런타임 | 모든 프로세스를 Babylon.js 애니메이션 런타임에 위임 |
웹어셈블리 기반 독립형:
클래스 | 설명 | 비고 |
---|---|---|
MmdWasmRuntimeModelAnimation | 웹어셈블리 기반 MMD 애니메이션 평가자 구현 | 우수한 성능 제공. 카메라 애니메이션에 대한 웹어셈블리 기반 구현은 제공되지 않음. |
특수 목적 독립형:
클래스 | 설명 | 비고 |
---|---|---|
MmdCompositeRuntimeCameraAnimation | 애니메이션 블렌딩을 지원하는 카메라 애니메이션 평가자 구현 | |
MmdCompositeRuntimeModelAnimation | 애니메이션 블렌딩을 지원하는 모델 애니메이션 평가자 구현 |
IK 해결, 트랜스폼 추가, 모프
MMD 모델은 MMD 사양에 따라 제어되어야 합니다. 이를 위해 IK, 트랜스폼 추가, 모프에 대한 솔버가 필요합니다.
이를 수행하기 위해 다음과 같은 구현이 제공됩니다:
클래스 | 설명 | 비고 |
---|---|---|
MmdRuntime | 기본 구현 | 안정적이고 괜찮은 성능 제공. 상속 등을 통해 쉽게 커스터마이징 가능. |
MmdWasmRuntime | 웹어셈블리 기반 구현 | 우수한 성능 제공. 커스터마이징이 어려움. |
피직스 시뮬레이션
MMD 모델은 머리카락과 옷에 리지드바디를 적용하여 피직스 시뮬레이션을 수행할 수 있습니다.
이를 위해 다음과 같은 구현이 제공됩니다:
클래스 | 설명 | 비고 |
---|---|---|
MmdBulletPhysics | 불릿 피직스 기반 구현 | babylon-mmd에서 제공하는 웹어셈블리로 포팅된 불릿 피직스 버전. |
MmdWasmPhysics | MmdWasmRuntime 전용 불릿 피직스 기반 구현 | 가장 낮은 FFI 비용으로 최고 성능 제공. 커스터마이징이 어려움. |
MmdAmmoPhysics | Ammo.js 피직스 플러그인 기반 구현 | 약간 불안정. 낮은 성능. 웹어셈블리를 실행할 수 없는 환경에서 asm.js 버전으로 작동 가능. |
MmdPhysics | Havok 피직스 플러그인 기반 구현 | 낮은 시뮬레이션 재현성. 불안정. Havok 피직스가 필요한 특수 상황에서만 권장. |
일반적인 런타임 조합 예시
각 프로세스에 대해 최적의 런타임 조합을 선택할 수 있습니다.
커스터마이징이 쉽고 가장 안정적인 조합은 다음과 같습니다:
프로세스 | 클래스 |
---|---|
애니메이션 평가 | MmdRuntimeCameraAnimation , MmdRuntimeModelAnimation |
IK 해결, 트랜스폼 추가, 모프 | MmdRuntime |
피직스 시뮬레이션 | MmdBulletPhysics |
최고 성능 조합은 다음과 같습니다:
프로세스 | 클래스 |
---|---|
애니메이션 평가 | MmdRuntimeCameraAnimation , MmdWasmRuntimeModelAnimation |
IK 해결, 트랜스폼 추가, 모프 | MmdWasmRuntime |
피직스 시뮬레이션 | MmdWasmPhysics |
웹어셈블리를 실행할 수 없는 환경에서는 다음 조합을 사용할 수 있습니다:
프로세스 | 클래스 |
---|---|
애니메이션 평가 | MmdRuntimeCameraAnimation , MmdRuntimeModelAnimation |
IK 해결, 트랜스폼 추가, 모프 | MmdRuntime |
피직스 시뮬레이션 | MmdAmmoPhysics |
MMD 모델에 휴머노이드 애니메이션 적용하기
MMD 모델에 휴머노이드 애니메이션을 적용하는 프로세스는 MMD 모델에 MMD 애니메이션을 적용하는 것과 크게 다르지 않습니다.
위에서 언급했듯이 MMD 애니메이션은 다음 세 가지 프로세스로 구성됩니다:
- 애니메이션 평가
- IK 해결, 트랜스폼 추가, 모프
- 피직스 시뮬레이션
첫 번째 프로세스만 변경하여 MMD 애니메이션 대신 휴머노이드 애니메이션을 적용할 수 있습니다.
이를 위해 AnimationRetargeter
클래스가 제공됩니다. 이는 휴머노이드 애니메이션을 MMD 모델에 맞게 리타겟팅합니다.
Babylon.js SceneLoader를 사용하여 휴머노이드 애니메이션을 AnimationGroup
으로 로드한 후,
AnimationRetargeter
를 사용하여 휴머노이드 애니메이션을 MMD 모델에 맞게 리타겟팅함으로써 MMD 모델에 휴머노이드 애니메이션을 적용할 수 있습니다.
이 경우 애니메이션 평가 프로세스에서 AnimationGroup
이 사용됩니다.
휴머노이드 모델에 MMD 애니메이션 적용하기
유틸리티 클래스 HumanoidMmd
를 사용하여 휴머노이드 모델에 MMD 애니메이션을 적용할 수 있습니다.
휴머노이드 모델과 MMD 모델 간의 구조적 차이로 인해 MMD 애니메이션을 휴머노이드 모델에 직접 적용하는 것은 불가능합니다.
따라서 HumanoidMmd
는 프록시 스켈레톤을 사용하여 MMD 애니메이션을 적용하고 그 결과를 실시간으로 휴머노이드 모델에 리타겟팅합니다.
휴머노이드 모델에 MMD 애니메이션을 적용하는 프로세스는 MMD 모델에 MMD 애니메이션을 적용하는 것과 거의 동일하지만, 휴머노이드 모델을 MMD 모델로 래핑하는 추가 단계가 있습니다.
기타 요소
위에서 논의된 주제는 MMD 모델에 애니메이션을 적용하는 방법만 다루고 있지만, 실제로는 MMD 모델과 함께 다양한 요소가 런타임에 참여합니다.
이러한 요소들은 다음과 같습니다:
- 오디오 또는 비디오 소스
- 카메라
- UI 요소
이들은 매우 당연한 요소이지만, 매우 정교하게 구현되어 있기에 이들을 적절히 사용하기 위한 레퍼런스 문서 또한 따로 제공됩니다.