- 1. Otisシミュレーションの概要
- 1. Otis Muscle and Tissue Simulation とは
- 2. レイヤー構造とシミュレーション種類
- 3. シミュレーションの流れ
- 2. カピバラモデルによるMuscleシミュレーション
- 1. サンプルノードの構造
- 2. 必要なジオメトリ
- 3. シミュレーション結果
- 3. OttoモデルによるMuscleシミュレーション
- 4. Muscle情報の転送方法
- 1. MuscleTransfer とは
- 2. サンプルノードの構造
- 3. 筋肉転送に必要な情報
- 4. 筋肉情報転送結果
- 5. 筋肉転送モデルによる筋肉シミュレーション
- 1. brootモデルのシミュレーション結果
- 2. tommyモデルのシミュレーション結果
- 5. おわりに

ぷらずも
みなさんこんにちは!
ぷらずもです。

エレキベア
こんにちクマ~~~

ぷらずも
今回紹介するのはHoudiniの筋肉シミュレーションです!
その中でもHoudini21.0で正式リリースとなった Otisシミュレーション 周りを中心に触りつつ使い方をまとめてみようと思います。

エレキベア
筋肉シミュレーションクマか・・・
なんか難しそうクマね

ぷらずも
使用用途も限られるし、設定が複雑そうなイメージがあるからちょっと敷居が高いのはあるよね・・・。
ただOtisシミュレーションに関してはサンプルも用意されているので、とりあえず触って試してみるのはすぐに出来たりします。

ぷらずも
今回は自分も含め初めて触る人向けに、細かい設定などは抜きにして使い方やイメージがざっくり伝わる ように書いていこうと思います。

エレキベア
楽しみクマ~~~~

ぷらずも
なお、今回はHoudiniのバージョンは以下を使用しました。
21.0.440だと一部不具合が残って いたりしていたので、極力新しいバージョンを使用することをおすすめします。
- Houdini使用バージョン
- 21.0.512

エレキベア
まだ新しい機能だからこれから調整も入りそうクマね
Otisシミュレーションの概要
Otis Muscle and Tissue Simulation とは

ぷらずも
はじめにOtisシミュレーションとは何か?についてですが、一言でいうと筋肉、皮膚などのシミュレーションを行うシステム になります。
シミュレーションを行うことで、キャラクター等の筋肉の動きを考慮した、よりリアリティのあるアニメーションを作ることが出来ます。
Houdini 21.0 > Muscles and tissue - Houdini公式ドキュメント
▲関連情報は大体公式ドキュメントにまとまっている

▲真ん中がシミュレーション結果、よりリアルな動きを表現出来ている

エレキベア
おお〜〜〜
内部の筋肉をシミュレーションして動きを作っているクマか

ぷらずも
Otisシミュレーションは21.0で追加されましたが、それ以前でもVellumを使用して筋肉のシミュレーションを行うことが出来ました。
これまでとの大きな違いとしては、筋肉、皮膚といった各レイヤーの独立したセットアップが必要があったものを、Otisでは単一パスで動作するようにした ことです。

エレキベア
これまでセットアップが大変だったのを、Otis内にまとめて使いやすくしたのクマね

ぷらずも
処理をまとめたことで、処理速度の改善も行われたようです。
この辺りの違いについては以下に記載されているのと、最近jyouryuusuiさんがこれまでの歴史についてQiita記事にまとめていただいてたので、こちらも合わせてみると状況が把握しやすいと思います。
Differences between Otis solver and Vellum Solver - Houdini公式ドキュメント
▲VellumによるシミュレーションとOtisの違いについて
はじめての筋肉 Houdiniマッスルシミュレーション - Qiita
▲jouryuusuiさんの記事

エレキベア
これまでの歴史をまとめていただいてるのはありがたいクマね
レイヤー構造とシミュレーション種類

ぷらずも
ここから簡単にシミュレーションの内容について触れていきますが、主に以下のページを参考にしています。
より詳細な情報が知りたい場合にはこちらを一読してみてください。
Introduction to muscles and tissues - Houdini公式ドキュメント
▲Otisシミュレーション概要のページ

ぷらずも
まずOtisシミュレーションを行うにあたり、モデルを筋肉・骨といったレイヤーに分けて計算を行っています。
レイヤーは以下の4種類があり、上から順に 骨→筋肉→脂肪... と伝搬する形で処理を行っています。
- レイヤーの種類
- Bones (骨)
- Muslces (筋肉)
- Tissue Core (筋肉・骨を囲む層)
- Tissue Solid (皮下脂肪)

▲4つのレイヤーに分けてシミュレーションを行う(画像引用:Houdini公式ドキュメント)

ぷらずも
これらのレイヤーで計算した結果をジオメトリに反映させることで、最終的な見た目が出来上がります。

エレキベア
脂肪まで計算することが出来るのクマね・・・(重そう)

ぷらずも
そしてシミュレーションを行う種類として Fascia・Tissue の2種類が用意 されていますが、これは「Tissue Core層の計算を行うかどうか」の違いになっています。
- Fascia
- Tissue Core層のみが含まれ、高速
- Tissue
- Tissue Core層に加えてTissue Solid層も考慮され、高精度なシミュレーションが可能

▲Core層まで含めるかどうか選択出来る(画像引用:Houdini公式ドキュメント)

ぷらずも
Tissueの方がより高精度なシミュレーションを行えますが、その分処理時間は長いです。
どのような結果にしたいかに応じて使い分けましょう。

エレキベア
専門用語ばかりでよく分からなかったクマが、概念自体はそこまで難しくないクマね
シミュレーションの流れ

ぷらずも
シミュレーション自体は以下のような流れになっています。
必要なジオメトリを用意して情報設定し、シミュレーションした後にスキン変形する、といった流れです。
- シミュレーションの流れ
- 各ジオメトリ(筋肉、骨、スキン)の準備
- 各種セットアップ(筋肉、Fascia/Tissue)
- シミュレーション
- スキン変形

エレキベア
シンプルな流れクマね

ぷらずも
この一連の流れはサンプルとして既に組まれていて、以下が用意されています。
- 用意されているサンプル
- Test Geometry: Otto Muscle and Tissue Simulation
- Ottoモデル(人型)を使用したOtisシミュレーション
- Test Geometry: Otto Muscle Transfer
- Ottoモデルを元に異なる人型モデルの筋肉・骨を生成するサンプル
- Otis Muscle and Tissue Simulation
- カピバラモデルを使用したOtisシミュレーション
- Test Geometry: Otto Muscle and Tissue Simulation

ぷらずも
Ottoは人型のモデルで汎用性が高いですが、処理時間もそれなりにかかります。
そのため初めはカピバラモデルで試してみることをおすすめします。

エレキベア
異なる人型モデルに筋肉・骨を生成することも出来るのクマね
どんなものか気になるクマ
カピバラモデルによるMuscleシミュレーション
サンプルノードの構造

ぷらずも
まずはカピバラモデルを使用したサンプルを使用して処理を確認してみます。
サンプルは Otis Muscle and Tissue Simulation ノードを配置することですぐに確認することが出来ます。

▲ノード配置後の状態、これが基本形となる

ぷらずも
初見だとどうなっているのか分かりづらいですが、以下のようなまとまりで分かれていることが分かります。
- 必要なジオメトリの準備
- 筋肉セットアップ
- Fascia/Tissueセットアップ
- switchノードで切り替えれるようになっている
- シミュレーション
- スキン変形

エレキベア
最初に触れた流れに沿っているクマね

ぷらずも
それぞれサブネットワークとしてまとめられていて、内部で細かい処理を行っています。
それぞれのセットアップ詳細に関してはページが用意されているので、困ったら公式ドキュメントをみるとよさそうです。

▲それぞれの処理に関するページも用意されている

エレキベア
設定項目も中々多いクマね・・・
必要なジオメトリ

ぷらずも
次に「筋肉シミュレーションを行うにあたり何のジオメトリが必要になるのか?」についてですが、以下の5つを用意する必要があります。
- 必要なデータ
- 筋肉ジオメトリ
- 骨ジオメトリ(静止)
- 骨ジオメトリ(アニメーション)
- スキンジオメトリ(静止)
- スキンジオメトリ(アニメーション)

▲カピバラモデルの例

エレキベア
骨・筋肉のジオメトリが必要なのと、アニメーションも要るのクマね

ぷらずも
アニメーションが必要になるのは、動きに合わせてシミュレーションを行うため ですね。
正直骨・筋肉ジオメトリの準備は大変ですが、同一トポロジのモデルに対して既存モデルから転送して作成する機能 もあるので、こちらも後ほど紹介します。
シミュレーション結果

ぷらずも
デフォルト状態でシミュレーションを実行した結果は以下のようになりました。
Fascia/Tissueそれぞれでシミュレーションしてみてどのようになるか を見ていて、シミュレーション後にFileCacheを挿し込んだ後、Flipbookで再生して確認しています。
カピバラで筋肉シミュレーションテスト
— ぷらずも (@plasmo310) November 9, 2025
Tissue方式(脂肪層有り)の方がより自然な揺れ方な気がする#Houdini #3DCG pic.twitter.com/JJXphSrInw

エレキベア
こうやって並べてみると中々面白いクマね

ぷらずも
比較するとFasciaの方が振動するような揺れ方なのに対して、Tissue(脂肪あり)の方は自然に揺れ方が抑えられてる印象 があるね。
OttoモデルによるMuscleシミュレーション

ぷらずも
それでは次に、より本格的なOttoモデル(人型のモデル)でのシミュレーションを実行してみます。
こちらは Test Geometry: Otto Muscle and Tissue Simulation ノードを使用すると、カピバラと同じくセットアップされた状態で配置されます。

エレキベア
人型の筋肉シミュレーションは汎用性が高いクマね

ぷらずも
しかしこれがポリゴン数が多いのもあるのか、中々に処理が重いです・・・。
自分のPCだと丸一日かけても終わらないこともあったのですが、最終的にはfilecacheノードをotissolverの後とdeform_skinの後にそれぞれ挟む ことで何とか処理を完了させることが出来ました。

▲filecacheを2箇所挟んで実行した

ぷらずも
実行した結果は以下のようになりました。
中々にマッスルですね・・・。

エレキベア
ボディビルダークマ・・・
Muscle情報の転送方法
MuscleTransfer とは

ぷらずも
サンプルで筋肉シミュレーションを実行しましたが、「一つ一つのモデルに筋肉・骨のモデルを用意するのは大変なのでは・・・?」といった疑問は残ると思います。
そんな手間を解消するのが、もう一つの目玉機能である MuscleTransfer です。
- MuscleTransferとは
- 筋肉・骨セットアップ情報を同一トポロジのジオメトリに対して転送する機能
参考:
Test Geometry: Otto Muscle Transfer - Houdini公式ドキュメント

エレキベア
これを使えばまさか筋肉・骨のモデルも自動で作ってくれるクマ・・?

ぷらずも
そのまさかで、こちらもサンプルノードが用意されています。
サンプルノードの構造

ぷらずも
サンプルノードは「Test Geometry: Otto Muscle Transfer」で、こちらもセットアップされた状態で配置されます。

▲Test Geometry: Otto Muscle Transfer を配置した状態

ぷらずも
左上部分が筋肉等の設定を行ったottoモデル、右上部分がbrootという巨人のモデル になっています。
brootの方は 描画用のスキンとottoモデルとトポロジを合わせたプロキシスキンモデルの2つを用意 して、そこからシミュレーションに必要なジオメトリを生成しています。

エレキベア
ほほう・・・
スキンを用意するだけで筋肉などを生成してくれるのクマね

ぷらずも
この処理で生成されるのは
・筋肉ジオメトリ
・骨ジオメトリ
・リグ
・スキンジオメトリ
の4つになります。

ぷらずも
リグに関しては21.0.440だと生成エラーが発生していたので、ご注意ください・・・。
21.0.511で修正されたようで、それ以降だと問題なく生成されました。
参考:
https://www.sidefx.com/forum/topic/102202/?page=1#post-450378
▲Rigの転送でエラーが発生していたが、21.0.511で修正された

エレキベア
まだ出たばかりで今後も調整が入りそうクマね
筋肉転送に必要な情報

ぷらずも
先ほど記載した通り、筋肉転送に必要となる情報は
・描画用スキン
・プロキシスキン
の2つになります。
このプロキシスキンモデルに関しては、転送元のモデルと頂点数なども合わせておく必要がある ためご注意ください。

▲転送元のモデル

▲転送先のモデル(頂点数など合わせる必要がある)

エレキベア
単純に形状が似ている、というだけではだめなのクマね

ぷらずも
brootのサンプルではプロキシモデルは用意されていますが、他の人型モデルを使用する場合には自前で用意する必要があります。
Houdini上で手っ取り早く用意する方法としては、topotransferノードを使用する方法 があったのでこちらも紹介しておきます。

▲topotransferでトポロジを揃えた状態

▲tommyモデルでトポロジを合わせた状態

エレキベア
こんな便利ノードもあったのクマね
これがあれば近しい形のモデルは大体合わせられそうクマね
筋肉情報転送結果

ぷらずも
brootモデル(デフォルトのサンプル)とtommyモデル(topotransferで手動で合わせたもの)をそれぞれottoから転送してみた結果は以下のようになりました。

▲brootモデルの転送結果

▲tommyモデルの転送結果

エレキベア
どっちもいい感じに転送出来ているクマね・・・
すごいクマ

ぷらずも
大量のキャラをシミュレーションしたい場合でも、一つ筋肉セットアップの型を用意しておけばそれで使いまわしが出来そうだね。
筋肉転送モデルによる筋肉シミュレーション

ぷらずも
最後に、筋肉転送したモデルで実際にシミュレーションを行ってみようと思います。
シミュレーションに関しては
・転送後のモデルにアニメーションを付けてパック
した後、ottoモデルと差し替える形で実行してみました。

▲アニメーションを付けた後にパックする

▲筋肉シミュレーション側でottoモデルと差し替える

エレキベア
これでシミュレーションに必要な情報が全て揃ったクマね

ぷらずも
アニメーションに関しては、ottoモデルのマッスルアニメーションも流用出来ないか試してみたのですが、形状が違うためか破綻してしまいました・・・。
そのため今回は 屈伸を行うだけのシンプルなアニメーションを手付けで試してみました。

▲ottoモデルのアニメーション流用は難しかった

▲手付けした屈伸アニメーション

エレキベア
(屈伸かぁ・・・)
brootモデルのシミュレーション結果

ぷらずも
以上を踏まえて、brootモデルでシミュレーションした結果は以下のようになりました。

エレキベア
おお~~~
ちゃんとそれっぽくなってるクマ~~~

ぷらずも
ちょっとまだ違和感が見えるけど、このあたりはセットアップの調整が必要になるかもしれないね・・・。

ぷらずも
それと一点発生した問題として、シミュレーションを行う中で
・シミュレーション後に筋肉などが消えてしまう
・シミュレーション時間がやたらと長い
事象が発生することがありました。

エレキベア
筋肉が消える・・・・??

ぷらずも
こちらについて原因調査したところ、どうやら同名のパーツ同士が衝突することで意図しない結果になっていたようで、otissolver内の「Ignore Collisions with Same name or Piece」フラグを外すことで解消できました。
処理時間も解消されたので、いつまでも終わらない場合にはこの辺りを疑ってみてもいいかもしれません。

▲「Ignore Collisions with Same name or Piece」フラグを外すと同名パーツ同士の衝突を防げる
tommyモデルのシミュレーション結果

ぷらずも
最後に自前で用意したtommyモデルのシミュレーション結果も載せておきます。
こちらは以下のような結果になりました。

エレキベア
こっちもちゃんとシミュレーション出来てそうクマね
(ズボン破けてるけど・・・)

ぷらずも
ズボンが破けているのは服のウェイトがボディとあっていないからですね。
本当は衣類を全部外そうかと思ったのですが、絵的にアウトかなと思いとりあえず残しました・・・。

▲ちょっとここまでは調整する気力が起きませんでした

エレキベア
なんかシュールクマ・・・
おわりに

ぷらずも
というわけで今回はHoudini21.0の新機能であるOtisシミュレーションを触ってみました!
どうだったかな??

エレキベア
どれもセットアップ込みのサンプルが用意されていて分かりやすかったクマ
ざっくりとイメージは掴めた気がするクマ

ぷらずも
まだ細かい調整までは触れていないので、時間があればその辺りもやってみたいね。
個人的には人型以外も含めて、オリジナルキャラクターに対して一からセットアップ~シミュレーションまで行ってみたいなとは思っています!

エレキベア
ぶよぶよなモンスターとかやったら絵的にも映えそうクマね
引き続き触ってみるクマ

ぷらずも
それでは今日はこの辺で!
アデューー!!

エレキベア
クマ~~~~~
【Houdini21.0】Otisによる筋肉シミュレーションと筋肉情報転送機能の使い方【Otis Muscle and Tissue Simulation】~完~










