💀

UE5でMMDモデル(とか)をゲーム開発で使用したい

2024/01/05に公開

概要

UE5でMMDモデルを使用する場合、VRM4Uを用いて.pmxをインポートして各種設定・リターゲットを行うのが主流ですが、スケルトン共有などの機能は使用できない(2023/12/4時点)と明言されています。また、リターゲットをしたとしてもうまく行かないケースも良くあるので、ずっと頭を悩ませています。筆者がひたすら試してみて分かったことを以下に記します。

スケルトン依存アセットの使いまわし方

まず、UE5のスケルトン依存アセットを使いまわす方法として標準では以下の方法が挙げられます。

1.スケルトン共有

スケルトンが既存のスケルトンとほぼ同じボーン構造(末端は異なっていても可)である場合は既存のスケルトンにマージすることが出来ます。これによって複数のメッシュが一つのスケルトンを共有することが出来ます。ただし、少しでも中心部の構造が違うと共有は不可能であり、共有ができたとしてもボーンの軸の向きが違うとアニメーションが破綻する場合もあります。

2.コンパーチブルスケルトン

スケルトンの一部構造が既存のものと同じであったり、マージは出来なくはないけど複数のスケルトンのボーンが混ざりそうでしたくない…という場合はコンパーチブルスケルトンの機能が使用できます。これによって、コンパーチブル扱いしたスケルトンとアニメーションなどを共有することができます。こちらもスケルトン共有と同じで、ボーンの軸の向きが違うとアニメーションが破綻する場合があります。

3.ランタイムリターゲティング

どんなスケルトンでも汎用的にリターゲットしたい、という場合はランタイムリターゲティングが使用できます。IKリターゲッターをある程度設定した後、アニメーションBP内で「Retarget Pose from Mesh」を使用することで、任意のスケルトンを該当するスケルトンにランタイム(動的)リターゲットできます。IKリグが共有できる範囲であればどんなスケルトンでも流用が効きますが、「Retarget Pose from Mesh」ノードの後にIK関連のノードを仕込んだりして調整する必要があるでしょう。

4.リターゲットして複製

上記3つが全て不可能な場合の最終手段です。IKリターゲットを使用して、選択したすべてのアニメーションを該当のスケルトン用に変換して複製します。複製されるため、そのスケルトン固有の調整などが容易に出来るようになりますが、リターゲット元のスケルトンとの処理を共通化させたりするのが難しくなります。

ベストな方法?

もちろん、一番良いのはベースのメッシュ・スケルトンの構造が全て一致することです。
ですが、メッシュの構造が異なることが予想される場合(様々な種類のMMDを使用する場合など)はランタイムリターゲティングが有効だと考えます。リターゲットして複製してからコンパチスケルトンでロジック共有を筆者は試みましたが、やはり若干でもメッシュ構造が違うと破綻しがちです。メッシュ構造が一緒でスケルトンだけ違う場合は、スケルトンのボーン名と軸をエディターなどで編集して一致させれば、多少骨が抜けている程度ならコンパチスケルトンで流用できるかもしれません。
また、ランタイムリターゲティングを使用する場合でもスケルトン構造が一致しているに越したことはありません(ロジックやリグなどのあらゆるものが共有できるため)。なので、筆者が以前紹介したMagic Bone UE5 Rig Creatorなどを使用してスケルトン構造を一致させるよう意識しましょう。
https://zenn.dev/iamsummer/articles/da27fb2f7f2813

Discussion