Unreal Engine 揺れもの物理プラグイン検証:Kawaii Physics & SPCR Joint Dynamics
1.はじめに
こんにちは。技術統括部の曹です。
皆さん、普段ゲームする時にキャラクターの髪の毛やスカート、マントなどの動きが気になったことはありませんか?リアルな揺れ表現はキャラクターの魅力を引き立て、没入感のある体験に繋がります。
今回は、Unreal Engineで使用可能な2つの揺れものプラグイン「Kawaii Physics」と「SPCR Joint Dynamics」について、実際に使用しながらそれぞれの特徴や設定方法、揺れ表現の差異を比較・検証してみました。
2.検証対象プラグイン
■ Kawaii Physics
- https://github.com/pafuhana1213/KawaiiPhysics
- 「かんたんに」「かわいく」揺れものを作るプラグイン。使いやすく採用実績も多いようです。
■ SPCR Joint Dynamics
- https://github.com/SPARK-inc/SPCRJointDynamicsUE4
- よりリアルな物理挙動を表現するプラグイン。
3.使用手順
手順はどちらのプラグインも同じです。
- 事前に、キャラクタのモデルを用意します。骨入れ・スキニングを行っておく必要があります。今回は、Unreal Engineのマネキンに、マントとスカートをつけたテスト用データと、アニメーションを用意しました。
- Unreal Engineのプロジェクトを作成し、上記をダウンロードして、プラグインのフォルダに置きます。
- Animation Blueprint 上でノードを編集して、骨の動きを制御した結果をキャラクターのポーズに反映させます。
- ノード内で、計算対象のボーンを指定した後、コリジョンやパラメータを設定します。


4.パラメータについて
両者とも同じような機能を備えており、大きく分類すると下記のようなパラメータがあります。
パラメータの分類 | Kawaii Physics | SPCR Joint Dynamics |
揺れ制御 | Damping, Stiffness | Resistance, Hardness |
拘束 | Bone Constraint, Limit Angle | Structural, Limit |
コリジョン | Limits(Sphere, Capsule, Plane) | Collider(Sphere, Capsule) |
その他 | Gravity, Wind, External Forces | Gravity, Wind |
SPCR Joint Dynamicsは、上記以外にも設定できるパラメータが多くきめ細かな設定ができます。
設定の自由度や挙動の自然さに違いがあるため、本記事では主にマントとスカートの設定で両者を比較します。
5.Kawaii Physicsの使用感
まずはマントを試してみます。揺れ計算対象の骨を指定し、他のパラメータはデフォルトのままでいい感じの揺れ感が出ました。

次にスカートを試してみました。揺れ計算対象の他に、両足にコリジョンをつけて動かしましたが、ふとももがはみだします。どうやら、縦方向の拘束だけが生成されているようです。


v1.14.0から追加された骨間の距離拘束機能により、横方向の拘束を設定できます。一本一本の骨を選択する作業が必要ですが、これにより足のはみだしは改善されます。


6.SPCR Joint Dynamicsの使用感
SPCR Joint Dynaimicsのスカート表現を試してみました。SPCR Joint Dynaimicsでは、パラメータでの選択によって縦方向、横方向に加え、斜め方向の拘束も半自動で生成できます。Kawaii Physicsよりはみだしが少なくなりました。ですが、拘束が多いほど動きは硬くなります。


横方向と縦方向の拘束を付けたマントも試してみました。Kawaii Physicsと比較するとやや動きが硬い印象です。

7.パラメータの細かい比較
両者のコリジョン設定、揺れ制御パラメータ、カーブと風について、少し深く触って比較してみました。
7.1.コリジョンについて
Kawaii Physicsは、球体・カプセル平面の三種のコリジョンが設定できます。
SPCR Joint Dynamicsでは球体とカプセルの二種類です。
なお、Kawaii Physicsでは、コリジョンを変更するとプレビュー画面に反映されますが、SPCR Joint Dynamicsではコンパイルをしないと反映されません。コリジョンの大きさ変更など、プレビューしながら調整できるKawaii Physicsの方が使いやすいです。

7.2.揺れ制御パラメータの挙動比較
値の違いを分かりやすく表現するために、この部分はマントで比較を行います。
● Kawaii Physics
– Stiffness(硬さ)
Stiffnessを高くするほど、元の形に戻る力が強くなり、布の張り感が出ます。





– Damping(減衰、揺れの収束を制御)
値を高くすると揺れが早く収まり、低いとフワフワと長く揺れます。





● SPCR Joint Dynamics
– Hardness(硬さ)
値を上げることで、剛性が強くなり、柔らかい布から硬いプレートのような動きになります。





– Resistance(空気抵抗)
値を上げると空気の影響を受けやすくなり、動きが重くなります。





7.3.カーブについて
根本はあまり動かさず末端をひらひらさせるなど、場所によって異なるパラメータ値を指定したい場合はカーブを利用します。両方のプラグインとも、上記のパラメータをカーブで制御することができます。
「マントの後ろが重いものに引っ張られる」表現を例にします。
Kawaii PhysicsのStiffnessカーブを図7.3.1のように設定しました。骨の値は先端に近くと低くなり、末端に近くと大きくなります。



SPCR Joint DynamicsのHardnessカーブを図7.3.4のように設定しました。



7.4.風の比較
● Kawaii Physics(左の図)
UEの風アクターと連動可能。風による動きも簡単に実装できます。
● SPCR Joint Dynamics(右の図)
Blueprint上で風の方向やスピードを細かく調整可能。物理計算に基づいた風の影響を表現できます。


8.まとめ
● Kawaii Physics
- 設定がシンプルでわかりやすいため、使いやすいです。また、デフォルトの設定でも、簡単にアニメ調の揺れと「可愛らしい」表現を実現できます。
- 拘束について、縦方向の拘束は簡単に設定できますが、横方向や斜め方向の拘束設定では手作業が多くなります。
- 突き抜けを回避するには、拘束設定とコリジョン設定以外には方法がないようです。
● SPCR Joint Dynamics
- 今回ご紹介したもの以外に、パラメータが豊富に用意されており、細かな設定をするのに向いています。設定すれば、写実的な布の物理挙動を再現できるかもしれません。ただし、その代わりに動きがやや硬くなります。
- 横拘束の作成は半自動で行えるため、設定が容易です。
- 負荷が高くなりますが、サーフェスコリジョン判定など、突き抜けを回避する方法が他にも用意されています。
今回のブログはUnreal Engineの揺れものプラグイン「Kawaii Physics」と「SPCR Joint Dynamics」を簡単に検証してみました。表現の拡張としては、どちらのプラグインも特徴があり、素晴らしい表現ができると感じました。角度制限や重力機能などは今回検証していませんが、別の機会に試してみたいと思います。
なお、シリコンスタジオでは、2つのプラグインの検証結果をもとに、設定の容易さ、自然な揺れ表現を追求し、「Silicon Studio Bone Dynamics(シリコンスタジオ ボーンダイナミクス)」というプラグインを開発しました。詳しくはこちらのWebページをご覧ください。
https://tech.siliconstudio.co.jp/products-service/bone-dynamics/
9.参考資料
Kawaii Physics 各パラメータについて About each parameters
揺れモノ超ド素人がKawaiiPhysicsを使って、感覚を頼りに女性キャラクターモデルのKawaiiを増す方法まとめ