01. 物理演算の設定

顔の振り向きにあわせてリアルタイムで髪揺れの動きがつくような、物理演算を設定して書き出すことができます。

物理演算設定の追加

[プロジェクト]メニュー→[追加]→[物理演算設定]をクリックします。

「physics.json」という物理演算の設定が追加されます。

ここでは値を詳細に設定していくので、[簡単設定]のチェックを外します。

簡単設定モードの説明は物理演算の簡単設定」ページを御覧ください。

物理演算の設定

ここでは例として前髪の揺れを作ります。

まず、設定内容が分かりやすいようにラベルを変更します。

「p00」となっているラベルのプルダウンメニューを右クリックして出てくる、「名前を変更する」をクリックします。

テキストボックスに「hair_front」と入力して「OK」ボタンをクリックします。

入れる文字は半角英数にして、日本語は入れないようにして下さい。

ラベルを変更するとこのようになります。

ここから[基本]、[入力]、[出力]タブにそれぞれ値を入れて設定していきます。

設定項目にマウスを乗せると説明が表示されるので、これを参考にして進めると良いかと思います。

基本設定

[基本]タブで下記のように設定します。

ここで設定する物理演算は振り子の動きをベースにしているので、

振り子をイメージして値を設定すると良いです。

質量

揺れるパーツの質量

(振り子で言うと、重りの質量)

この値が大きいほど揺れが大きくなります。

距離

揺れるパーツの付け根から先端までの長さ

(振り子で言うとヒモの長さ)

この値が大きいほど揺れが遅くなります。

揺れの減衰率

揺れの減衰率

この値が大きいほど揺れが早く収まります。


入力設定

[入力]タブをクリックして入力設定を行います。

[+]ボタンをクリックすると、設定を入力するウィンドウが表示されます。

ダイアログが表示されたら、下記のとおりに値を入力します。

ID

揺れに影響を与える(入力)パラメータ

ここでは顔の動きに応じて揺れる前髪の設定を行なっているので、横向きの動き「PARAM_ANGLE_X」(「角度 X」)を指定します。

type

パラメータの動きの種類

ここでは顔のX軸の動きのパラメータなので、「X」を指定しています。

単位あたりの移動量

パラメータ値が1変化するときのパーツの移動量

ここでは顔の角度Xのパラメータ値が1変化したときの値なので、現実の顔の動きと照らしあわせて「5mm」=「0.005m」としています。

顔の角度Xのパラメータを30度動かすことを想定して-30~30の値で作ってある場合は、顔を1度動かしたときの移動量です。

type が角度の場合は単位は「°」になります。

影響度

パラメータの変化が揺れに影響する度合い

基本的には「1」にしておいて、調整の過程で増減させることがあります。

[OK]ボタンをクリックすると、表に設定した項目が追加されます。

顔の角度Zが変化しても髪が揺れるようにしたいので、さらに下図の設定を追加します。

顔の角度Zは首を傾ける角度のパラメータなので、type が「Angle」になっています。

これで顔の角度Xと角度Zの影響によって前髪が揺れる設定ができました。

出力設定

最後に[出力]タブをクリックして出力設定を行います。

入力設定と同様に[+]ボタンをクリックして設定を追加します。

下図のように設定します。

ID

物理演算によって動かしたいパラメータ

ここでは前髪の揺れを動かしたいので「PARAM_HAIR_FRONT」(「前髪 揺れ」)を指定します。

type

物理演算の動きの種類

ここではパラメータは前髪の揺れで振り子のように揺れる角度が変化する動きなので「Angle」を指定します。

単位あたりの移動量

物理演算の結果をパラメータのスケールへ補正するための値

パラメータの振れ幅(前髪の揺れの場合、-1~1なので、1)を、仮想的な振り子モデルでよくある振れ幅30°~45°(ここでは40)の値で

割った値が目安になるので、「0.025」を指定します。

影響度

パラメータの変化が揺れに影響する度合い

基本的には「1」にしておいて、調整の過程で増減させることがあります。

これで出力設定が完了しました。

全ての設定ができたら動作確認をします。

モデルビューをドラッグしたり、角度のパラメータを変化させたりして、前髪が揺れればOKです。

設定の追加

後ろ髪の物理演算を追加します。

[+]ボタンをクリックすると、新しい物理演算の設定を追加できます。

「label」のテキストボックスにラベル名を入力して「OK」ボタンをクリックします。

「複製」にチェックを入れて、プルダウメニューで選択された物理演算の設定を複製して追加します。

後ろ髪の設定は、下図のように設定します。

髪の量が長くなったので、基本設定の質量と距離の値を2倍にして、出力のIDを後ろ髪の揺れにして、あとは前髪の揺れと同じ値を設定しています。

このように、同じ要素の物理演算が復数ある場合は、基本設定の値を調整して作り分けると良いです。

さらなる調整が必要になったときに入力・出力設定を調整します。

JSON設定ファイルの書き出し

[プロジェクト]メニュー→[書き出し]→[物理演算]で、JSON設定ファイルを書き出すことができます。

アクセサリーやスカートなど、服装ごとに揺れるものがある場合は、 moc の名前と揃えて服装ごとに書き出します。

これでファイルの書き出しは完了です。

よくある設定の例

よくある設定の例を紹介します。

前髪の揺れ(顔の角度XとZで揺れる)

この設定を入れてみてから基本設定で揺れ具合を調整すると良いです。

また下記のパラメータ値の振れ幅を想定しての設定値なので、これと違う場合は「移動量」の調整が必要です。


顔の角度X : -30~30

顔の角度Z : -30~30

前髪の揺れ : -1~1

前髪の揺れ(顔の角度XとZ+体の回転XとZで揺れる)

顔だけでなく、体の回転の影響でも髪が揺れるようにした設定です。

下記のパラメータ値を想定しての設定です。


顔の角度X : -30~30

顔の角度Z : -30~30

体の回転X : -10~10

体の回転Z : -10~10

前髪の揺れ : -1~1

入力設定で同じタイプが復数ある場合は影響度の値に注意して下さい。

タイプが1つなら、影響度は1でOKです。


※ 影響度について

タイプが復数ある場合は影響度の値を調整する必要があります。

前提として、物理演算は入力設定の表の下にある項目から計算されます

どのような計算になるのか、上図のタイプXについて例にあげて説明します。


( i ) PARAM_ANGLE_X の影響度が 1 、PARAM_BODY_ANGLE_X の影響度が 1 の場合

まずは、表の下にある顔の角度X(PARAM_ANGLE_X)から揺れ具合が計算されます。この結果を A とします。

影響度が1なので、A が100%影響を与えることになり、

1 * A = A

よって、PARAM_ANGLE_X の計算結果は A になります。

次に、体の角度X(PARAM_BODY_ANGLE_X)から揺れ具合が計算されます。この結果を B とします。

影響度が1なので、B が100%影響を与え、前の計算結果 A は残りの0%影響を与えることになり、

1 * B + ( 1 - 1 ) * A = B

よって、この物理演算の最終的な結果は B になります。

あとから計算される B によって A が上書きされて、結果的に顔の向きXは揺れに影響を与えないようになってしまいました。

やってはいけない設定です

これでは設定した意味がないので、次のように影響度の値を変更した場合を考えてみましょう。


( ii ) PARAM_ANGLE_X の影響度が 1 、PARAM_BODY_ANGLE_X の影響度が 0.5 の場合

まずは、表の下にある顔の角度X(PARAM_ANGLE_X)から揺れ具合が計算されます。この結果を A とします。

影響度が1なので、A が100%影響を与えることになり、

1 * A = A

よって、PARAM_ANGLE_X の計算結果は A になります。

次に、体の角度X(PARAM_BODY_ANGLE_X)から揺れ具合が計算されます。この結果を B とします。

影響度が0.5なので、B が50%影響を与え、前の計算結果 A は残りの50%の影響を与えることになり、

0.5 * B + ( 1 - 0.5 ) * A = 0.5 A + 0.5 B

となり、この物理演算の結果は 0.5 A + 0.5 B になります。

つまり、AとBの計算結果の影響がそれぞれ半分ずつになります。


一見、これでイイように思えますが、ビューアに設定して確認してみると髪の揺れが小さくなってしまいます

これは計算結果から分かるように、顔の向き・体の向きによる髪の揺れ具合が半分になっているからです。

顔の向きによる髪の揺れはとても重要で、一般的なモーションや「マウスの位置を追いかける」では顔の向きの動きが大半を占めています。

それでは、顔の向きでの髪の揺れ具合をそのままにして体の動きでも髪を揺らすために、次のように影響度の値を変更した場合を考えてみましょう。


( iii ) PARAM_ANGLE_X の影響度が 2、PARAM_BODY_ANGLE_X の影響度が 0.5 の場合

まずは、表の下にある顔の角度X(PARAM_ANGLE_X)から揺れ具合が計算されます。この結果を A とします。

影響度が2なので、A が200%影響を与えることになり、

2 * A = 2 A

よって、PARAM_ANGLE_X の計算結果は 2 A になります。

次に、体の角度X(PARAM_BODY_ANGLE_X)から揺れ具合が計算されます。この結果を B とします。

影響度が0.5なので、B が50%影響を与え、前の計算結果 2 A は残りの50%の影響を与えることになり、

0.5 * B + ( 1 - 0.5 ) * 2 A = A + 0.5 B

となり、この物理演算の結果は A + 0.5 B になります。

つまり、Aの結果はそのままで、Bの結果が半分だけ影響を与えることになります。


これで顔の向きによる髪の揺れ具合はそのままに、体の動きによっても髪が揺れるようになります。

ただ、2つのパラメータをあわせて150%の計算結果になっていますので、

2つのパラメータが最大の振れ幅になったときに髪の揺れが振り切れないように気をつけて各設定を調整して下さい。


今回は影響度の設定を ( iii ) の場合を採用して髪の揺れを調整しましたが、動かすパーツによっては、均等に影響を与える ( ii ) の

場合の方が都合が良いかもしれません。

物理演算の目的に応じたそれぞれの設定の値を探しだしてみて下さい。