リジッドボディとジョイントの作成②


はじめに

BlenderでMMDモデルを制作しています。趣味です。

前回は制作中のモデルの髪に剛体とジョイントの作成を行いました。

今回の主な作業内容です。

  • リボン、スカートに剛体とジョイントの作成
  • Blenderで歩行アニメーションを作成
  • MMDで動作確認

尚、記事の内容については正確性を保証致しません。
解説ではなく、個人のメモ、備忘録のような情報としてお読みください。

以下の環境でモデルの制作を行っています。

ソフト、アドオン
Blender3.35LTS
mmd_tools2.8.0
PmxEditor0.2.5.7
制作環境

今回の成果

この投稿のために作成した各動画をひとつにまとめました。

【Blender】Rigging on mmd_tools【Rigidbody & Joint】

レンダーエンジンはEeveeです。Cyclesだと書き出しにかなりの時間を要するため、Blender上のレンダリングは全てEeveeで行いました。


剛体とジョイント

今回は製作者の皆様のモデルを参考にせず、私の勘で作成しています。
一般的なMMDモデルの制作方法と異なっている可能性がありますので、その点ご了承下さい。

リボン

物理演算でリボンが揺れる仕組みを作りました。

Ribbon Animation

今回はリボンの剛体と胸部(上半身2)の剛体の関係に注目して取り組みました。

具体的には、リボンが揺れた際に胸部の剛体と接触し、身体の内側にリボンが入り込んでいかないように調整を試みました。
ジョイントの角度制限の設定はデフォルトで変更を行わず、剛体間の衝突に任せてみました。
これについてはある程度成功したように思います。

リボンの剛体と上半身2の剛体の様子

しかし、リボンの左右の帯で同じ剛体を共有しているため、揺れ方が全く同じですので、これはちょっと不自然に見えます。
振り子がふたつあれば、互いの距離は常に一定ではなく、場合によっては重なり合うようなタイミングもあるのではないか、と思います。

いずれ左右の帯で別の剛体・ジョイントを設置してみたいと考えています。

スカート

物理演算でスカートが揺れる仕組みを作りました。

Skirt Animation

こちらも剛体と剛体の衝突に着目して取り組みました。

スカートに設置した各剛体がのサイズが細いと、足の剛体と接触した際に左右に押し出されてしまうようでした。メッシュの変形の様子で言えば、伸ばされたスカートの間から足が突き出てくるような印象です。

この現象は、Z軸の角度制限により捻じれが生じないように設定をしても発生するので、おそらく衝突する剛体の形状やサイズが影響しているのではないか、と考えました。

そこで、スカートの各剛体を薄い長方形の板のように調整しました。
加えて、膝を高く持ち上げても問題ないように、足の正面の剛体は他より一段高い所から設置しました。

足の剛体がスカートの剛体を正面に押し出すような動きを作ることができました。

足を前に出す動作の場合、衝突する剛体間でY軸にズレが無ければよりスカートの剛体に捻じれを生じさせないようにできるのではないか?と思います。

そう考えると、剛体の衝突を考慮し、身体のメッシュとスカートのメッシュのトポロジーをなるべく合わせて作っておくべきだった、と思いますが、これは反省点として今後に活かしたいです。

MMDで動作確認

mmd_toolsから.pmxに変換し、PmxEditorで調整後、MMDで動作確認しました。

Operation Check on MMD

スカートの動きは問題ないように思います。

リボンも揺れています。
ただ、素材が繊維というよりはゴムのような印象を受けますので、パラメータを調整して修正をしてみたいと考えています。

以下、今後の課題です。

  • リボンの帯に左右でそれぞれ剛体を設置
  • 素材らしさが伝わるパラメータの模索
  • 胸の剛体の作成

上半身2の剛体を接触すれば大丈夫、と思っていましたが、Y軸の揺れでリボンが胸の内側に入り込んでしまう可能性があると気づきました。

リボンに限らず、ネクタイ等でも同じ問題は発生すると思います。
いずれ胸のボーン及び剛体の作成を取り組んでみたいと考えています。


歩行アニメーション

参考資料

mmCGさんの歩行アニメーション解説を参考にさせて頂きました。

【Blender 2.91 Tutorial】歩行アニメーション解説 – How to make the Walk Animation【Clothシミュレーション】

アニメーション制作にグラフエディターを活用されているのがとても勉強になりました。

尚、動画で扱われている以下の点については作成及び設定を行っていません。

  • 物理演算プロパティからクロスのエフェクト追加
  • フォースフィールド(風)の追加

剛体間の接触に着目したかったことと、MMDリジッドボディと上記のエフェクトが同時に機能するか見通しが立たなかったこと、それらが理由です。

歩行アニメーション

足IK親、足IK、つま先IK、肩、腕、ひじを左右で操作し、モーションを作成しました。

Walking Animation on Blender

足裏のグリップ感がまだ弱いですね。地面を捉えている足裏がややスリップしている印象を受けます。
これはグラフエディターでの調整が甘いことが原因であると思います。

グラフエディター

概要

グラフエディターでは横軸が時間経過(フレーム)、縦軸が各プロパティの変化を表すグラフがメイン領域に表示されます。

グラフエディターについてBlender Manualを参照します。

The Graph Editor allows users to adjust animation curves over time for any animatable property.

https://docs.blender.org/manual/en/3.3/editors/graph_editor/introduction.html

続いてCurveとKeyframesについて参照します。

Curve

The curve defines the value (Y axis) of the property over time (X axis).

Keyframes

Keyframes are user-defined values on certain frames and are represented by little black squares which become orange if selected.

https://docs.blender.org/manual/en/3.3/editors/graph_editor/introduction.html

続いてF-Curveについて参照します。

After animating some property in Blender using keyframes you can edit their corresponding curves. When something is “animated”, it changes over time. This curve is shown as something called an F-Curve.
Basically what an F-Curve does is an interpolation between two animated properties. In Blender, animating an object means changing one of its properties, such as the object’s location, or its scale.

https://docs.blender.org/manual/ja/3.3/editors/graph_editor/fcurves/introduction.html

プロパティの変更をユーザー自らがフレーム毎に行うのではなく、F-Curveを使用する利点について説明が続きます。

簡単に言えば、Keyframes間の各プロパティ(位置、回転etc)の変化はBlenderが自然な振る舞いになるように計算します、ということのようです。

今回の場合

参考資料の参考動画内では、F-Curveの補間方法の変更を行っています。
詳細は割愛しますが、補間方法の変更によってより自然なモーションを作成されています。

動画を参考にして、私も補間方法の変更作業をしたはずなのですが、確認してみると出来ていませんでした。
修正を行おうとして、他の作業に手をつけた結果、この作業が抜け落ちてしまったようです。

この辺りが足裏のグリップ感が弱い原因だと思います。
(全ての親のY軸の位置の変化量の調整が足りていない可能性もあります)

Rigidbody World

mmd_toolsのシーン設定、その中のリジッドボディ物理演算について私なりに調べました。

概要

この項目はBlenderのシーンプロパティ内、リジッドボディワールドと一致するようです。

クリックで拡大できます
サブステップとソルバー反復数

Blender Manualを参照します。

Steps per Second

Number of simulation steps made per second (higher values are more accurate but slower). This only influences the accuracy and not the speed of the simulation.

https://docs.blender.org/manual/en/latest/physics/rigid_body/world.html

Solver Iterations

Amount of constraint solver iterations made per simulation step (higher values are more accurate but slower). Increasing this makes constraints and object stacking more stable.

https://docs.blender.org/manual/en/3.3/physics/baking.html

大雑把に言ってしまえば、これらのパラメータが高いことで物理演算の精度が上がる、ということのようです。

デフォルトではサブステップ、ソルバー反復数ともに値は10でした。

キャッシュ

Blender Manualを参照する限りでは、ここでキャッシュに関する細やかな設定ができるようです。
キャッシュリストを例に挙げます。

Caches List

Blender allows for storing and managing multiple caches at once for the same physics object. You can manage the caches with this list view. Double-click the cache entry to give it a name.

https://docs.blender.org/manual/en/3.3/physics/baking.html

しかし、実際には物理演算の開始と終了のフレームを指定する欄があるのみとなっています。

  • Blender Manualが更新されていない?(失われた機能である可能性)
  • mmd_toolsをインストールしているから?
  • キャッシュを作成する程のデータ量ではないから?

上の画像を参照して頂くと、現在使用中のメモリー量、「キャッシュは無効!」と表示されているのが確認できると思います。

色々と想像してみますが、結局のところ理由は分かりません。

今回に限れば、キャッシュリスト等の設定が利用できない故の不都合が生じるということはありませんでした。

シミュレーションの開始、終了

物理演算が行われる開始フレームと終了フレームを指定します。

ここで指定した開始と終了の間に、タイムラインで指定する開始と終了のフレームが全て含まれている必要があります。

例えば、下記のような設定であったと仮定します。

項目開始終了
物理演算
the Start and End frames of the Cache panel
0250
タイムライン
the Start and End frames of the Rendering
0390

この場合、レンダリングより先に物理演算シミュレーションが終わってしまうため、251フレーム以降は物理演算が働いていない環境でレンダリングが行われることとなります。

具体的には、251フレーム以降は髪や衣装に設置した剛体が置き去りにされ、メッシュの変形が不自然になります。(実際に私が体験した例です)

ベイク、ベイクを削除

Blender Manualを参照すると、物理演算のベイクについて下記の記述が見つかります。

It is generally recommended to bake your physics simulations before rendering. Aside from no longer needing to go through the time-consuming process of simulating again, baking can help prevent potential glitches and ensure that the outcome of the simulation remains exactly the same every time.

https://docs.blender.org/manual/en/3.3/physics/baking.html

ベイクにより演算の高速化と、演算結果の安定化が期待できるようです。

mmd_toolsのベイクは、おそらくですが、Blenderのシーンプロパティ内「全物理演算をベイク」に相当するのではないか、と思います。

ベイクが済んでいる状態だと、「ベイク」のボタンが「ベイクを削除」に変化します。

ワールドを更新

詳細は不明です。カーソルを置くと、この機能の説明が表示されます。

  • リジッドボディ関連の事柄を更新
  • 試験的な機能

この機能の実行で更新が確認できるのは以下の点です。

  • サブステップの値が1に変更される
  • ソルバー反復数の値が60に変更される

それ以外に何が更新されているのか、私には分かりませんでした。試験的ということなので、まだ機能が備わっていないのかもしれません。

また、サブステップとソルバー反復数について、変更後の値が最適なのか?という疑問もあります。
後述しますが、私の場合この値でレンダリングをすると、サブステップでは物理演算の精度が足りていないようでした。

尚、更新が行われていない場合、警告のアイコンがボタンに表示されますが、警告表示のままレンダリングを行っても特に挙動がおかしい点はないように思えました。

設定方法

今回の私の例を挙げます。

  1. .blendを保存
  2. タイムラインと物理演算のフレームを合わせる
  3. サブステップは5以上、ソルバー反復数は60に合わせる
  4. ベイクを実行
データの保存

物理演算の処理が重いせいか、しばしばBlenderが落ちます。

ひとつひとつキーを打ってアニメーションを完成させたのに、保存せずにレンダリングを実行したら、Blenderが強制終了!
そんなことにならないように、納得のできる作業ができたらその都度データの保存をしておくべきかと思います。

上述した強制終了の件は、例え話ではなく、実体験です。

フレームを合わせる

レンダリングの有効フレームと物理演算の有効フレーム、この開始と終了を合わせる点については上述の通りです。

サブステップとソルバー反復数

これは物理演算に明るい方であれば、それでは足りない、それでは多すぎ、等判断ができるのだと思います。
私にはその知識はないので、今回うまくできた数値を例に挙げておきます。

尚、ワールドの更新を行い、サブステップは数値1、ソルバー反復数は数値60の状態から調整を始めています。

サブステップについては、数値1では髪が固まってしまったり、足がスカートを貫通したり、剛体が正しく動作しませんでした。
物理演算の精度が足りていない、ということのようです。

数値を5に変更すると、これらの問題は解消されました。

ソルバー反復数については60です。
多すぎるのでは?と思いましたが、その考えに根拠がないので、ここではmmd_toolsの判断を信用しました。

繰り返しになりますが、これらの数値が適切であるか否か、今のところ私には分かりません。不足ではないが、過多である可能性は否めないと感じます。
これらのパラメータはデフォルトでともに数値10なので、その値で試してみる等、吟味が必要だと思います。

レンダリングを行いつつポーズの操作をした時には問題なく動いているのに、アニメーションをレンダリングした時にメッシュが崩れるようであれば、物理演算の精度が不足していると考えてよいかもしれません。

例えば私の場合、ポーズモードで首を左右に振ると髪は揺れますが、アニメーションだと髪が固まって動かない、という事態に遭遇しました。
剛体とジョイントの設定に不備があるのだろうか?と疑いましたが、上述の通りサブステップの値を5に変更するとこの問題は解消されました。

ベイクを実行

これを行うメリットは上述の通りです。

ベイクが必須、という訳ではないようで、ベイクを行わなくてもレンダリングは実行可能です。

Blender Manualが推奨していますし、物理演算に詳しい方からすれば、ベイクは必須同然なのかもしれません。
ベイクの有無がどの程度処理に影響するのか、私には全く分かりませんが、とりあえず例に習っておこうと思います。


終わりに

今後の予定です。

  • モーフの作成
  • TポーズからAポーズへ変更

モーフは学ぶべきことが多そうです。下のような表情を作ってみたいと思っています。

(> <)

今回は以上です。読んで下さった方、ありがとうございました。

サイト名、作品名URL参考にした日付
Blenderhttps://www.blender.org/2022/12/11
Blender Manualhttps://docs.blender.org/manual/ja/3.3/index.html2023/6/1
3Dミクを躍らせるツールを自作してみた(説明前編)https://www.nicovideo.jp/watch/sm24200252023/6/19
UuuNyaa/blender_mmd_toolshttps://github.com/UuuNyaa/blender_mmd_tools2022/12/11
とある工房https://kkhk22.seesaa.net/2022/12/11
Ray-MMDhttps://github.com/ray-cast/ray-mmd2023/6/19
mmCGチャンネル animetichttps://www.youtube.com/channel/UCvC55dRRUwzHgkj1oiylDpg2022/12/12
【Blender 2.91 Tutorial】歩行アニメーション解説 – How to make the Walk Animation【Clothシミュレーション】https://www.youtube.com/watch?v=1YkG0LmkIrU&t=921s2023/8/8
参考URL

comment