On this page |
Warning
最近のバージョンで導入されたScale-Invariant ARAPメソッドは三角形の面積と四面体の体積に対してもっと正確に剛性値を適用するようになったので、バージョン19.0.496までのHoudiniで作成された Muscle & Tissue セットアップとその.hip
ファイルに関しては、次のパラメータ値を指示されている値まで上げてください:
-
-
Shape Stiffness パラメータ: 値を10~100倍に上げてください。
-
Fiber Strength parameter: 値を2~10倍に上げてください。
-
-
Tissue Properties SOP Shape Stiffness パラメータ: 値を10~100倍に上げてください。
-
Skin Properties SOP Shape Stiffness パラメータ: 値を10~100倍に上げてください。
紹介 ¶
Houdiniバージョン19.0の新しいVellumベースのMuscles & Tissueシステムを使用して、キャラクタの 筋肉 と スキン をシミュレーションできるようになりました。
新しい Muscles & Tissue システムでは、モデリングされたポリゴンジオメトリを取り込んで、そのジオメトリからリアルな筋肉の動きとスキン効果を模倣する多重層シミュレーションを生成し、あなたのショットに合うようにそのシミュレーション結果を高解像度ジオメトリに書き出すことができます。 このシステムは、どのソースからでもモデルとアニメーションを簡単に取り込めて、ハイレベルなSOPベースのHDAノードを使って迅速にシミュレーションを構成できるように設計されました。
システムの主要機能:
-
筋肉、組織、スキンリグ、シミュレーションが統一されています。
-
Vellumソフトボディシミュレーションが組み込まれたSOPベースのワークフローになっています。
-
非破壊、且つ、完全インタラクティブです。
-
パイプラインに馴染みやすい手段がとれるモジュラー式になっています。
-
すべてのステージをシミュレーションすることも(部分的に)アニメーションすることもできます。
-
自然な見た目の筋肉の滑りが表現できます。
-
スキンレイヤーを介して細かい皺に対応することができます。
-
カスタマイズ可能なトリガーを備えたネイティブの筋肉緊張システムが用意されています。
-
自然な繊維方向を自動計算することができます。
-
追加された人為的なコントロールで筋繊維をインタラクティブにグルーミングすることができます。
-
すべての物理プロパティと拘束プロパティをアトリビュート駆動で制御することができます。
-
Houdiniのジオメトリとビジュアライゼーションツールセットにフルアクセスすることができます。
主な概念 ¶
Muscle & Tissue システムを使って作業すると、キャラクタは 3つ の別々のシミュレーションパスを経て、最終的に変形されたレンダリング可能なサーフェスになります。 各シミュレーションパスの最後に、ジオメトリキャッシュをディスクに保存した後にそのジオメトリキャッシュを次のパスに組み込むようにすることもできます。 シミュレーションパスは、Muscleパス、Tissueパス、Skinパスの3つの構成になっています。 Muscles & Tissue シミュレーション生成工程の最終ステージでは、シミュレーションパスは不要で、むしろジオメトリデフォーマを使用してキャラクタの最終シミュレーションをレンダリング可能な高解像度メッシュに転送する必要があります。
各シミュレーションパスは以下の処理を行ないます:
-
入力のソリッドソフトボディダイナミクスオブジェクト(四面体で構成されたオブジェクト)を操作し、それらのオブジェクト上で見つかったアトリビュートを解釈して、物理プロパティとVellum拘束を構成します。 Muscle & Tissue ワークフローの大部分は、最終的にソルバ内で拘束の作成を駆動するアトリビュート制御だと考えることができます。
-
前のパスの 出力 を 入力 として使用するので、拘束先であり衝突をさせる静的ジオメトリにはアニメーションが付いています。例えば、最初のシミュレーションパスのMuscleパスでは、拘束ジオメトリはアニメーションする解剖学的ボーンによって提供されます。このボーンアニメーションは、KineFXアニメーションやAlembicキャッシュなどのたくさんのソースから派生させることができます。ボーンアニメーションがどのように生成されたのかは関係ありません。唯一の必須条件は、ボーンの静的Tポーズがアニメーションボーンと併せて利用可能であることです。すべてのMuscle & Tissueサーフェスは、必ずそれらのボーンの静的Tポーズを基準にして作成する必要があります。
これらの各パスでキャラクタを動かすと、 Muscle & Tissue システムに関して主に3つの概念に遭遇することでしょう:
シミュレーションジオメトリ ¶
パスの必須条件 ¶
Muscleパス
-
Muscle Solidify SOPノードの必須条件:
-
交差のないマニフォールド(多様体)のポリゴンMuscleサーフェス。
-
-
Muscle Solver Vellum SOPノードの必須条件:
-
物理プロパティアトリビュートと拘束アトリビュートで構成されたソリッドMuscle。
-
アニメーションするボーンサーフェスジオメトリ。
-
Tissueパス
-
Tissue Solidify SOPノードの必須条件:
-
スキンサーフェス。
-
Muscleシミュレーションジオメトリキャッシュ。
-
アニメーションするボーンサーフェスジオメトリ。
-
(任意で)Coreサーフェス。
-
(任意で) Core減衰ポリライン。
-
-
Tissue Solver Vellum SOPノードの必須条件:
-
物理プロパティアトリビュートと拘束アトリビュートで構成されたソリッドTissue。
-
内包するMuscleとボーンのアニメーションを表現したアニメーションサーフェス。
-
Skinパス
-
Skin Solidify SOPノードの必須条件:
-
スキンサーフェス。
-
-
Skin Solver Vellum SOPノードの必須条件:
-
物理プロパティアトリビュートと拘束アトリビュートで構成されたソリッドスキン。
-
内包するTissueアニメーションを表現したアニメーションサーフェス。
-
パスレイヤー ¶
各シミュレーションパスがソリッドソフトボディダイナミクスオブジェクト(四面体で構成されたオブジェクト)を操作するものの、結合されたポリゴンサーフェスも役割を果たします。 例えば、Vellum Solverでスライディング拘束の効果を出すためには、ポリゴンサーフェスがアタッチメントターゲットとして必要です。 この理由は、各ジオメトリレイヤーには四面体とポリゴンサーフェス体の 両方 を格納するからです。
以下の Muscles & Tissue ソリッド化系ノードは、そのジオメトリレイヤーで必要なプリミティブタイプを生成します:
Muscleパス
Muscleは、入力のMuscleポリゴンサーフェスを四面体化することで生成され、繋がったピース毎に個々のMuscleが作成されます。
Muscleを作成する処理では、繋がったピース毎に異なるIDを含んだmuscle_id
アトリビュートが追加されます。
重複したMuscleサーフェスが同じmuscle_id
値を共有していれば、それらのサーフェスは結合されるものとして四面体化されます。
重複したMuscleサーフェスが異なるmuscle_id
値を持っていれば、それらのサーフェスは個別に四面体化され、重複したオブジェクトとして残ります。
Muscle用ポリゴンサーフェスは、ソリッド化の工程で 作成されません 。
代わりに、Muscle用ポリゴンサーフェスは、Vellumスライディング拘束で必要になった場合で のみ 、 Muscle Solver Vellum SOPノード内でその場で作成されます。
Tissueパス
Tissueは、レイヤー化の手法で生成されます。 おそらく Muscle & Tissue システムで最も複雑なオブジェクトであるTissueソリッドは、 2つの層 に分けられています。 最も内側の組織層のことを Core と呼び、そのCoreを覆う層のことを単にTissueと呼びます。 ポリゴンサーフェスは、Core四面体とTissue四面体の両方を包んで作成されます。 その結果として、Tissueパスは、Tissueサーフェス、Tissueソリッド、Coreサーフェス、Coreソリッドの 4つ の別々のジオメトリで構成されます。 このCoreはTissueをMuscleに取り付ける 仲介 の役割を果たします。 つまり、CoreはMuscleとボーンに堅固に取り付け、Tissueのアタッチメントターゲットとして機能します。 さらにCoreには、Tissueジオメトリが(負圧を受けることで)Muscleとボーンの方に押されるようにするために、Tissueジオメトリに 内側への引っ張り を課すことによるスケーリングフォースに応答する機能があります。
Skinパス
Tissue層とほぼ同様で、スキンは(非常に薄いソリッドではあるものの)ポリゴンの外殻で表現されたソリッドとして生成されます。 スキンオブジェクトをポリゴンサーフェスのみで生成するのとは対照的に、四面体メッシュとして生成すれば、厚みと実体によってより 肉っぽい 見た目を模倣する機会が増えます。 スキンのソリッドコンポーネント(スキンソリッド)は、形状の剛性や体積維持といった物理プロパティを伝達させることができるのに対して、ポリゴンサーフェス(スキンサーフェス)は伸縮抵抗に寄与して望ましい皺効果を得ることができます。
アタッチメント ¶
シミュレーション結果を微調整するとなった場合、各シミュレーションパスとそれに関連したアタッチメント拘束との関係を理解していることが大事です。 複数のアタッチメント拘束は共存し同じジオメトリに並行で影響を与えるので、シミュレーションコンテキスト毎にジオメトリに作用する各タイプの拘束について習熟していることが重要です。
Muscle拘束 ¶
Muscle拘束は、 Muscle Properties SOPノードと Muscle Constraint Properties Vellum SOPノードを使用して構成します。 これらのノードは、入力としてソリッドMuscleジオメトリを受け取り、アトリビュートを追加/修正してから、そのデータを下流に渡します。
次に、 Muscle Vellum Solver SOPノードがそれらのアトリビュート値を以下の方法で物理プロパティまたはアタッチメント拘束のどちらかに適用します:
-
Muscle Endsとして指定された領域内にMuscleをボーンに堅固に取り付けます。
-
Muscle to Boneアタッチメントを持つように指定された領域内にバネのように滑るアタッチメントを使ってMuscleをボーンに取り付けます。
-
Muscle to Muscleアタッチメントを介して、バネのようなアタッチメントを使ってMuscleを他のMuscleに取り付けます。
-
Muscle Glueアタッチメントを持つように指定された領域内に堅固に滑らないアタッチメントを使ってMuscleを他のMuscleに取り付けます。
どの場合でも、 firm(堅固) アタッチメントとは、非常に強い剛性を持ち、Restポジションから離そうとする力に抵抗することを意味します。 他のアタッチメントは、剛性と減衰率の特性の影響を受けるので、応答性と弾力性のある挙動に影響を与えることができます。
Tissue拘束 ¶
Tissue拘束は、 Tissue Properties SOPノードを使用して構成します。 このノードは、入力としてTissueジオメトリを受け取り、アトリビュートを追加/修正してから、そのデータを下流に渡します。 次に、 Tissue Vellum Solver SOPノードがそれらのアトリビュート値を使用して必要な拘束を生成します。
Tissueは以下の方法で拘束されます:
-
すべてのCoreポイントは、Muscleとボーンの入力ジオメトリに堅固に取り付けられます。
-
Tissue層の内側サーフェス(Tissueソリッド)は、Core層の外側サーフェス(Coreサーフェス)に取り付けられます。
-
Tissue層の外側サーフェス(Tissueサーフェス)は、Muscleとボーンの入力ジオメトリにスライディングアタッチメントを使って取り付けられます。
-
外側サーフェス(Tissueサーフェス)が遠くに滑って行かないようにする距離制限アタッチメントも存在します。
どの場合でも、 firm(堅固) アタッチメントとは、非常に強い剛性を持ち、Restポジションから離そうとする力に抵抗することを意味します。 他のアタッチメントは、剛性と減衰率の特性の影響を受けるので、応答性と弾力性のある挙動に影響を与えることができます。
Skin拘束 ¶
Skin拘束は、 Skin Properties SOPノードを使用して構成します。 このノードは、入力としてスキンジオメトリを受け取り、アトリビュートを追加/修正してから、そのデータを下流に渡します。 次に、 Skin Vellum Solver SOPノードがそれらのアトリビュート値を使用して必要な拘束を生成します。
Skinは以下の方法で拘束されます:
-
すべての内側スキン(Skinソリッド)のポイントは、入力のTissueジオメトリ(Tissueサーフェス)上に取り付けられて滑ります。
-
外側スキン(Skinサーフェス)のポイントは、そのTissueジオメトリ(Tissueサーフェス)に対して別のスライディングアタッチメントを持ちます。
-
Skinサーフェスが遠くに滑って行かないようにする距離制限アタッチメントも存在します。
これら2つの異なるアタッチメント拘束は、Skinパスに対して個別にそれらの拘束を調整できるようにするために存在します。 (Skinソリッドに対して)ソリッドポイントアタッチメントを使用することで、スキンとその大元のTissue間の接続を粘着したり緩めることができます。 十分に緩ませると、そのスキンがまるでTissueを緩く覆い被せたジャケットのような見え方にすることができます。 (Skinサーフェスに対して)外側サーフェスアタッチメントを使用すると、外側ポリゴンをTissueに対してもっと密着させて隙間に深く押し付けることもできます。
フォース ¶
筋繊維スケールフォース & 筋緊張 ¶
Muscleは、ローカル軸に沿って剛性フォースに反応して、筋肉の収縮に似た効果を生成します。 私どもは、この振る舞いのことを Fiber Scaling(筋繊維スケーリング) と呼んでいます。 デフォルトではMuscleは比較的高いボリューム維持剛性が割り当てられているので、筋繊維スケーリングがローカル軸に沿って適用されると、それらの軸と垂直な方向で体積維持による 膨張 が起こります。
筋繊維スケーリングの振る舞いに寄与する主なアトリビュートは以下のとおりです:
-
muscletension
は、筋繊維スケーリングをMuscleに適用します。それによってMuscleが活発になり、 Muscle Flex SOPノードによってMuscleを アニメーション させることができます。 -
fiberstiffness
は、筋繊維スケールフォースや筋繊維スケーリングの 強度 を制御します。これは Muscle Properties SOPのFiber Strengthパラメータを使って調整することができます。 -
materialW
ベクトルアトリビュートは、ローカル軸の向きを制御し、 Fiber Groom SOPノードを使用することで、その向きをインタラクティブに変更することができます。 -
fibervolumescale
は、筋繊維スケーリングの影響を受けた時の体積維持応答を大げさにします。これは Muscle Properties SOPのFiber Volume Scaleパラメータを使って調整することができます。
筋繊維スケーリングはMuscleの領域別に可変します。 Muscle Properties SOPノードでtendon(腱)領域として指定された領域では Fiber Strength が弱くなり、Muscleの belly(腹) 領域は筋繊維スケールフォースから完全に影響を受けます。
重要
結局の所、筋繊維スケーリングの振る舞いの剛性と応答性は、 Muscle Properties SOP上の すべて の繊維系パラメータの組み合わせで制御されます。
体積のスケールまたは収縮 ¶
Tissue Properties SOPノードと Skin Properties SOPノードには、Tissueとスキンの shrinkage(収縮) を制御するパラメータがあります。
Restポジション(tpose
アトリビュート)では、Tissue、Core、スキンは、それぞれのジオメトリ内の各プリミティブに静止体積と静止形状を記録します。
シミュレーションの間に、そのRest設定を初期状態を基準に変更することができます。
静止形状と静止体積に対して スケール値 を使用することで、このRest設定を調整してTissueとスキンが内部のMuscleオブジェクトとボーンオブジェクトの方へより密接に引っ張られて収縮包装の効果を生成することができます。 Core、Tissueソリッド、Tissueサーフェス、Skinソリッド、SkinサーフェスのRestスケール間で相互作用のバランスを取ることで、 Muscles & Tissue シミュレーションで様々な異なるTissueの見た目を表現することができます。 例えば、サーフェス三角形を拡大しつつTissue四面体を収縮させると、Tissueの表面に座屈を発生させることができます。
スライディング ¶
アタッチメントに スライディング 拘束を適用した場合、はるかに信頼性の高いシミュレーションを実現することができます。 スライディング拘束を使用すると、サーフェスオブジェクトとMuscleオブジェクトを、初期状態を基準にアタッチメントのポイントを自由に滑らせつつ内部ジオメトリに付着したままにすることができます。 逆に言うと、滑りを強くすることで、あらゆる方向にだらける筋肉と粘性のある流体のようにボーンからにじみ出る組織といった効果を生み出すこともできます。
Tissue Properties SOPノード上や Skin Properties SOPノード々にある Slide Rate パラメータと Slide Distance パラメータを使用して、Tissueとスキンの外側サーフェス(TissueサーフェスとSkinサーフェス)の滑りを制御することができます。 Slide Rate パラメータは、ソルバの計算中のタイムステップ毎に再投影されるターゲット位置の寄与可能な変化量に影響を与えます。 Slide Rate パラメータの値を1.0に設定することで、ターゲットアタッチ位置の再投影がすべてのタイムステップで完全に更新させることができ、 値を小数点値に設定すると、その割合でしか位置ベクトルが更新されなくなります。 Vellumスライディング拘束に関する詳細は、スライディング拘束を参照してください。
ノード ¶
プロパティノード
中心的ワークフロー ¶
以下のセクションでは、 Muscle & Tissue シミュレーションで各パスを生成するのに必要な異なるネットワーク手順について説明しています。
Muscleパス ¶
Muscles & Tissue シミュレーション生成の最初のステージでは、そのシミュレーションの Muscleパス を生成します。 このMuscleパスでは、アニメーションするボーンジオメトリと一緒に動いて曲がるソリッドMuscleジオメトリを生成し、下流でTissueの変形(ポイントトランスフォーム)の大部分を駆動させます。
以下のセクションでは、上図のMuscleネットワークの例を再現する手順を載せています。 これらの手順を応用することで、ゼロからあなた独自の基本Muscleパスを作成することができます。
-
静的なMuscleサーフェス、アニメーションするボーンサーフェス、静的なTポーズのボーンサーフェスを取り込みます。
キャラクタからMuscleパス用のソリッドMuscleを生成できるようにするには、静的なMuslceサーフェス、アニメーションするボーンサーフェス、静的なTポーズのボーンサーフェスが必要になります。
SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP、 Stash SOP、 Alembic SOPなどを使用することができます。
-
Muscleサーフェスジオメトリを取り込みます。彫刻されるMuscleサーフェスは、現実世界のスケール(1 Houdini単位 = 1メートル)でモデリングされた交差のないマニフォールドなポリゴンジオメトリにしてください。
-
アニメーションするボーンサーフェスを取り込みます。ポリゴンのボーンサーフェスは、現実世界のスケール(1 Houdini単位 = 1メートル)でモデリングしてください。
-
Tポーズ(Restポジション)のボーンサーフェスを取り込みます。
-
-
それぞれのMuscleに名前を付けます。
Muscle & Tissue シミュレーションで筋肉として表現される各Muscleサーフェス(自己完結型の繋がったプリミティブ)には、四面体化する前に
muscle_id
アトリビュートまたは name アトリビュートがなければなりません。Muscle ID SOPノードを作成し、静的なMuscleサーフェスを取り込んだノードにそれを接続してから、 その Muscle ID SOP を使用してMuscleサーフェスジオメトリの各ピースを選択して、それらのピースに Name を割り当てます。
-
(任意) 不要なジオメトリグループを除去します。
手順2でジオメトリグループを使用してMuscleサーフェスを選択していた場合、それらの
group
アトリビュートはもはや不要です。 Muscleジオメトリからそれらのgroup
アトリビュートを除去することで、下流ノードに必要なアトリビュートのみを渡すことができます。Group Delete SOPノードを作成し、 Muscle ID SOPにそれを接続してから、 Group Delete SOP を使用してMuscleから不要なジオメトリグループを選択して除去します。
-
ボーンサーフェスにTポーズを設定します。
Muscles & Tissue 生成プロセスを通じてジオメトリをTポーズ位置に戻せるように、キャラクタのボーンとMuscleにRestポジションまたは Tポーズ を記録することが必要です。
-
Set T-Pose SOPノードを作成し、静的なTポーズのボーンサーフェスを取り込んだノードにそれを接続します。 Set T-Pose タブメニュー項目は、プリセットを使って Rest Position SOPノードを作成してTポーズ設定を格納します。
-
Rest Position SOPを使用して、Tポーズのボーンジオメトリの現行ポーズを
tpose
Pointアトリビュートに格納します。
-
-
(任意) 外部でMuscleサーフェスを三角形化します。
Muscleサーフェスを四面体化する前に三角形化する必要があります。 通常では、これは Muscle Solidify SOPノード内にある Remesh Surface 設定を使用して行ないます。 しかし、もっと多くの制御でMuscleポリゴンを三角形化したいのであれば、外部で Remesh SOPノードを使用してMuscleジオメトリを三角形化しても構いません。
Remesh SOPノードを作成して、 Muscle ID SOPノードにそれを接続してから、そのRemesh SOPを使用してMuscleジオメトリを三角形化した後に四面体を構築します。
-
Muscleサーフェスを三角形化してから四面体化します。
-
Muscle Solidify SOPノードを作成して、 Muscle ID SOPノードにそれを接続します。
-
入力のMuscleサーフェスがきれいな正三角形でテセレーションされていることを確認します。Muscleサーフェスは、四面体化する前に三角形化する必要があります。これをするには、 Muscle Solidify SOP ノード内の Remesh Surface 設定を使用します。
-
この Muscle Solidify SOP ノードが入力の三角形化されたMuscleサーフェスを自動的に四面体化します。MuscleのサーフェスはVellumスライディング拘束で必要になった場合にのみ Muscle Solver Vellum SOPノード内でその場で生成されるので、TissueパスやSkinパスと同様に、ソリッドMuscleは外側ポリゴンサーフェスを 持ちません 。
-
お好みで Tissue Solidify SOP のパラメータを調整します。
-
Max Tet Size パラメータは、個々に生成される四面体の上限サイズを設定します。四面体が小さいほど、より詳細なMuscleを下流のTissueパスに流せるようになります。反対に四面体が大きいほど、Muscleのパフォーマンスが速くなります。
-
-
-
Muscleの繊維方向をグルームします(整えます)。
筋肉は曲がると、 繊維ベクトル の方向に収縮します。 この繊維ベクトルは、Muscleのローカル軸の向きを定義します。 筋肉を期待した方向に収縮させたいのであれば、明確に独自の繊維方向ベクトルを定義する必要があります。 Fiber Groom SOPノードを使用することで、Muscleに対してその繊維方向ベクトルをペイントすることができます。
Fiber Groom SOP ノードを作成して、 Muscle Solidify SOP ノードにそれを接続してから、そのFiber Groom SOPを使用して、筋肉を収縮させたい方向に流れるようにインタラクティブに繊維方向ベクトルをグルームします。 この独自の繊維ベクトルは
materialW
アトリビュートに格納されます。 このmaterialW
アトリビュートは後で下流の Muscle Flex SOPで使用されます。 -
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 閾値がどの値以上で筋肉領域を筋肉の腹部とみなし、どの値以下で筋肉領域を腱とみなすのかを定義します。
-
-
ボーンサーフェスをプリロール(先行再生)します。
Muscle Preroll SOPノードを作成して、上流のボーンサーフェスのTポーズノードにそれを接続してから、キャラクタのボーンがTポーズからショットアニメーションの最初のフレームにおけるワールド空間位置に遷移させる際の Holdフレーム番号 や Prerollフレーム数 を設定します。 任意で、このノードをビューポートステートにしてからトランスフォームハンドルを使用することで、キャラクタのボーンのプリロールにトランスフォームオフセットを加えることもできます。
Tポーズから開始位置までの遷移に使用されたトランスフォームは、出力ジオメトリ上に
preroll_
Detailアトリビュートとして格納されます。 TissueパスやSkinパスでは、追加で Muscle Preroll SOP ノードを使用してこれと同じトランスフォームデータを参照することで、キャラクタの他のコンポーネントをまったく同じ位置に移動させることができるようになります。 -
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 SOPの Muscle Ends パラメータで決めます。
-
Muscle to Muscleパラメータは、Muscleをお互いに拘束する方法を制御します。
-
Muscle to Boneパラメータは、Muscleをボーンジオメトリに取り付ける方法を制御します。
-
Velocity Blendパラメータは、Muscleが近隣のMuscleから受けるVelocity量を制御します。
-
Collisionsパラメータは、Muscleのコリジョン半径を定義します。
Tip
Muscle Constraint Properties Vellum SOPノードパラメータ内の Visualize ボタンを使用することで、ビューポートステート内で異なる拘束の現行設定の視覚的表現を表示することができます。
-
-
(任意) 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
アトリビュート)、プロパティ(物理と拘束)を受け取ります。
-
-
(任意) 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 拘束コネクションがボーンの表面に沿って滑ることができる度合いを決めます。
-
-
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
値にキーフレームを打つことができます。 -
-
プリロールされたボーンサーフェスを取得します。
Muscle Flex SOPノード内でプロキシアニメーションを駆動させるには、アニメーションするボーンサーフェスが必要なので、上流のボーンサーフェスの Muscle Preroll SOP に記録されているデータを取得する必要があります。
Object Merge SOPノードを作成して、その上流のボーンサーフェスの Muscle Preroll SOP ノードを参照します。
-
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を活性化させるかどうかをソルバに伝えることができます。
-
-
-
Muslceをシミュレーションする。
Vellum Solverを使用してMuscleシミュレーションを計算します。
-
Muscle Vellum Solver SOPノードを作成して、 Muscle Flex SOPノードにその1番目の入力を接続し、プリロールしたボーンサーフェスの Object Merge SOP ノードにその2番目の入力を接続してから、お好みでソルバのすべてのパラメータ設定を設定します。
-
Muscleに Muscle Ends 拘束が使用されている場合、必ず Muscle Vellum Solver SOP のMuscle Endsパラメータを使用して、それらの拘束の挙動を選択してください。
-
-
(任意)Muscle Solverの1番目の入力に アニメーションする
muscletension
アトリビュートが 存在しない 場合、Muscle Solverの3番目の入力に屈曲する参照プリミティブを接続することで、アニメーションするmuscletension
アトリビュートを直接用意することができます。この場合、Muscleはその3番目の入力から合致するmuscle_id
を検索してから、1番目のポイント上で見つかったmuscletension
アトリビュートを使用するようになります。
-
-
Muscleをディスクにキャッシュ化します。
File Cache SOPノードを作成して、 Muscle Vellum Solver SOPノードにそれを接続してから、そのFile Cache SOPを使用してMuscleシミュレーションの結果をディスクにキャッシュ化します。
-
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パスを作成することができます。
-
Skinサーフェスを取り込みます。
オリジナルの高解像度Skinサーフェスジオメトリを取り込みます。このサーフェスはTissueパス用のジオメトリを生成するのに必要です。
SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP、 Stash SOP、 Alembic SOPなどを使用することができます。
-
MuscleパスからMuscleシミュレーションとアニメーションボーンサーフェス出力を取得します。
Muscleパス からMuscleシミュレーションとアニメーションボーンサーフェスジオメトリ出力を取得します。 Tissue Solidify SOPノードは、Tissue四面体を作成するためにこのジオメトリが必要です。
SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP、 Stash SOP、 Alembic SOPなどを使用することができます。
-
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
アトリビュートを抽出します。
-
-
Muscleシミュレーション出力のTポーズとボーンサーフェス出力のTポーズをマージします。
Tissue Solidify SOPでMuscleシミュレーション出力のTポーズとアニメーションボーンサーフェス出力のTポーズのどちらも使用できるようにするには、それらのポイントトランスフォームRestデータをマージする必要があります。
Merge SOPノードを作成して、Muscleシミュレーション出力からTポーズを抽出したノードとアニメーションボーンサーフェス出力からTポーズを抽出したノードの両方をその Merge SOP ノードに接続します。
-
(任意) 外部で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 で生成されたターゲットメッシュサイズアトリビュートを削除します。
-
-
内部的にTissueサーフェスを三角形化してから四面体化します。
-
Tissue Solidify SOPノードを作成して、 Merge SOPノードをその
Input 2
に接続してから、インポートしたボーンサーフェスジオメトリの Extract T-Pose SOPノードをそのInput 4
に接続します。 -
入力のTissueサーフェスがきれいな正三角形でテセレーションされていることを確認します。Tissueサーフェスは、四面体化する前に三角形化する必要があります。これをするには、 Tissue Solidify SOP ノード内の Remesh Surface 設定を使用します。
-
この Tissue Solidify SOP ノードが入力の三角形化されたTissueサーフェスを自動的に四面体化します。Tissueパスは2つの 層 を持ち、それぞれの層は2つの別々のジオメトリピースで構成されています。1つ目の Core 層は四面体ソリッド コア メッシュ(Coreソリッド)と三角形化されたポリゴン コア サーフェス(Coreサーフェス)で構成され、2つ目の Tissue 層は四面体ソリッド 組織 メッシュ(Tissueソリッド)と三角形化されたポリゴン 組織 サーフェス(Tissueサーフェス)で構成されています。
-
お好みで 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 パラメータで決まります。
-
-
-
(任意) Tissueジオメトリをディスクにキャッシュ化します。
Tissueパスネットワークに触れる度にクックされることがないように、Tissueジオメトリをディスクに保存することを推奨します。
File Cache SOPノードを作成して、 Tissue Solidify SOP ノードにそれを接続してから、Tissueの四面体化の結果をキャッシュ化します。
-
(任意) Tissueプロパティマスクをペイントします。
特定のTissueプロパティ値が特定の領域にのみ適用されるようにTissue上にマスクをペイントしたいのであれば、 Attribute Paint SOPノードを作成して、 Tissue Solidify SOPノードにそれを接続してから、マスク領域をペイントします。個別に Tissue Properties SOP ノードの Mask Attributes パラメータを使用することで、ペイントしたマスク領域のみに特定のTissueプロパティ設定を適用することができます。
-
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ノードのドキュメントを参照してください。
-
-
(任意) 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が悪影響を受けないようにすることを推奨します。
-
Tissueをプリロール(先行再生)してホールド(維持)します。
Tissueパスをキャラクタのショットアニメーションでの開始位置に動かします。 Tissueシミュレーションを計算する前に、このTissueが正しいワールド空間位置で正しいポーズになっている必要があります。
Muscle Preroll SOPノードを作成して、プロパティノードチェーン内の最後の Tissue Properties SOPにそれを接続してから、そのMuscle Preroll SOPを使用してTissueパスを開始位置に動かしてその位置を維持します。 このノードは、Muscleセットアップの上流のプリロールされたボーンのトランスフォームに合わせてください。
たとえTissueパスが静的で時間軸で変化しなくても、この Muscle Preroll SOP ノードは、MuscleとボーンをTポーズのRestポジションからショット開始フレーム位置に動かした時に得られたトランスフォームに合わせる機能を利用します。
-
MuscleパスからMuscleソリッド出力とボーンサーフェス出力を取得します。
Muscle パスからMuscleソリッドジオメトリ出力とボーンサーフェスジオメトリ出力を取得します。 このジオメトリはアニメーションし、プリロールでベイクされています。 Tissue Solver Vellum SOPノードでは、Tissueをシミュレーションするのにこのジオメトリが必要です。
SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP、 Stash SOP、 Alembic SOPなどを使用することができます。
-
Muscle出力ジオメトリとボーン出力ジオメトリをすべてマージします。
Tissue Solver Vellum SOPノードでMuscleソリッド出力のTポーズとボーンサーフェス出力のTポーズのどちらも使用できるようにするには、それらのジオメトリをマージする必要があります。
Merge SOPノードを作成して、Muscleソリッド出力のインポートノードとボーンサーフェス出力のインポートノードをそのMerge SOPノードに接続します。
-
Tissueをシミュレーションします。
Vellum Solverを使用してTissueシミュレーションを計算します。
Tissue Solver Vellum SOPノードを作成して、上流のTissue Preroll SOPを
Input 1
に、そのMerge SOPノードをInput 2
に接続してから、お好みでソルバのすべてのパラメータ設定を設定します。 -
Tissueシミュレーションをクリーンアップします。
Blast SOPノードを作成して、 Tissue Solver Vellum SOPノードにそれを接続します。
次に、 Clean SOPノードを作成して、 Blast SOPノードにそれを接続します。
Blast SOP ノードと Clean SOP ノードを使用して、もはや不要になったTissueのソリッド(四面体)コンポーネントとアトリビュートを除去します。 ただし、
tpose
アトリビュートは Muscles & Tissue シミュレーションプロセスの後のステージで使用するので必ず残してください。 -
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サーフェスジオメトリを取り込みます。
オリジナルの高解像度Skinサーフェスジオメトリを取り込みます。このジオメトリはSkinパスを生成するのに必要です。
SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP、 Stash SOP、 Alembic SOPなどを使用することができます。
-
(任意) 外部でSkinサーフェスをリメッシュします。
Skinサーフェスを四面体化する前に三角形化する必要があります。 通常では、これは Skin Solidify SOPノード内にある Remesh Surface 設定を使用して行ないます。 しかし、もっと多くの制御でSkinサーフェスポリゴンを三角形化したいのであれば、外部で Remesh SOPノードを作成して、Skinサーフェスをインポートしたノードにそれを接続して、そのRemesh SOPを使用してSkinサーフェスジオメトリを三角形化しても構いません。
-
Skinサーフェスを三角形化してから四面体化します。
-
Skin Solidify SOPノードを作成して、高解像度Skinサーフェスジオメトリをインポートしたノードにそれを接続します。
-
入力のSkinサーフェスがきれいな正三角形でテセレーションされていることを確認します。Skinサーフェスは、四面体化する前に三角形化する必要があります。三角形化されていなければ、 Skin Solidify SOP の内部の Remesh Surface 設定を使用します。
-
この Skin Solidify SOP ノードが入力の三角形化されたSkinサーフェスジオメトリから自動的にSkinパスを構築します。このSkinパスは、2つの別々のジオメトリピースで構成されています。1つ目がポリゴン 外側 サーフェス(Skinサーフェス)、2つ目が四面体ソリッド 内側 メッシュ(Skinソリッド)です。
-
お好みで Skin Solidify SOP のパラメータ設定を調整します。
-
Skin Thickness パラメータには、Skinソリッド層の深さを指定します。
-
Regular Layers パラメータは、スキン全体の厚みにパック化される四面体層の数を決めます。
Note
たいていの場合、 Skin Thickness 値は上流の Tissue Solidify SOPノードの Surface Offset パラメータ値に合わせてください。ただし、これは 必須ではありません 。
-
-
-
(任意) 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が悪影響を受けないようにすることを推奨します。
-
(任意) 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 パラメータフィールドにそのアトリビュート名を入力します。 -
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ノードのドキュメントを参照してください。
-
-
Tissueシミュレーションのキャッシュを取得します。
Tissueシミュレーションのキャッシュデータを取得します。 Skin Solver Vellum SOPでは、Skinシミュレーションを計算するのにこのジオメトリが必要です。
SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP、 Stash SOP、 Alembic SOPなどを使用することができます。
キャッシュ化されたTissueジオメトリにプリロールが 設定されていない 場合、Skinシミュレーションを計算する前に Muscle Preroll SOPノードを使用してそのTissueジオメトリを開始位置に動かすことができます。
-
スキンをプリロール(先行再生)してホールド(維持)します。
Skinパスをキャラクタのショットアニメーションでの開始位置に動かします。 Skinシミュレーションを計算する前に、このスキンが正しいワールド空間位置で正しいポーズになっている必要があります。
Muscle Preroll SOPノードを作成して、プロパティノードチェーン内の最後の Skin Properties SOPにそれを接続してから、そのMuscle Preroll SOPを使用してSkinパスを開始位置に動かしてその位置を維持します。 このノードは、Musclesパスの上流のプリロールされたボーンのトランスフォームに合わせてください。
-
スキンをシミュレーションします。
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ソリッドの剛性によって間接的に制限されます。
-
-
スキンをクリーンアップします。
Blast SOPノードを作成して、 Skin Solver Vellum SOPノードにそれを接続します。
次に、 Clean SOPノードを作成して、 Skin Solver Vellum SOPノードにそれを接続します。
Blast SOP ノードと Clean SOP ノードを使用して、もはや不要になったスキンのソリッド(四面体)コンポーネントとアトリビュートを除去します。 ただし、
tpose
アトリビュートは Muscles & Tissue セットアッププロセスの最後のステージで使用するので必ず残してください。 -
Skinシミュレーションをディスクにキャッシュ化します。
File Cache SOPノードを作成して、 Clean SOPノードにそれを接続してから、そのFile Cache SOPを使用してSkinシミュレーションの結果をディスクにキャッシュ化します。
シミュレーションの転送 ¶
キャラクタの Muscles & Tissue シミュレーションが完了したら、次にそのTissueシミュレーション(セットアップでSkinパスを使用しなかった場合)またはSkinシミュレーションからすべてのポイントトランスフォームを、ショットで使用する高解像度メッシュに転送することができます。
シミュレーションで生成されたポイントトランスフォームを高解像度メッシュに転送するには:
-
オリジナルの高解像度Skinサーフェスジオメトリ(TissueパスやSkinパスの生成に使用したオリジナルメッシュ)を取り込んで、さらにSkinシミュレーションからシミュレーションキャッシュも取得します。
SOPでジオメトリを取り込む方法がたくさんあります。 例えば、 Object Merge SOPノード、 File SOP、 Stash SOP、 Alembic SOPなどを使用することができます。
-
Extract T-Pose SOPノードを使用して、Skinシミュレーションキャッシュの取得に使用したノードからキャラクタスキン用のTポーズを抽出します。これによって、 ポイント変形操作 に使用可能な Restポジション (
tpose
アトリビュート)が得られます。 -
Point Deform SOPを使用して、Skinシミュレーションキャッシュからポイントトランスフォームをキャラクタのオリジナルの高解像度Skinサーフェスジオメトリに転送します。
オリジナルサーフェスにUV、テクスチャなどが含まれていれば、 Point Deform SOP がシミュレーション出力のみを使用してオリジナルメッシュを変形させると、それらの情報は維持されます。
Tip
Point Deform SOP のパラメータを調整してポイントトランスフォームを幾分馴染ませることで(ぼかすことで)、キャラクタのスキンの最終ルックを変化させることができます。