# LibMmd Core

UnityでPMD／PMXモデルとVMD／VPDモーションを実行時に読み込みます。

## 要件

- Unity 6000.3以降
- Animation Rigging 1.4.1
- Burst 1.8.29
- Collections 2.6.7

## 使い方

```csharp
using LibMMD.Unity3D;
var options = new MmdModelOptions
{
    Physics = MmdPhysicsMode.Unity,
    LoadingFrameBudgetMilliseconds = 2f,
    UseResourceCache = true
};

IMmdModelInstance mmd = MmdModelInstance.Create(options);
yield return mmd.LoadModel(modelPath);
yield return mmd.LoadMotion(motionPath);

mmd.IsLooping = true;
mmd.IsPlaying = true;
```

モデル解析はバックグラウンドで実行され、Unityオブジェクト生成はフレーム予算内に
分割されます。`LoadingFrameBudgetMilliseconds` を小さくするとFPSを維持しやすく、
大きくするとロード完了までの時間を短縮できます。

PNG／JPEG／BMP／対応TGAの読込・デコードとテクスチャのアルファ解析も、初回ロード時の
フレーム停止を抑えるよう非同期化・分割されます。ロードログには各工程の`wall`、`main`、
`maxSlice`が出力され、FPS低下の原因をモデル単位で確認できます。

VMD再生時は、PMXの左右の脚長をモーション割当時に測定し、`全ての親`、`センター`、
`グルーブ`、左右の足IK／つま先IKの移動量をモデル比率へ自動補正します。回転および
ネクタイ・髪・しっぽなどモデル独自のIKは変更しません。補正用の骨格解析は再生中に
繰り返し実行されません。

Core単体の物理モードは `None` と `Unity` です。`Bullet` は
`com.koiusa.libmmd.bullet`、`MagicaCloth` は `com.koiusa.libmmd.magicacloth` を導入すると利用できます。

## ライセンス

詳細は `LICENSE.md` と `Third Party Notices.md` を参照してください。
