Houdini 20.0 Muscles & Tissue

Muscles & Tissueのワークフロー

完全なMuscles & Tissueシステムをセットアップするための中核的ワークフロー。

On this page

以下のセクションでは、 Muscle & Tissue シミュレーションで各パスを生成するのに必要な異なるネットワーク手順について説明しています。

Muscleパス

Muscles & Tissue シミュレーション生成の最初のステージでは、そのシミュレーションの Muscleパス を生成します。 このMuscleパスでは、アニメーションするボーンジオメトリと一緒に動いて曲がるソリッドMuscleジオメトリを生成し、下流でTissueの変形(ポイントトランスフォーム)の大部分を駆動させます。

Muscleネットワークの例

以下のセクションでは、上図のMuscleネットワークの例を再現する手順を載せています。 これらの手順を応用することで、ゼロからあなた独自の基本Muscleパスを作成することができます。

  1. 静的なMuscleサーフェス、アニメーションするボーンサーフェス、静的なTポーズのボーンサーフェスを取り込みます。

    キャラクタからMuscleパス用のソリッドMuscleを生成できるようにするには、静的なMuslceサーフェス、アニメーションするボーンサーフェス、静的なTポーズのボーンサーフェスが必要になります。

    SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP Stash SOP Alembic SOPなどを使用することができます。

    1. Muscleサーフェスジオメトリを取り込みます。彫刻されるMuscleサーフェスは、現実世界のスケール(1 Houdini単位 = 1メートル)でモデリングされた交差のないマニフォールドなポリゴンジオメトリ(穴やブリッジがない)にしてください。

    2. アニメーションするボーンサーフェスを取り込みます。ポリゴンのボーンサーフェスは、現実世界のスケール(1 Houdini単位 = 1メートル)でモデリングしてください。

    3. Tポーズ(Restポジション)のボーンサーフェスを取り込みます。

  2. それぞれのMuscleに名前を付けます。

    Muscle & Tissue シミュレーションで筋肉として表現される各Muscleサーフェス(自己完結型の繋がったプリミティブ)には、四面体化する前にmuscle_idアトリビュートまたは name アトリビュートがなければなりません。

    Muscle ID SOPノードを作成し、静的なMuscleサーフェスを取り込んだノードにそれを接続してから、 その Muscle ID SOP を使用してMuscleサーフェスジオメトリの各ピースを選択して、それらのピースに Name を割り当てます。

  3. (任意) 不要なジオメトリグループを除去します。

    手順2でジオメトリグループを使用してMuscleサーフェスを選択していた場合、それらのgroupアトリビュートはもはや不要です。 Muscleジオメトリからそれらのgroupアトリビュートを除去することで、下流ノードに必要なアトリビュートのみを渡すことができます。

    Group Delete SOPノードを作成し、 Muscle ID SOPにそれを接続してから、 Group Delete SOP を使用してMuscleから不要なジオメトリグループを選択して除去します。

  4. ボーンサーフェスにTポーズを設定します。

    Muscles & Tissue 生成プロセスを通じてジオメトリをTポーズ位置に戻せるように、キャラクタのボーンとMuscleにRestポジションまたは Tポーズ を記録することが必要です。

    • Set T-Pose SOPノードを作成し、静的なTポーズのボーンサーフェスを取り込んだノードにそれを接続します。 Set T-Pose タブメニュー項目は、プリセットを使って Rest Position SOPノードを作成してTポーズ設定を格納します。

    • Rest Position SOPを使用して、Tポーズのボーンジオメトリの現行ポーズをtposePointアトリビュートに格納します。

  5. (任意) 外部でMuscleサーフェスを三角形化します。

    Muscleサーフェスを四面体化する前に三角形化する必要があります。 通常では、これは Muscle Solidify SOPノード内にある Remesh Surface 設定を使用して行ないます。 しかし、もっと多くの制御でMuscleポリゴンを三角形化したいのであれば、外部で Remesh SOPノードを使用してMuscleジオメトリを三角形化しても構いません。

    Remesh SOPノードを作成して、 Muscle ID SOPノードにそれを接続してから、そのRemesh SOPを使用してMuscleジオメトリを三角形化した後に四面体を構築します。

  6. Muscleサーフェスを三角形化してから四面体化します。

    1. Muscle Solidify SOPノードを作成して、 Muscle ID SOPノードにそれを接続します。

    2. 入力のMuscleサーフェスがきれいな正三角形でテセレーションされていることを確認します。Muscleサーフェスは、四面体化する前に三角形化する必要があります。これをするには、 Muscle Solidify SOP ノード内の Remesh Surface 設定を使用します。

    3. この Muscle Solidify SOP ノードが入力の三角形化されたMuscleサーフェスを自動的に四面体化します。MuscleのサーフェスはVellumスライディング拘束で必要になった場合にのみ Muscle Solver Vellum SOPノード内でその場で生成されるので、TissueパスやSkinパスと同様に、ソリッドMuscleは外側ポリゴンサーフェスを 持ちません

    4. お好みで Tissue Solidify SOP のパラメータを調整します。

      • Max Tet Size パラメータは、個々に生成される四面体の上限サイズを設定します。四面体が小さいほど、より詳細なMuscleを下流のTissueパスに流せるようになります。反対に四面体が大きいほど、Muscleのパフォーマンスが速くなります。

    Warning

    Muscle & Tissueネットワークでは、 Muscle Solidify SOP後に Muscleジオメトリのポイント位置を変更するノードを挿入しないでください。 そうすると、 反転した四面体 (隣接コンポーネントが重なり、マイナスの符号付きボリュームを持つ四面体)になる可能性が高くなるためです。 反転した四面体を含むソリッドジオメトリでは、Muscleシミュレーションをうまく実行することができません。

  7. Muscleの繊維方向をグルームします(整えます)。

    筋肉は曲がると、 繊維ベクトル の方向に収縮します。 この繊維ベクトルは、Muscleのローカル軸の向きを定義します。 筋肉を期待した方向に収縮させたいのであれば、明確に独自の繊維方向ベクトルを定義する必要があります。 Fiber Groom SOPノードを使用することで、Muscleに対してその繊維方向ベクトルをペイントすることができます。

    Fiber Groom SOP ノードを作成して、 Muscle Solidify SOP ノードにそれを接続してから、そのFiber Groom SOPを使用して、筋肉を収縮させたい方向に流れるようにインタラクティブに繊維方向ベクトルをグルームします。 この独自の繊維ベクトルはmaterialWアトリビュートに格納されます。 このmaterialWアトリビュートは後で下流の Muscle Flex SOPで使用されます。

  8. Muscle物理プロパティを設定します。

    Muscle物理プロパティは、筋肉の形状変化に対する受容性や抵抗性、筋肉のどの領域が腱なのか、筋肉の剛性や柔軟性、筋肉が収縮した時の膨らみ具合といった筋肉の 物理的特性 を決めます。

    Muscle Properties SOPノードを作成して、 Fiber Groom SOPノードにそれを接続してから、お好みでその Muscle Properties SOP のパラメータを設定します。

    1枚目Number of Assignments マルチパラメータタブですべての筋肉に関する 一般設定 を行なってから、次のマルチパラメータタブで個々のMuscleまたはMuscleグループに関する 特定の プロパティ設定を行なうことを推奨します。

    重要

    Absolute バージョンと Relative バージョンのパラメータは異なる挙動をすることに注意してください。 Absolute バージョンのパラメータ値は 上書き で適用されるのに対して、 Relative バージョンのパラメータ値は(前のマルチパラメータタブで)既に設定された値またはデフォルト値の乗数として適用されます。

    • Shape Stiffness は、筋肉を元々の形状(tpose)に留まらせる度合いを決めます。

    • Damping Ratio は、筋肉の形状が変化する速さを決めます。

    • Mass Density は、筋肉内の四面体がシミュレーションにおける全体の質量または外観に影響を与えるかどうかを決めます。

    • Fiber Strength は、筋肉が引き締められる強さを決めます。

    • Fiber Damping は、筋肉が収縮する速さを制御します。

    • Fiber Scale Range は、筋肉の筋緊張の最小/最大閾値を定義します。

    • Fiber Volume Scale は、Muscle四面体が完全に収縮した時に適用される体積スケールフォースを制御します。

    • Tendon Stiffness は、筋肉の腱領域の Shape Stiffness に適用されるスケール係数を決めます。

    • Tendon Mask Radius は、筋肉の腱領域の部分を定義します。

    • Thickness Threshold は、 Tendon Stiffness 閾値がどの値以上で筋肉領域を筋肉の腹部とみなし、どの値以下で筋肉領域を腱とみなすのかを定義します。

  9. ボーンサーフェスをプリロール(先行再生)します。

    Muscle Preroll SOPノードを作成して、上流のボーンサーフェスのTポーズノードにそれを接続してから、キャラクタのボーンがTポーズからショットアニメーションの最初のフレームにおけるワールド空間位置に遷移させる際の Holdフレーム番号Prerollフレーム数 を設定します。 任意で、このノードをビューポートステートにしてからトランスフォームハンドルを使用することで、キャラクタのボーンのプリロールにトランスフォームオフセットを加えることもできます。

    Tポーズから開始位置までの遷移に使用されたトランスフォームは、出力ジオメトリ上にpreroll_Detailアトリビュートとして格納されます。 TissueパスやSkinパスでは、追加で Muscle Preroll SOP ノードを使用してこれと同じトランスフォームデータを参照することで、キャラクタの他のコンポーネントをまったく同じ位置に移動させることができるようになります。

  10. Muscle拘束プロパティを設定します。

    Muscle拘束プロパティは、Muscleに対して拘束を作成して設定します。 Muscle拘束は、Muscleをボーンにお互いに取り付けて、そのMuscleの両端を拘束し、そのMuscleのコリジョン半径を定義し、各Muscleが周辺のMuscleから継承するVelocity量を決めます。

    Muscle Constraint Properties Vellum SOPノードを作成して、 Muscle Properties SOPノードにその1番目の入力を接続し、 Muscle Preroll SOPノードにその2番目の入力を接続してから、お好みですべてのパラメータ値を設定します。

    • Muscle Endsパラメータは、Muscleの両端を、事前にアニメーションされた位置または近接のボーンに拘束するかどうかを決めます。Muscleの両端の取り付け先となるターゲットは、 Muscle Vellum Solver SOPMuscle Ends パラメータで決めます。

    • Muscle to Muscleパラメータは、Muscleをお互いに拘束する方法を制御します。

    • Muscle to Boneパラメータは、Muscleをボーンジオメトリに取り付ける方法を制御します。

    • Velocity Blendパラメータは、Muscleが近隣のMuscleから受けるVelocity量を制御します。

    • Collisionsパラメータは、Muscleのコリジョン半径を定義します。

    Tip

    Muscle Constraint Properties Vellum SOPノードパラメータ内の Visualize ボタンを使用することで、ビューポートステート内で異なる拘束の現行設定の視覚的表現を表示することができます。

  11. (任意) Muscleをミラー化します。

    キャラクタのMuscleジオメトリが片側(両側ではなく、左側のみ、または右側のみ)しかなくてキャラクタが対称である場合、 Muscle Mirror SOPノードを使用することで、欠落した側にMuscleをミラー化または複製することができます。

    • Muscle Mirror SOP ノードを作成して、 Muscle Constraint Properties Vellum SOPノードにそれを接続します。

    • Muscle Mirror SOP のパラメータエディタで、ミラー化の処理で使用したい Naming 接頭辞と Mirror Plane 位置を指定します。

    • Muscle Mirror SOP は、キャラクタの欠落した側にMuscleを自動的に作成し、ミラー化されたすべてのMuscleが必ず適切な名前(muscle_idアトリビュート)、繊維ベクトル(materialWアトリビュート)、プロパティ(物理と拘束)を受け取ります。

  12. (任意) Tissueプロパティマスクをペイントします。

    特定のMuscleのプロパティと値がMuscle上の特定の領域にのみ適用されるようにMuscle上にマスクをペイントしたい場合、 Muscle Paint SOPノードを作成して、 Muscle Constraint Properties Vellum SOPノードにそれを接続してから、そのMuscle Paint SOPを使用してマスクする領域をペイントします。

    Muscle上に以下のプリセットのMuscle物理プロパティとMuscle拘束プロパティをペイントすることができます:

    • Muscle Ends Mask は、Muscle上に Muscle Ends 拘束のEnd Regionsをペイントすることができます。これは、 Muscle Ends 拘束が影響を与えるMuscleの領域を決めます。

    • Muscle to Bone Mask は、Muscle上に Muscle to Bone 拘束のStiffnessをペイントすることができます。ヒートマップが明るいほどStiffnessが強いです。 Stiffness は、Distance Thresholdコネクションの伸縮性を決めます。

    • Tendon Mask は、Muscle上のTendon Mask Radiusプロパティをペイントすることができます。 Tendon Mask Radius は、筋肉のどの部分が 腱領域 で、その腱領域がMuscleの端から拡張できる距離を定義します。

    • Muscle Glue は、Muscle上にMuscle Glue拘束値をペイントすることができます。 Muscle Glue 拘束は、Muscle同士が決して離れることができないように近隣Muscle間にリジッドアタッチメントを形成します。

    • Slide Rate は、Muscle上にSlide Rateの度合いをペイントすることができます。 Slide Rate は、 Muscle to Bone 拘束コネクションがボーンの表面に沿って滑ることができる度合いを決めます。

  13. Muscle Tension Line(筋緊張ライン)を作成します。

    Muscleの活発化の発動とMuscle内のmuscletensionの強弱は、 Muscle Tension Line(筋緊張ライン) によって自動化されます。 このmuscletensionアトリビュートは、シミュレーション中の筋肉の屈曲動作を駆動します。

    Muscle Tension Lines SOPノードは、静的なTポーズのジオメトリ(たいていの場合、これはボーンジオメトリです)上に筋緊張ラインを描画することができます。 各Muscle Tension Lineの名前はautoflex_idアトリビュートに、初期長さはrestlengthアトリビュートに格納され、そして、ボーンジオメトリのアニメーション中に伸び縮みしている時の線の長さはlengthアトリビュートに格納されます。 restlength値とlength値の違いは、length値の方はmuscletensionの強弱を駆動させます。

    • Muscle Tension Lines SOP ノードを作成して、ボーンサーフェスの Muscle Preroll SOP ノードにそれを接続してMuscle Tension Line(筋緊張ライン)を作成します。

      • 静的なTポーズのガイドジオメトリ(たいていの場合、これはボーンジオメトリです)上に、各Muscleのおよその原点と挿入ポイントが始点と終点となるように筋緊張ラインを描画します。

      Tip

      Guidesパラメータを使用することで、ビューポートステートで筋緊張ラインとターゲットガイドジオメトリを視覚化することができます。

    • (任意)事前に描画したポリラインを含んだジオメトリ系ノードまたはインポート系ノードを、その Muscle Tension Lines SOP ノードの2番目の入力に接続して、内部で生成された筋緊張ラインを置換します。

    Note

    筋緊張ラインを単独で使用したり、 Muscle Flex SOPと併用してMuscle別にmuscletension値にキーフレームを打つことができます。

  14. プリロールされたボーンサーフェスを取得します。

    Muscle Flex SOPノード内でプロキシアニメーションを駆動させるには、アニメーションするボーンサーフェスが必要なので、上流のボーンサーフェスの Muscle Preroll SOP に記録されているデータを取得する必要があります。

    Object Merge SOPノードを作成して、その上流のボーンサーフェスの Muscle Preroll SOP ノードを参照します。

  15. Muscle Tension(筋緊張)をアニメーションさせます。

    • Muscle Flex SOPノードを作成して、 Muscle Constraint Properties Vellum SOPノードにその 1番目 の入力を接続し、プリロールしたボーンサーフェスの Object Merge SOP ノードにその 2番目 の入力を接続し、 Muscle Tension Lines SOPノードにその 3番目 の入力を接続します。

    • この Muscle Flex SOP ノードのパラメータ値をお好みで設定します。

      • Activation Linkパラメータを使用すると、自動屈曲タイミングが駆動できるように、Muscleジオメトリ(muscle_idアトリビュート)をMuscle Tension Lines(autoflex_idアトリビュート)にリンクさせることができます。

      • Muscle Tension Linesパラメータを使用すると、Muscle Tension Lineの 長さ (restlengthアトリビュートとlengthアトリビュート)の アクティベーション比 とMuscleが完全に曲がった状態とみなすもの(muscletensionアトリビュート)を調整することができます。これは、曲がっているかどうかをみなす 閾値 を設定します。

      • Muscle Flexパラメータを使用すると、Muscle Solverで使用されるmuscletensionアトリビュートをアニメーションさせて、ショットアニメーション中に筋肉が収縮と緩和をしようとする タイミング を決めるのに役立ちます。このアニメーションは、Muscle Tension Lines単独またはMuscle Flexパラメータのキーフレームと組わせることで、 自動的に 作成することができます。Muscleを活性化させるタイミングやこれらのパラメータ値にキーフレームを打つことでMuscleを活性化させるかどうかをソルバに伝えることができます。

  16. Muslceをシミュレーションする。

    Vellum Solverを使用してMuscleシミュレーションを計算します。

    • Muscle Vellum Solver SOPノードを作成して、 Muscle Flex SOPノードにその1番目の入力を接続し、プリロールしたボーンサーフェスの Object Merge SOP ノードにその2番目の入力を接続してから、お好みでソルバのすべてのパラメータ設定を設定します。

      • Muscleに Muscle Ends 拘束が使用されている場合、必ず Muscle Vellum Solver SOPMuscle Endsパラメータを使用して、それらの拘束の挙動を選択してください。

    • (任意)Muscle Solverの1番目の入力に アニメーションする muscletensionアトリビュートが 存在しない 場合、Muscle Solverの3番目の入力に屈曲する参照プリミティブを接続することで、アニメーションするmuscletensionアトリビュートを直接用意することができます。この場合、Muscleはその3番目の入力から合致するmuscle_idを検索してから、1番目のポイント上で見つかったmuscletensionアトリビュートを使用するようになります。

  17. Muscleをディスクにキャッシュ化します。

    File Cache SOPノードを作成して、 Muscle Vellum Solver SOPノードにそれを接続してから、そのFile Cache SOPを使用してMuscleシミュレーションの結果をディスクにキャッシュ化します。

  18. Muscleとボーンを収集します。

    下流のTissueパスで使用するために、Muscleパスから最終データ出力を収集します。

    • 2個の Null SOPノードを作成します。

    • その1個目のNull SOPを File Cache SOPノードの出力に接続して、その最終Muscleシミュレーションのキャッシュをコピー(収集)します。

    • その2個目のNull SOPをプリロールしたボーンサーフェスの Object Merge SOP ノードに接続して、プリロールしたアニメーションボーンジオメトリをコピー(収集)します。

Tissueパス

Muscles & Tissue シミュレーション生成の2番目のステージでは、そのシミュレーションの Tissueパス を生成します。 このTissueパスでは、筋肉を包んで、筋肉(Core層)とキャラクタの ベーススキン として作用する分厚いTissue層の間の隙間を埋める充填四面体を生成します。 このTissueパスはMuscle定義と粗いスキンの皺/折り目を表示するのに対して、下流のSkinパス( 細かいスキン )は細かいスキンの皺/折り目を表示し、キャラクタの Muscle & Tissue シミュレーションの最外面サーフェスにさらにディテールを足します。 さらに、Tissueパス内のCore層は吸引タイプの効果を使ってTissue層とSkinパスの両方を 引き込み ます。

Tissueパスは2つの を持ち、それぞれの層は2つの別々のジオメトリピースで構成されています。このTissueパスの構成は(内側から外側に向かって)以下の通りです:

  • Core層

    • 四面体ソリッドコア内側メッシュ(Coreソリッド)

    • 三角形化されたポリゴンコア外側サーフェス(Coreサーフェス)

  • Tissue層

    • 四面体ソリッド組織内側メッシュ(Tissueソリッド)

    • 三角形化されたポリゴン組織外側サーフェス(Tissueサーフェス)

これらの層は、それぞれ別々の物理プロパティと拘束を持ちます。

Tissueネットワークの例

以下のセクションでは、上図のTissueネットワークの例を再現する手順を載せています。 これらの手順を応用することで、ゼロからあなた独自の基本Tissueパスを作成することができます。

  1. Skinサーフェスを取り込みます。

    オリジナルの高解像度Skinサーフェスジオメトリを取り込みます。このサーフェスはTissueパス用のジオメトリを生成するのに必要です。

    SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP Stash SOP Alembic SOPなどを使用することができます。

  2. MuscleパスからMuscleシミュレーションとアニメーションボーンサーフェス出力を取得します。

    Muscleパス からMuscleシミュレーションとアニメーションボーンサーフェスジオメトリ出力を取得します。 Tissue Solidify SOPノードは、Tissue四面体を作成するためにこのジオメトリが必要です。

    SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP Stash SOP Alembic SOPなどを使用することができます。

  3. MuscleソリッドとボーンサーフェスジオメトリからTポーズを抽出します。

    キャラクタのTissueを作成できるようにするには、キャラクタのMuscleシミュレーションとアニメーションボーンジオメトリがRestポジション(Tポーズ)になっている必要があります。

    Muscleソリッドジオメトリ出力をインポートしたノードとボーンサーフェスジオメトリ出力をインポートしたノードの両方に対してそれぞれ Extract T-Pose SOPノードを作成して接続します。 Extract T-Pose タブメニュー項目は、プリセットのTポーズ抽出設定を使って Rest Position SOPノードを作成します。

    • Rest Position SOPノードのどちらかを使用して、Muscleシミュレーションからtposeアトリビュートを抽出します。

    • もう一方の Rest Position SOPノードを使用して、アニメーションボーンジオメトリからtposeアトリビュートを抽出します。

  4. Muscleシミュレーション出力のTポーズとボーンサーフェス出力のTポーズをマージします。

    Tissue Solidify SOPでMuscleシミュレーション出力のTポーズとアニメーションボーンサーフェス出力のTポーズのどちらも使用できるようにするには、それらのポイントトランスフォームRestデータをマージする必要があります。

    Merge SOPノードを作成して、Muscleシミュレーション出力からTポーズを抽出したノードとアニメーションボーンサーフェス出力からTポーズを抽出したノードの両方をその Merge SOP ノードに接続します。

  5. (任意) 外部でTissueサーフェスを三角形化します。

    Tissueサーフェスを四面体化する前に三角形化する必要があります。 通常では、これは Tissue Solidify SOPノード内にある Remesh Surface 設定を使用して行ないます。 しかし、もっと多くの制御でTissueサーフェスポリゴンを三角形化したいのであれば(特に、三角形のスケールが気になるのであれば)、外部で Remesh SOPノードと補助アトリビュート系ノードを使用してTissueサーフェスジオメトリを三角形化しても構いません。

    以下のノードを作成して使用します:

    • Attribute Paint SOPノードを作成して、Tissueサーフェスジオメトリをインポートしたノードにそれを接続して、使用したいターゲットメッシュサイズアトリビュートの名前を Attribute Name パラメータフィールドに入力してから、Tissueサーフェス上にそのターゲットメッシュサイズアトリビュートをペイントして三角形のスケールに影響を与えます。

    • Attribute Remap SOPノードを作成して、 Attribute Paint SOP にそれを接続して、 Attribute Paint SOP で定義したのと同じアトリビュート名を Original Name パラメータに設定してから、そのペイントしたターゲットメッシュサイズ値を Remesh SOP ノードで使用したい最小値/最大値にマッピングします。

    • Remesh SOPノードを作成して、 Attribute Remap SOP ノードにそれを接続して、Tissueサーフェスジオメトリを四面体する前に三角形化します。

    • Attribute Delete SOPノードを作成して、 Remesh SOP ノードにそれを接続して、もはや Muscle & Tissue ワークフローで不要となった Attribute Paint SOP で生成されたターゲットメッシュサイズアトリビュートを削除します。

  6. 内部的にTissueサーフェスを三角形化してから四面体化します。

    1. Tissue Solidify SOPノードを作成して、 Merge SOPノードをそのInput 2に接続してから、インポートしたボーンサーフェスジオメトリの Extract T-Pose SOPノードをそのInput 4に接続します。

    2. 入力のTissueサーフェスがきれいな正三角形でテセレーションされていることを確認します。Tissueサーフェスは、四面体化する前に三角形化する必要があります。これをするには、 Tissue Solidify SOP ノード内の Remesh Surface 設定を使用します。

    3. この Tissue Solidify SOP ノードが入力の三角形化されたTissueサーフェスを自動的に四面体化します。Tissueパスは2つの を持ち、それぞれの層は2つの別々のジオメトリピースで構成されています。1つ目の Core 層は四面体ソリッド コア メッシュ(Coreソリッド)と三角形化されたポリゴン コア サーフェス(Coreサーフェス)で構成され、2つ目の Tissue 層は四面体ソリッド 組織 メッシュ(Tissueソリッド)と三角形化されたポリゴン 組織 サーフェス(Tissueサーフェス)で構成されています。

    4. お好みで Tissue Solidify SOP のパラメータ設定を調整します。

      • Surface Offset パラメータには、四面体化する前にこのサーフェスを内側にオフセットさせる距離を指定します。このオフセット距離は、下流のSkinパスである程度の余裕代をもたせることを目的にしています。

      • Tissue Relative Thickness パラメータは、Skinサーフェスによって包まれる空間のローカル深度を基準にTissueソリッドを構築する深さを制御します。

      • Core Falloff パラメータは、Coreサーフェス層から Tissue Solidify SOP ノードのInput 4で指定されたジオメトリまでの距離を表現したウェイトマスクアトリビュートを作成します。下流の Tissue Vellum Solver SOPノードがCoreソリッドとMuscleとボーン間でアタッチメント拘束を引き締める時にもこのcorefalloffアトリビュートが使用されます。

      • たいていの場合、 Surface Offset 値は下流の Skin Solidify SOPノードの Skin Thickness パラメータ値に合わせてください。ただし、これは 必須ではありません

      • (任意)プロシージャルに生成されるCoreサーフェスジオメトリに納得いかないようであれば、 Tissue Solidify SOP ノードのInput 3に外部からCoreサーフェスジオメトリを指定することができます。そこで独自のCoreサーフェスを指定すると、 Tissue Relative Thickness パラメータの値が上書きされます。

      • (任意) Tissue Solidify SOP ノードのInput 4にCore減衰用の独自ポリラインを指定することができます。このポリラインは、Muscleとボーンの方へTissueを引き込む 吸引力 が発生する 場所 を決めます。この吸引力の強さは、 Tissue Properties SOPノードの Rest Scale パラメータで決まります。

  7. (任意) Tissueジオメトリをディスクにキャッシュ化します。

    Tissueパスネットワークに触れる度にクックされることがないように、Tissueジオメトリをディスクに保存することを推奨します。

    File Cache SOPノードを作成して、 Tissue Solidify SOP ノードにそれを接続してから、Tissueの四面体化の結果をキャッシュ化します。

  8. (任意) Tissueプロパティマスクをペイントします。

    特定のTissueプロパティ値が特定の領域にのみ適用されるようにTissue上にマスクをペイントしたいのであれば、 Attribute Paint SOPノードを作成して、 Tissue Solidify SOPノードにそれを接続してから、マスク領域をペイントします。個別に Tissue Properties SOP ノードの Mask Attributes パラメータを使用することで、ペイントしたマスク領域のみに特定のTissueプロパティ設定を適用することができます。

  9. Tissueプロパティを設定します。

    Tissue Properties SOPノードを作成してすべてのTissueに共通の設定をしてから、個別に Tissue Properties SOP ノードを作成してそれぞれのTissueで特定のルックまたは 特性 への寄与を設定します。 例えば、引き締まったTissue用の設定を定義した Tissue Properties SOP を作成してから、垂れ下がったTissue用の設定を定義した Tissue Properties SOP を別に作成することができます。

    TissueパスはTissueサーフェスとTissue層の2つのジオメトリで構成されているので、外側と内側のTissueに作用して大元のCore層と繋げる拘束が 2セット もあります。

    • TissueサーフェスのパラメータとTissueソリッドのパラメータは、それぞれのタブで分けられています。どちらのタブにも Shape Stiffness , Volume Stiffness , Damping Ratio , Mass Density に影響を与えるマテリアルプロパティパラメータがあります。

    • Tissue Surface Layer タブ内のアタッチメントパラメータは、Tissueサーフェスをキャラクタ内のMuscleとボーンに取り付ける密着度を制御します。この拘束は、 Sliding パラメータからも影響を受けます。

    • 同様に、 Tissue Solid Layer タブ内のアタッチメントパラメータは、Tissueソリッド四面体の最内側面境界ポイントをCoreサーフェスに取り付ける密着度を制御します。このアタッチメント拘束は 滑りません が、望み通りに弱めてTissueをCoreサーフェスから完全に引き離したり、あるいは、付着したままにすることができます。

    • Attach Rest Scale パラメータの値を1.0未満に設定すると、TissueがMuscleとボーンの方へ引き込まれるようになります。

    • Sliding Rate は、アタッチメントが滑ることができる自由度を決めます。

    • Distance Limit は、Tポーズでの初期アタッチメントポイントを基準にTissueサーフェスが滑ることができる距離を決める距離制限拘束を作成します。

    • Limit Stiffness には、その距離制限を与えるバネの剛性を指定します。

    • Damping Ratio は、 Distance Limit 拘束の停滞度と弾力性を制御します。

    • これらのパラメータを使ってTissue層の各コンポーネント(三角形と四面体)の Rest Scale に影響を与えることができます。Tissueシミュレーション中、これらのTissueコンポーネントは(TポーズのRest状態を基準に)このスケールを目標に収縮と膨張を試みます。

    各パラメータの詳細は、Tissue Properties SOPノードのドキュメントを参照してください。

  10. (任意) Tissueの一部の領域を剛体にします。

    Tissueの一部をできるだけ剛体としてTissueサーフェス層に取り付けて滑りを無視させたい場合、 Group Create SOPノードを作成して、 Tissue Solidify SOPノードにそれを接続してから、Tissueパスネットワーク内でリジッドTissueポイントグループを定義します。

    リジッドTissueポイントグループを定義した場合、さらに下流の Tissue Solver Vellum SOPノードの Advancedタブ ▸ Rigid Group パラメータフィールドにその Group Create SOP で定義した Group Name を入力する必要があります。

    Tip

    定期的に、テスト用に一部分をシミュレーションできるようにBlastを使ってキャラクタのTissueの一部を削除すると良いでしょう。 このような場合、その削除した部分の周囲のポイントは拘束されず、自由落下したり変に滑ったりする可能性があります(例えば、Tissueの袖部分が腕からすぐに滑ってしまうことを想像してください)。 そのような状況でしたら、このようにポイントグループを使用して、切断されたTissue領域を一時的に固定して、残りのTissueが悪影響を受けないようにすることを推奨します。

  11. Tissueをプリロール(先行再生)してホールド(維持)します。

    Tissueパスをキャラクタのショットアニメーションでの開始位置に動かします。 Tissueシミュレーションを計算する前に、このTissueが正しいワールド空間位置で正しいポーズになっている必要があります。

    Muscle Preroll SOPノードを作成して、プロパティノードチェーン内の最後の Tissue Properties SOPにそれを接続してから、そのMuscle Preroll SOPを使用してTissueパスを開始位置に動かしてその位置を維持します。 このノードは、Muscleセットアップの上流のプリロールされたボーンのトランスフォームに合わせてください。

    たとえTissueパスが静的で時間軸で変化しなくても、この Muscle Preroll SOP ノードは、MuscleとボーンをTポーズのRestポジションからショット開始フレーム位置に動かした時に得られたトランスフォームに合わせる機能を利用します。

  12. MuscleパスからMuscleソリッド出力とボーンサーフェス出力を取得します。

    Muscle パスからMuscleソリッドジオメトリ出力とボーンサーフェスジオメトリ出力を取得します。 このジオメトリはアニメーションし、プリロールでベイクされています。 Tissue Solver Vellum SOPノードでは、Tissueをシミュレーションするのにこのジオメトリが必要です。

    SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP Stash SOP Alembic SOPなどを使用することができます。

  13. Muscle出力ジオメトリとボーン出力ジオメトリをすべてマージします。

    Tissue Solver Vellum SOPノードでMuscleソリッド出力のTポーズとボーンサーフェス出力のTポーズのどちらも使用できるようにするには、それらのジオメトリをマージする必要があります。

    Merge SOPノードを作成して、Muscleソリッド出力のインポートノードとボーンサーフェス出力のインポートノードをそのMerge SOPノードに接続します。

  14. Tissueをシミュレーションします。

    Vellum Solverを使用してTissueシミュレーションを計算します。

    Tissue Solver Vellum SOPノードを作成して、上流のTissue Preroll SOPをInput 1に、そのMerge SOPノードをInput 2に接続してから、お好みでソルバのすべてのパラメータ設定を設定します。

  15. Tissueシミュレーションをクリーンアップします。

    Blast SOPノードを作成して、 Tissue Solver Vellum SOPノードにそれを接続します。

    次に、 Clean SOPノードを作成して、 Blast SOPノードにそれを接続します。

    Blast SOP ノードと Clean SOP ノードを使用して、もはや不要になったTissueのソリッド(四面体)コンポーネントとアトリビュートを除去します。 ただし、tposeアトリビュートは Muscles & Tissue シミュレーションプロセスの後のステージで使用するので必ず残してください。

  16. Tissueシミュレーションをディスクにキャッシュ化します。

    File Cache SOPノードを作成して、 Clean SOPノードにそれを接続してから、そのFile Cache SOPを使用してTissueシミュレーションの結果をディスクにキャッシュ化します。

Skinパス

キャラクタのTissueシミュレーションが終了したら、任意でキャラクタのSkinパスを作成することができます。 Skinパスでは、Tissueパスだけでは成し遂げることができない最外側サーフェスへのディテールの追加ができるようにキャラクタに追加でTissue層を作成することができます。 例えば、スキンのプロパティとソルバ設定の両方を変化させることで、より細かな皺やヒダ、かすかな折り目といったスキン効果を生成することができます。

Skinパスは以下の2つの別々のジオメトリで構成されています:

  • 三角形化されたポリゴンスキン外側サーフェス(Skinサーフェス)

  • 四面体ソリッドスキン内側メッシュ(Skinソリッド)

肉厚を追加してSkinパスを構築することで、Buckling(座屈)、Folding(折り畳み)、動的効果は、層になった布のような挙動ではなく、脂肪質な表皮層のような挙動にすることができます。

重要

必ずしもキャラクタにSkinパスを作成する 必要はありません 。 Tissuパスだけでも色々なスキンのルックを表現することができます。 キャラクタの外側サーフェスに細かなディテールが必要な場合にのみSkinパスを使用することを推奨します。 Skinパスを作成しないのであれば、 Muscle & Tissue シミュレーションの結果をオリジナルの高解像度スキンジオメトリに転送する時に Tissueパス からのシミュレーションキャッシュを使用してください。

Skinネットワークの例

以下のセクションでは、上図のSkinネットワークの例を再現する手順を載せています。 これらの手順を応用することで、ゼロからあなた独自の基本Skinパスを作成することができます。

  1. Skinサーフェスジオメトリを取り込みます。

    オリジナルの高解像度Skinサーフェスジオメトリを取り込みます。このジオメトリはSkinパスを生成するのに必要です。

    SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP Stash SOP Alembic SOPなどを使用することができます。

  2. (任意) 外部でSkinサーフェスをリメッシュします。

    Skinサーフェスを四面体化する前に三角形化する必要があります。 通常では、これは Skin Solidify SOPノード内にある Remesh Surface 設定を使用して行ないます。 しかし、もっと多くの制御でSkinサーフェスポリゴンを三角形化したいのであれば、外部で Remesh SOPノードを作成して、Skinサーフェスをインポートしたノードにそれを接続して、そのRemesh SOPを使用してSkinサーフェスジオメトリを三角形化しても構いません。

  3. Skinサーフェスを三角形化してから四面体化します。

    1. Skin Solidify SOPノードを作成して、高解像度Skinサーフェスジオメトリをインポートしたノードにそれを接続します。

    2. 入力のSkinサーフェスがきれいな正三角形でテセレーションされていることを確認します。Skinサーフェスは、四面体化する前に三角形化する必要があります。三角形化されていなければ、 Skin Solidify SOP の内部の Remesh Surface 設定を使用します。

    3. この Skin Solidify SOP ノードが入力の三角形化されたSkinサーフェスジオメトリから自動的にSkinパスを構築します。このSkinパスは、2つの別々のジオメトリピースで構成されています。1つ目がポリゴン 外側 サーフェス(Skinサーフェス)、2つ目が四面体ソリッド 内側 メッシュ(Skinソリッド)です。

    4. お好みで Skin Solidify SOP のパラメータ設定を調整します。

      • Skin Thickness パラメータには、Skinソリッド層の深さを指定します。

      • Regular Layers パラメータは、スキン全体の厚みにパック化される四面体層の数を決めます。

      Note

      たいていの場合、 Skin Thickness 値は上流の Tissue Solidify SOPノードの Surface Offset パラメータ値に合わせてください。ただし、これは 必須ではありません

  4. (任意) Skinの一部の領域を剛体にします。

    Skinの一部をできるだけ剛体としてSkinサーフェス層に取り付けて滑りを無視させたい場合、 Group Create SOPノードを作成して、 Skin Solidify SOPノードにそれを接続してから、Skinネットワーク内でリジッドSkinポイントグループを定義します。

    リジッドSkinポイントグループを定義した場合、さらに下流の Skin Solver Vellum SOPノードの Advancedタブ ▸ Rigid Group パラメータフィールドにその Group Create SOP で定義した Group Name を入力する必要があります。

    Tip

    定期的に、テスト用に一部分をシミュレーションできるようにBlastを使ってキャラクタのスキンの一部を削除すると良いでしょう。 このような場合、その削除した部分の周囲のポイントは拘束されず、自由落下したり変に滑ったりする可能性があります(例えば、Skinの袖部分が腕からすぐに滑ってしまうことを想像してください)。 そのような状況でしたら、このようにポイントグループを使用して、切断されたSkin領域を一時的に固定して、残りのSkinが悪影響を受けないようにすることを推奨します。

  5. (任意) Skinプロパティマスクをペイントします。

    特定のSkinプロパティ値が特定の領域にのみ適用されるようにSkin上にマスクをペイントしたいのであれば、 Attribute Paint SOPノードを作成して、 Skin Solidify SOPノードにそれを接続してから、マスク領域をペイントします。 個別に Skin Properties SOP ノードの Mask Attributes パラメータを使用することで、ペイントしたマスク領域のみに特定のSkinプロパティ設定を適用することができます。

    Tip

    skinthickness乗数アトリビュートをペイントすることで、スキンの 厚み を変化させることができます。 これを行なうには、上流の Skin Solidify SOPノードの Thickness Multiplier Attribute パラメータを有効にしてから、ペイントしたいアトリビュートの名前を指定します。 デフォルトでは、このアトリビュートはskinthicknessです。 次に、 Attribute Paint SOP ノードの Attributesタブ ▸ Attributesマルチパラメータ でパラメータを追加して Attribute Name パラメータフィールドにそのアトリビュート名を入力します。

  6. Skinプロパティを設定します。

    Create a base Skin Properties SOPノードを作成してすべてのスキンに共通の設定をしてから、個別に Skin Properties SOP ノードを作成してそれぞれのスキンで特定のルックまたは 特性 への寄与を設定します。 例えば、滑るスキン用の設定を定義した Skin Properties SOP を作成してから、緩んだスキン用の設定を定義した Skin Properties SOP を別に作成することができます。

    Skinパスはポリゴンサーフェス外側層と四面体メッシュ内側層の2つの層で構成されているので、スキンに作用して大元のTissue層と繋げる拘束が 2セット もあります。

    • Surface Layer タブには、スキンサーフェスをTissueに取り付ける方法や三角形の物理プロパティに影響を与えるすべてのパラメータが含まれています。スキンサーフェスを大元のTissueサーフェス層に押し込む密着度を決めるには、 Attach Stiffness , Damping , Rest Scale のパラメータ設定を調整します。

    • Solid Layer タブには、Skinソリッド内の四面体に適用される同様のパラメータが含まれています。Skinソリッドを大元のTissueサーフェスに 粘着 または 引き離す 度合いを決めるには、 Attach Stiffness , Damping , Rest Scale のパラメータ設定を調整します。

    • SlidingタブとShrinkageタブにあるパラメータを調整することでも、それらの挙動をそれぞれ調整することができます。

    各パラメータの詳細は、Skin Properties SOPノードのドキュメントを参照してください。

  7. Tissueシミュレーションのキャッシュを取得します。

    Tissueシミュレーションのキャッシュデータを取得します。 Skin Solver Vellum SOPでは、Skinシミュレーションを計算するのにこのジオメトリが必要です。

    SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP Stash SOP Alembic SOPなどを使用することができます。

    キャッシュ化されたTissueジオメトリにプリロールが 設定されていない 場合、Skinシミュレーションを計算する前に Muscle Preroll SOPノードを使用してそのTissueジオメトリを開始位置に動かすことができます。

  8. スキンをプリロール(先行再生)してホールド(維持)します。

    Skinパスをキャラクタのショットアニメーションでの開始位置に動かします。 Skinシミュレーションを計算する前に、このスキンが正しいワールド空間位置で正しいポーズになっている必要があります。

    Muscle Preroll SOPノードを作成して、プロパティノードチェーン内の最後の Skin Properties SOPにそれを接続してから、そのMuscle Preroll SOPを使用してSkinパスを開始位置に動かしてその位置を維持します。 このノードは、Musclesパスの上流のプリロールされたボーンのトランスフォームに合わせてください。

  9. スキンをシミュレーションします。

    Vellum Solverを使用してSkinシミュレーションを計算します。

    Skin Solver Vellum SOPノードを作成して、上流のプリロールしたスキンノードとTissueキャッシュをインポートしたノードにそれを接続してから、お好みでソルバのすべてのパラメータ設定を設定します。

    Skinパスをシミュレーションする際には、以下の拘束リレーションシップを理解していることが重要です:

    • SkinサーフェスはTissueサーフェスに拘束されています。この拘束リレーションシップでは、コリジョンとスライディングが有効になっています。

    • Skinソリッド内側ポイントはTissueサーフェスに拘束されています。この拘束リレーションシップでは、コリジョンが無効で、スライディングが有効になっています。しかし、距離制限するバネアタッチメントは、 Distance Limit set on the Skin Properties SOPノードで設定されている Distance Limit の距離を越えないように滑りを制限します。つまり、Skinサーフェスの滑りは、Skinソリッドの剛性によって間接的に制限されます。

  10. スキンをクリーンアップします。

    Blast SOPノードを作成して、 Skin Solver Vellum SOPノードにそれを接続します。

    次に、 Clean SOPノードを作成して、 Skin Solver Vellum SOPノードにそれを接続します。

    Blast SOP ノードと Clean SOP ノードを使用して、もはや不要になったスキンのソリッド(四面体)コンポーネントとアトリビュートを除去します。 ただし、tposeアトリビュートは Muscles & Tissue セットアッププロセスの最後のステージで使用するので必ず残してください。

  11. Skinシミュレーションをディスクにキャッシュ化します。

    File Cache SOPノードを作成して、 Clean SOPノードにそれを接続してから、そのFile Cache SOPを使用してSkinシミュレーションの結果をディスクにキャッシュ化します。

シミュレーションの転送

キャラクタの Muscles & Tissue シミュレーションが完了したら、次にそのTissueシミュレーション(セットアップでSkinパスを使用しなかった場合)またはSkinシミュレーションからすべてのポイントトランスフォームを、ショットで使用する高解像度メッシュに転送することができます。

変形の転送ネットワークの例

シミュレーションで生成されたポイントトランスフォームを高解像度メッシュに転送するには:

  1. オリジナルの高解像度Skinサーフェスジオメトリ(TissueパスやSkinパスの生成に使用したオリジナルメッシュ)を取り込んで、さらにSkinシミュレーションからシミュレーションキャッシュも取得します。

    SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP Stash SOP Alembic SOPなどを使用することができます。

  2. Extract T-Pose SOPノードを使用して、Skinシミュレーションキャッシュの取得に使用したノードからキャラクタスキン用のTポーズを抽出します。これによって、 ポイント変形操作 に使用可能な Restポジション (tposeアトリビュート)が得られます。

  3. Point Deform SOPを使用して、Skinシミュレーションキャッシュからポイントトランスフォームをキャラクタのオリジナルの高解像度Skinサーフェスジオメトリに転送します。

    オリジナルサーフェスにUV、テクスチャなどが含まれていれば、 Point Deform SOP がシミュレーション出力のみを使用してオリジナルメッシュを変形させると、それらの情報は維持されます。

    Tip

    Point Deform SOP のパラメータを調整してポイントトランスフォームを幾分馴染ませることで(ぼかすことで)、キャラクタのスキンの最終ルックを変化させることができます。

Muscles & Tissue

Muscles & Tissueの扱い方