Houdini 21.0 Muscles & Tissue

Otis Muscle and Tissue Simulation

On this page

いくつかのOtis Muscle and Tissueレシピをタブメニューから使用することができます。これらは、シェルフツールのようなもので、学習目的でノードのネットワークを配置して接続し、プロセスを再生できます。 Otis Muscle and Tissue Simulation レシピには、独自の筋肉ジオメトリを持つあらゆるキャラクタ向けに、柔軟なシミュレーションセットアップが用意されています。Test Geometry: Otto Muscle and Tissue Simulationレシピを適用できない、非人型キャラクタや様式化されたキャラクタに最適です。

Note

このレシピは、Otis Solver SOP(SOPで動作するFEMのようなMuscle & Tssue Solver)を使用します。Otis SolverはHoudini Coreで使用 できない ため、このレシピもCoreでは使用できません。このレシピを含む.hipファイルはHoudini Coreで開くことができますが、Otis Solverのみ、パラメータがグレーアウトしています。

Note

このレシピでは、キャラクタはオブジェクトレベルではなく、ジオメトリコンテキストに配置するようにしてください。

重要なノード

入力

MUSCLE_SURFACES, REST_BONES_TRIANGULATED, ANIM_BONES_TRIANGULATED, REST_SKIN, ANIM_SKIN

これらは、Test Geometry: Capybaraから抽出され、その後これらのNull入力に渡される、必要なメッシュです。このセットアップを使用すると、独自の筋肉、静止ボーン、アニメーションされたボーン、レンダースキンをレシピに供給できます。独自のジオメトリに置き換えたい場合は、このサンプルの学習と使用を参照してください。

Muscles

muscle_setup

これは、以下を行なうノードを含むサブネットワークです:

  • Muscleサーフェスジオメトリを四面体メッシュに変換します。

  • 繊維グルームをペイントします。

  • Muscleの物理プロパティとMuscleのOtis拘束を構成します。

詳細は、Muscleのセットアップを参照してください。

muscle_id

このMuscle ID SOPは、Muscle IDを作成し、入力ジオメトリ内の繋がったプリミティブの集合体毎にそれらを割り当てます。キャラクタのMuscleにpathアトリビュートがある場合、muscle_idは、path/で区切ったときの最後から2番目の要素を使用して自動的に初期化されます。

musclesolidify4

このMuscle Solidify SOPは、Muscleサーフェスジオメトリを四面体メッシュに変換します。四面体のサイズは、 Remesh Surfaces フォルダの Min Size および Max Size によって決定されます。このレシピでは、解像度を低めにしてシミュレーション時間を短縮するため、四面体が非常に大きくなっています。より多くのディテールを維持したい場合は、キャラクタの四面体のサイズを小さくするとよいでしょう。

fibergroom

このFiber Groom SOPは、Muscle四面体メッシュの繊維方向をインタラクティブにペイントすることができます。

musclepropertiesotis1

このMuscle Properties Otis SOPは、キャラクタのMuscleに 物理プロパティ を割り当て、Otis Solverが筋肉をシミュレーションする方法を決定します。これらの物理プロパティは、筋肉の形状変化に対する受容性や抵抗性、筋肉のどの領域が腱なのか、筋肉の剛性や柔軟性、筋肉が収縮した時の膨らみ具合など、Muscleの挙動を制御します。

muscleconstraintpropertiesotis1

このMuscle Constraint Properties Otis SOPは、Muscle Otis拘束の複数のレイヤを駆動するアトリビュートを作成および変更します。

Muscleのアクティブ化

tension_lines, activate, flex

Otis Muscles & Tissue システムは、 Muscle Auto Tension Lines SOPを使用して緊張ラインを自動的に作成します。そのため、旧バージョンのHoudiniのように、それぞれの筋肉に手動でラインを引く必要はありません。これらの緊張ラインはその後、 Muscle Tension Lines Activate SOPおよび Muscle Flex SOPノードに接続され、シミュレーション中の筋肉の屈曲動作を設定します。

詳細は、筋緊張ラインと屈曲を参照してください。

FasciaまたはTissue

fascia_setup, tissue_setup

これら2つのサブネットワークには、Fascia(筋膜)またはTissue(皮下組織)をセットアップおよび構成するためのノードが含まれています。

詳細は、Fascia & Tissueのセットアップを参照してください。

tissuesolidify1

このTissue Solidify Otis SOPは、FasciaとTissueのセットアップのサブネットワークであるfascia_setup, tissue_setupの両方にあります。外部サーフェスメッシュから四面体化したボリュームを生成して、軟組織シミュレーション用の解剖学的なジオメトリを準備します。このとき、必要に応じて、構造コンテキストとして内部のMuscleやボーンのジオメトリを使用します。fascia_setupで、 Method パラメータは Fascia に設定され、tissue_setupでは Fused Tissue and Core に設定されています。Fasciaの解像度がTissueの解像度よりも低くなる場合があるのは、FasciaはMuscleを所定の位置に保持するためにのみ必要されるのに対し、Tissueは最終的にSkin出力を駆動する必要があるためです。

tissuepropertiesotis1

このTissue Properties Otis SOPは、FasciaとTissueのセットアップのサブネットワークであるfascia_setup, tissue_setupの両方にあります。Tissueのシミュレーションの挙動を制御する物理プロパティと拘束アトリビュートを、アクティブ化して割り当てます。 Tissue Solid Layer タブがFasciaに影響しないのは、Fasciaは Tissue Core Layer のみで構成されているからです。

switch_sim_tissue

このノードで、FasciaとTissueのシミュレーションの使用を切り替えることができます。セットアップを切り替える方法については、このサンプルの学習と使用を参照してください。

Otis構成とソルバ

otisconfiguremuscleandtissue1

このOtis Configure Muscle and Tissue SOPは、シミュレーション前の最後の準備段階です。このノードは最終構成に向けて上流ノードからすべてのジオメトリとアトリビュートを収集し、入力アトリビュートから必要な拘束を作成し、それをすべてOtis Solverに送信します。

詳細は、Otis構成とシミュレーションのワークフローを参照してください。

otissolver1

このOtis Solver SOPは、四面体ソフトボディ拘束向けに特化したソルバです。この特定のタスクでは、Vellum Solverよりも高速かつ正確です。筋肉と皮下組織のシミュレーションにはこのノードが最適です。

スキンのポスト処理

deform_skin

このサブネットワークには、スキンのポスト処理のセットアップが含まれています。皮下組織を筋肉とともにシミュレーションする際に適用します。

詳細は、スキンのポスト処理を参照してください。

Note

このサブネットが適切に機能するように、switch_sim_tissueスイッチが1に設定されていることを確認してください。

cache11

このノードで、ポスト処理が高速化します。Otisシミュレーションをディスクにキャッシュ化した状態で、Displayフラグをこのノードに設定し、フレーム範囲を再生します。これにより、シミュレーションがメモリにキャッシュ化されます。

skindeform1

このSkin Deform SOPは、レンダースキンアニメーションを1番目の入力、シミュレーションされたTissueの外部サーフェスを2番目の入力として受け取って、前者を後者で変形します。頭、手、足といったシミュレーションの影響を受けない領域は、deform_skinサブネット内部で作成されskinmaskアトリビュートによって、変形から除外されます。 Skin Sliding のトグルをオンにすると、シミュレーションのような結果を提供するQuasistatic(準静的)Skinスライディングが有効になります。

スキンの変形。Skinスライディングなし(左)とSkinスライディングあり(右)

wrinkledeformer1, switch_add_wrinkles

スイッチが1に設定されているとき、このWrinkle Deformer SOPによってプロシージャルな皺が追加されます。下流のdeltamush_weak Delta Mush SOPで皺をプレビューしましょう。そうしないと、皺がきつくなりすぎてしまいます。カスタムアトリビュートを作成して、異なる領域の皺の見た目を制御できます。

deltamush_weak, deltamush_strong, blend_strong_deltamush

deltamush_weak Delta Mush SOPはキャラクタ全体に適用され、メッシュのあらゆる小規模な変形を修正するのに大変便利です。blend_strong_deltamush Wrangleは、より強いdeltamush_strongをブレンドして、シミュレーションジオメトリとアニメーションジオメトリ間のトランジション領域(手首、足首、首の上部など)にのみ影響するようにします。

このサンプルの学習と使用

To...Do this

独自のキャラクタの筋肉、ボーン、アニメーション、レンダースキンを使用する

  1. 以下のノードを削除します:

    • capy_muscles

    • capy_bones

    • bone_setup(自分のボーンジオメトリを準備する方法のサンプルとして維持する場合もあります)

    • capy_skin

    • skin_only

    • tissue_grp

  2. 自分の MuscleサーフェスジオメトリMUSCLE_SURFACESノードに接続します。

  3. 自分の Tポーズ(静止位置)のボーンサーフェスREST_BONES_TRIANGULATEDノードに接続します。ボーンが三角形化され、tposeアトリビュートを持っていることを確認します。muscle_idのようなIDアトリビュートもお勧めです。これを行なう方法は、bone_setupサブネットを参照してください。

  4. 自分の アニメーションされたボーンサーフェスANIM_BONES_TRIANGULATEDノードに接続します。

  5. 自分の 静止レンダースキンREST_SKINノードに接続します。それに、顔、手、足、動物の足、細い尾など、Tissueジオメトリに変換されるべきでないスキン上のポイントを除外した、tissueというポイントグループがあることを確認します。

  6. 自分の アニメーションされたレンダースキンANIM_SKINノードに接続します。

入力ジオメトリの要件に関しては、Muscleのセットアップに必要なアセットセクションを参照してください。

FasciaとTissueのセットアップを切り替える

  1. switch_sim_tissueノードを見つけます。デフォルトで、ノードはfascia_setupに設定されています。

  2. それをtissue_setupに変更するには、 Select Input パラメータを1に設定します。

  3. それをfascia_setupに戻すには、 Select Input パラメータを0に設定します。

  4. さらに下流のswitch_sim_tissue1ノードも、自動的に同じように更新されます。そのパラメータがswitch_sim_tissueのパラメータを参照するからです。これは、Tissueもシミュレーションされる場合にのみ、deform_skinサブネットを実行するようにするためです。

シミュレーションを使って、アニメーションされたスキンを変形する

  1. セットアップがFasciaではなくTissueのシミュレーションに切り替わっていることを確認します。

  2. 最初に、otissolver1deform_skinサブネットの間に配置されたFile Cache SOPを使用して、シミュレーションをディスクにキャッシュ化することをお勧めします。

  3. deform_skinサブネットの中に入ります。

  4. Displayフラグがcache11に設定されていることを確認し、フレーム範囲全体を再生してシミュレーションをメモリにキャッシュ化します。

  5. Skinスライディングを有効にしたい場合、skindeform1を選択し、 Skin Sliding のトグルをオンにします。

  6. プロシージャルな皺を有効にしたい場合は、switch_add_wrinklesを選択し、 Select Input パラメータを1に設定します。

異なる開始フレームを使用する

  1. フレーム範囲を、プレイバーで必要な範囲に更新します。シミュレーションがtposeのキャラクタで始まるように、プリロールフレームが含まれていることを確認してください。

  2. flexノードで:

    • 開始フレームに移動して、 Blend0に設定し、 BlendAltを押しながらクリックしてキーフレームを設定します。

    • 数フレーム(プリロールの長さに応じて3~10フレーム)先にジャンプして、 Blend1に設定し、 BlendAltを押しながらクリックしてキーフレームを設定します。

  3. otisconfiguremuscleandtissue1ノードで:

    • Reference Frame を自分の開始フレームか、$FSTART(Frame Rangeの開始フレームが何であっても自動的に使用するようにしたい場合)に設定します。

    • 静止長が1以外の場合、開始フレーム時の0から数フレーム後の1まで、 Rest Blend アトリビュートにキーを設定します(前述のflex Blend を参照)。

  4. otissolver1で:

    • Start Frame を自分の新しい開始フレームまたは$FSTART(Frame Rangeの開始フレームが何であっても自動的に使用するようにしたい場合)に設定します。

    • 静止長が1以外の場合、 Target タブで Rest Shape のトグルがオンになっていることを確認します。

  5. deform_skinサブネット内部のskindeform1ノードで、 Reference Frame を自分の新しい開始フレームまたは$FSTART(Frame Rangeの開始フレームが何であっても自動的に使用するようにしたい場合)に設定します。

Muscles & Tissue

基本

Musclesの扱い方

Musclesレシピ

レガシーMuscles(Vellum Solver)