On this page |
Finite Element Solver(有限要素ソルバ)は、シミュレーションするジオメトリのアトリビュートを認識して、使用します。
DOPネットワークでは、このシミュレーションジオメトリがGeometry
という名前のシミュレーションデータとしてシミュレーションするオブジェクトに追加されます。
オブジェクトを作成する時、ジオメトリとそれに該当するすべてのアトリビュートが Initial Geometry から読み込まれます。
これは標準の位置とVelocityのアトリビュートであるP
とv
を含みます。
Finite Element Solverは、入力アトリビュートと出力アトリビュートに対応しています。 シミュレーション状態などの一部のアトリビュートは、入力と出力の両方のアトリビュートです。 入力アトリビュートには、マテリアル特性用の乗数アトリビュート、fracture(粉砕)アトリビュート、ターゲット位置とそれに該当するハード/ソフト拘束を制御するアトリビュートが含まれています。 出力アトリビュートには、四面体品質、エネルギー密度、FEMノードのフォース、衝突情報アトリビュート、粉砕情報アトリビュートに対するオプションのアトリビュートが含まれています。
マテリアル特性用の乗数アトリビュート ¶
シミュレーションされるオブジェクトの各マテリアル特性は、乗数Pointアトリビュートを使って局所的に変更することができます。 一般的には、乗数アトリビュートによって、オブジェクトの Model タブ内の各マテリアル特性に影響を与えることができます。 通例では、そのパラメータの名前がアトリビュートの名前になっていて、マウスカーソルをパラメータ上に置いた時に表示される“Parameter:”の後の名前です。
Pointアトリビュートを使えば、オブジェクトのマテリアル特性を局所的に変更することができます。 例えば、ポリゴンを他のポリゴンよりもストレッチと曲げの抵抗を強くすることができます。 これらのアトリビュートは、 Model タブのパラメータの乗数として動作します: Stiffness(剛性)乗数は、Finite Element Solverで認識されるオブジェクトタイプすべてのローカルStiffnessを変更するための便利な手段です:
名前 | クラス | タイプ | 説明 |
---|---|---|---|
stiffness
|
Point | Float | すべてのタイプのStiffness(剛性)の乗数。 |
dampingratio
|
Point | Float | すべてのDamping(減衰)率の乗数。 |
massdensity
|
Point | Float | すべてのmass density(質量密度)の乗数。 |
Solid Objectに関しては、以下の乗数Pointアトリビュートを使用することで、その局所的な挙動を変更することができます:
名前 | クラス | タイプ | 説明 |
---|---|---|---|
solidstiffness
|
Point | Float | Solid ObjectのShape StiffnessとVolume Stiffness両方の乗数。 |
solidshapestiffness
|
Point | Float | Solid ObjectのShape Stiffnessの乗数。 |
solidvolumestiffness
|
Point | Float | Solid ObjectのVolume Stiffnessの乗数。 |
solidmassdensity
|
Point | Float | Solid Objectのmass density(質量密度)の乗数。 |
コリジョン制御アトリビュート ¶
FEM Solverは、コリジョンIDを調べて、どのプリミティブのペアが衝突させることが可能なのかを判断しています。
これは、プリミティブのペアが同じコリジョンIDを持っていれば、それらが衝突可能であるというルールです。
(この仕組みは、将来のリリースで、ユーザ側でどのコリジョンIDのペアを衝突させるのかを正確に指定できるように拡張される予定です。)
特別な値の-1を設定することで、特定のプリミティブに対して衝突を抑制することができます。
各ポリゴンや四面体の内側と外側に対して別々にコリジョンIDを指定することができます。
ポリゴンの外側は、まさに法線方向と同様に、時計回り(右ねじの報告と逆の方向)の規則で決まります。
interiorcollisionid
を指定しなかった場合、デフォルトのコリジョンIDの0が三角形で使用されますが、内側コリジョンは四面体では無効です。
exteriorcollisionid
を指定しなかった場合、デフォルトのコリジョンIDの0は四面体と三角形の両方で使用されます。
FEM筋肉シミュレーションを例にすると、筋肉はスキンポリゴンの内側だけに衝突をさせたいので、それらのポリゴンのexteriorcollisionid
には-1(無効)を設定することができます。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
exteriorcollisionid
|
Primitive | Integer | ポリゴンまたは四面体サーフェスの外側のコリジョンID。 |
interiorcollisionid
|
Primitive | Integer | ポリゴンまたは四面体サーフェスの内側のコリジョンID。 |
以下のアトリビュートを使用することで、局所的に Repulsion パラメータと Friction パラメータを乗算することができます:
名前 | クラス | タイプ | 説明 |
---|---|---|---|
repulsion
|
Primitive | Float | FEMオブジェクトの Repulsion の乗数。 |
friction
|
Primitive | Float | FEMオブジェクトの Friction の乗数。 |
マテリアル空間アトリビュート ¶
materialP
アトリビュートは、マテリアル空間内のシミュレーションオブジェクトの位置と見なすことができます。
現行位置P
にはシミュレーションオブジェクトの変形状態が反映されるのに対して、materialP
は、その変形の影響を受けません。
つまり、materialP
はシミュレーション全体を通して常に同じ状態です。
Finite Element Solverでは、materialP
アトリビュートはフレームが変わっても一定のままであると想定しています。
そのため、(例えば、SOP Solverを使って)外部からmaterialP
を決して変更しないようにしてください。変更してしまうと、間違ったシミュレーション結果が生成されてしまいます。
Rest Shape を指定しなかった場合もrestP
アトリビュートがない場合でも、materialP
を永久的な静止位置として見なすことができます。
静止位置のアニメーションがシミュレーションで不要な場合には、materialP
のみを指定してください(restP
は不要です)。
シミュレーションのどのステージでも、materialP
と現行P
を比較することで、シミュレーションオブジェクトの四面体が変形しているかどうか判断することができます。
その変形量を次々にオブジェクト内でエネルギーとして定義されていきます。
繊維の収縮などソリッドの異方的挙動を決定できるようにするために、ソルバはローカルのUVWフレームを利用することができます。
これらのUVWフレームは、materialU
, materialV
, materialW
のPoint/Vertexアトリビュートを使って、直接的に指定することができます。
別の方法として、materialuvw
Point/Vertexアトリビュートで指定されたUVW位置から、それらのUVWフレームを推測することができます。
FEM Solverは、materialP
アトリビュートで指定可能なマテリアル空間内にUVW方向を埋め込みます。
この挙動を正しく把握したいのであれば、FEM Solverに接続したUVW方向をmaterialP
のマテリアルポジションを基準に可視化してください。
FEM筋肉シミュレーションに関しては、筋肉の繊維方向を指定する最も簡単な方法は、materialW
Point/Vertexアトリビュートを使用することです。
この場合では、materialU
とmaterialV
の方向を指定しなくても問題ありません。というのも、その場合には、ソルバがmaterialW
から任意のmaterialU
とmaterialV
の方向を推測するからです。
materialuvw
アトリビュートを使用することで、マテリアル空間のUVWパラメータ空間を指定することができます。
materialuvw
で表現されたU, V, Wの方向は、シミュレーションオブジェクトに対して異方性や繊維方向を制御する場合に重要です。
FEM筋肉シミュレーションの使用例では、筋肉の収縮を制御する際に、その繊維方向の制御が重要になります。
materialuvw
と同様に、materialuv
アトリビュートを使用することで、布のUV方向を指定することができます。
このアトリビュートは、三角形メッシュで必須です。特に、布の縦糸と横糸の方向を定義する時です。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
materialP
|
Point or Vertex | Vector | マテリアル空間を定義した各ポイントのマテリアルの位置。 |
materialU
|
Point or Vertex | Vector | マテリアル空間内のU方向。 |
materialV
|
Point or Vertex | Vector | マテリアル空間内のV方向。 |
materialW
|
Point or Vertex | Vector | マテリアル空間内のW方向。 |
materialuvw
|
Point or Vertex | Vector | 四面体の各ポイント/頂点におけるローカルのマテリアルUVW座標。 |
materialuv
|
Point or Vertex | Vector | ポリゴン/ポリスープの各ポイント/頂点におけるローカルのマテリアルUVW座標。 |
マテリアルプロパティの乗数アトリビュート ¶
fracturepart
|
Primitive | Integer | オブジェクトを粉砕不可な部分に区分けします。-1(粉砕不可)、粉砕可能な部分を示す非マイナスの数値のどちらかを指定してください。 |
enablefracturing
|
Point/Vertex | Integer | ポイントまたは頂点に対して局所的に粉砕を有効/無効にします。 |
fracturethreshold
|
Point/Vertex | Float | オブジェクトの Fracture Threshold の乗数。 |
粉砕コントロールアトリビュート ¶
破壊のシミュレーションを作成する時、まとまった四面体を指定することを推奨します。
そうしないと、破壊プロセスが、単一の四面体で構成された非常に膨大な数の別々の破片を作成してしまう場合があります。
そのためには、fracturepart
アトリビュートを使用すれば、そのまとまり毎に0以上の整数を割り当てることができます。
パーツを指定したくない領域では、fracturepart
を-1に設定することができます。つまり、その領域の各プリミティブは、それ自体がパーツになります。
現実世界のマテリアルは、どの箇所も均等な強度になっていない傾向があります。
リアルな結果にするには、Vertexアトリビュートのfracturethreshold
を使って、局所的に Fracture Threshold を変化させることを推奨します。
fracturepart
|
Primitive | Integer | オブジェクトを破壊不可の部分に分けます。-1(パーツなし)かパーツを意味する0以上の整数のどれかを指定します。 |
enablefracturing
|
Point/Vertex | Integer | ポイントまたは頂点に対して局所的な破壊を有効/無効にします。 |
fracturethreshold
|
Point/Vertex | Float | オブジェクトの Fracture Threshold の乗数。 |
抵抗フォースコントロールアトリビュート ¶
Drag(抵抗)フォースの挙動は、以下のアトリビュートを使って局所的に変更することができます:
normaldrag
|
Primitive | Float | オブジェクトの Normal Drag の乗数。 |
tangentdrag
|
Primitive | Float | オブジェクトの Tangent Drag の乗数。 |
参照アトリビュート ¶
baseP
アトリビュートを使用することで、オブジェクトポイントすべての全体のベース位置を指定することができます。
このアトリビュートの値は、シミュレーション時に変更してはいけません。
ユーザがbaseP
を指定しなかった時、ソルバは、作成フレーム時のポイント位置に基づいて、このPointアトリビュートを作成します。
このアトリビュートはフォールバックとして使用されます。ユーザがmaterialP
アトリビュートを指定しなかった場合には、代わりにbaseP
アトリビュートが読み込まれます。
同様に、restP
またはtargetP
のアトリビュートが用意されていなかった時にはbaseP
がフォールバックとして使用されます。
最終的には、シミュレーションされるジオメトリと埋め込みジオメトリを埋め込みワークフロー(例えば、Tポーズ)にバインドする時にbaseP
が使用されます。
この埋め込みバインドは、シミュレーションされるジオメトリと埋め込みジオメトリの両方のbaseP
ポジションアトリビュートを見ます。
ユーザが埋め込みジオメトリに対してbaseP
アトリビュートを用意しなかった場合は、ソルバは、作成フレーム時のポジションP
に基づいて、埋め込みジオメトリにbaseP
アトリビュートを作成します。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
baseP
|
Point | Vector | 各ポイントのベース位置 |
FEM Solverの Allow Changing Rest を有効にすると、restP
アトリビュートを使用して静止位置を修正することができます。
restP
アトリビュートを使用することで、すべてのオブジェクトポイントに対してアニメーションする静止位置を指定することができます。
例えば、Finite Element Solverで計算する前に、SOP Solver内でフレーム毎にrestP
を修正することができます。
これによって、特に塑性変形といった効果を表現することができます。
シミュレーション全体を通して静止位置を同じままにしたい場合は、restP
アトリビュートを使用しないでください。
この場合では、materialP
アトリビュートを指定するだけで十分です。materialP
は永久に変更されない静止位置として機能します。
materialP
アトリビュートを指定しなかった場合、Finite Element Solverは、Creation Frameで自動的に作成されたbaseP
アトリビュートに戻そうとします。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
restP
|
Point/Vertex | Vector | 各ポイントのRest Position。 |
ターゲットアトリビュート ¶
ターゲットアトリビュートを使用することで、シミュレーションオブジェクトを部分的にターゲットアニメーションに追従させることができます。
targetP
アトリビュートを使えば、各オブジェクトポイントに対してターゲットの位置を指定することができます。
シミュレーションするオブジェクトの Import Target Geometry オプションを使用すると、targetP
がすべてのフレームで自動的に設定されます。
または、Multi SolverとSOP Solverを使用することで、それらのアトリビュートをあなた自身で作成と修正をすることができます。
ターゲットの位置とVelocityは、ユーザが非常に安定した方法でアニメーションとシミュレーションを混ぜることができます( Target Strength と Target Damping のパラメータがオブジェクトに設定されている場合)。
オブジェクトの Target Strength と Target Damping のパラメータを設定すれば、オブジェクトがターゲットの位置とVelocityにそれぞれ一致する強さを表現することができます。
これは、ソフト拘束を作成する方法です。pintoanimation
を使用すれば、シミュレーションするオブジェクトが正確にtargetP
に追従するハード拘束を作成することができます。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
targetP
|
Point or Vertex | Vector | 各ポイントのターゲット位置。 |
targetstrength
|
Point | Float | オブジェクトの Target Strength の乗数。このアトリビュートが見つからない場合、1の乗数がすべてのポイントに使用されます。 |
targetdamping
|
Point | Float | オブジェクトの Target Damping の乗数。このアトリビュートが見つからない場合、1の乗数がすべてのポイントに使用されます。 |
pintoanimation
|
Point | Int |
1の時、そのポイントはターゲットアニメーション(例えば、targetP )にハード拘束されます。0の時、そのポイントは拘束されません。
|
Fiber(繊維)アトリビュート ¶
fiberscale
Pointアトリビュートは、繊維方向のRest Strain(静止状態の張り)の乗数として作用します。
materialW
Vertex/Pointアトリビュートを使用することで、この繊維方向そのものを指定することができます。
これは、特にFEM筋肉シミュレーションで役に立ちます。
fiberscale
を1から0.5に変更すると、その筋肉は繊維方向に前よりも半分の長さに戻ろうとします。
SOP Solverでfiberscale
が1から下がるようにアニメーションさせると、シミュレーションにおいて筋肉に収縮が起こります。
fiberstiffness
Pointアトリビュートは、繊維方向のStiffness(剛性)の乗数として作用します。
マテリアルの繊維方向は、materialuvw
座標のW軸で決まります。
fiberstiffness
は、他のすべてのマテリアルプロパティの乗数(異方性乗数を含む)に対する乗数として動作します。
fiberstiffness
を1から10に変更すると、繊維方向のStiffness(剛性)は、前よりも10倍強くなります。
これを使用することで、fiberscale
アトリビュートを使った筋肉の収縮効果の影響が出る強さと早さを制御することができます。
fiberscale
/fiberstiffness
が意図した効果になるようにするには、UVW方向を指定することが重要です。
FEM筋肉のマテリアル空間のUVWsは、materialuvw
Point/Vertexアトリビュートを使って指定することができます。
materialuvw
をVetexアトリビュートとして指定することで、それぞれの四面体に対してローカルのUVW空間を用意することができます。
これによって、四面体毎に別々のUVWフレームを用意することができます。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
fiberstiffness
|
Point | Float |
繊維方向のStiffnessに対する乗数。W方向はmaterialuvw で決まります。
|
fiberscale
|
Point | Float |
繊維方向のRest Strainに対する乗数。W方向はmaterialuvw で決まります。
|
状態アトリビュート ¶
以下にソルバが内部的に保持されているアトリビュートのリストを載せています。 これらのアトリビュートは、各計算の終わりに書き出され、次の計算の初めに読み込まれます。 これらのアトリビュートは、あなた自身で修正してはいけません。 それをすると、ソルバが不安定になり悪い結果を得てしまいます。 とはいえ、可視化のため、副効果の作成のためにネットワーク内でそれらのアトリビュートの値を検査することができます。
各フレームで、Finite Element(有限要素)ソルバは各シミュレーションオブジェクトに対して新しい物理的な状態を計算します。
オブジェクトの物理的な状態は、P
とv
のPointアトリビュートで表現され、それぞれ位置とVelocityを意味します。
ソルバの統合スキームは、Acceleration(加速度)に対してa
、Jerk(加加速度)に対してj
の追加アトリビュートを保持します。
PointアトリビュートのP
, v
, a
, j
は、オブジェクトの現行統合状態を記録します。
これらのアトリビュートは、シミュレーション中に修正してはいけません。なぜなら、Finite Element(有限要素)ソルバが不安定になり低品質な結果を生成してしまうからです。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
P
|
Point | Vector | 修正してはいけません!各オブジェクトポイントの現行位置。 |
v
|
Point | Vector | 修正してはいけません!各オブジェクトポイントの現行Velocity。 |
accel
|
Point | Vector | 修正してはいけません!各オブジェクトポイントの現行加速度。 |
jerk
|
Point | Vector | 修正してはいけません!各オブジェクトポイントの現行加加速度。 |
Embedded Geometryアトリビュート ¶
このアトリビュートは、Solid ObjectのEmbedded Geometryで作成されます。
parent
アトリビュートは、組み込みコード自体で維持され、修正してはいけません。
ユーザ側でEmbedded Geometry上にbaseP
Pointアトリビュートを用意することで、シミュレーションジオメトリと埋め込みジオメトリ間の紐付けを制御することができます。
baseP
を用意しなかった場合、作成フレームにおけるP
に保存されているポイント位置からコピーが行なわれます。
整列は、シミュレーションジオメトリ上のPinitial
Pointアトリビュートを基準に起こります。
シミュレーションジオメトリにrestPinitial
Point/Vertexアトリビュートがあれば、このアトリビュートが優先され、必要に応じてポイント毎ではなく頂点毎の制御が可能になります。
Embedded Geometryがシミュレーションジオメトリで目的の破壊側にあるようにしたいのであれば、Embedded GeometryのPinitial
VertexアトリビュートとシミュレーションジオメトリのrestP
Vertexアトリビュートを組み合わせて使用します。
これにより、例えば'Exploded View' SOPを使用して、Embedded Geometryをシミュレーションジオメトリ内の別々のパーツと整列させることができます。
fracturepart
アトリビュートは、Embedded Geometryが破壊された時に正しいパーツに追従できるようにします。
シミュレーションジオメトリとEmbedded Geometryの両方にfracturepart
アトリビュートがある時、Finite Element Solverは、Embedded Geometryを同じ破壊部分を持つシミュレーションジオメトリの子にします。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
parent
|
Primitive | Float | シミュレーションジオメトリの親プリミティブのインデックス。 |
baseP
|
Point | Float | シミュレーションメッシュに揃えるために使用するベース位置。 |
fracturepart
|
Point or Vertex | Float | オプションのユーザ指定の破壊パーツID。 |
P
|
Point | Float | 変形状態に相当する位置。 |
v
|
Point | Float | 変形状態に相当するVelocity。 |
N
|
Point or Vertex | Float | 変形状態に相当する法線。 |
オプションの出力アトリビュート ¶
これらは、シミュレーションオブジェクトに対してアトリビュートの生成が有効な時にソルバで任意に生成されるアトリビュートです。 これらのアトリビュートは、可視化に役立ちます。例えば、Finite Element Visualization SOPを使用する時です。 さらに、これらのアトリビュートを使用することで、副次的効果を生成することができます。例えば、破壊が起きた領域からパーティクルを飛ばすことができます。 オプションの出力アトリビュートは、Finite Element Visualization SOPでも必要になります。
以下のアトリビュートは、 Create Quality Attributes が有効な時に生成されます:
名前 | クラス | タイプ | 説明 |
---|---|---|---|
quality
|
Primitive | Float | 0(最低)から1(最高)の品質単位 |
Finite Elementシミュレーションは、入力のプリミティブの品質に影響を受けやすい傾向があります。 低品質なプリミティブは、有限要素シミュレーションの処理が遅くなったり、不安定になったり、解が求まらなくなることがあります。 低品質なプリミティブは、Tet Embedを四面体メッシュ生成のツールとして使用することで、うまく回避することができます。 品質単位は四面体毎に異なりますが、このアトリビュートでソルバから生成される品質単位は、Houdiniの有限要素の解に最もうまく一致した品質単位になります。
ソルバは、 Create Energy Attributes を有効にした各オブジェクトに対してエネルギー密度アトリビュートを生成します。 Modelタブ内のマテリアル特性の設定とそれに該当する乗数アトリビュートが、潜在エネルギー、エネルギー消失、運動エネルギーに影響を与えます。 これら3つの寄与それぞれに対して、ローカル密度がソルバ内で計算されます。 そこから派生したそれらの密度と量を使って、Finite Element Solverで計算されるオブジェクトの動きや挙動が決まります。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
potentialdensity
|
Point | Float | 変形エネルギーの局所的な密度。 |
dissipationdensity
|
Point | Float | エネルギー消失レートの局所的な密度。 |
kineticdensity
|
Point | Float | 運動エネルギーの局所的な密度。 |
potentialdensity
アトリビュートは、 Model タブ内のStiffness(剛性)パラメータから直接影響を受けます。
kineticdensity
アトリビュートは、オブジェクトに指定した質量密度に比例します。
dissipationdensity
アトリビュートは、Damping(減衰)設定に関係します。
シミュレーションオブジェクトの Create Fracture Attributes を有効にすると、fracturecount
Pointアトリビュートが作成されます。
fracturecount
Pointアトリビュートは、各ポイントで保持され、そのポイントが破壊に関わった回数です。
つまり、fracturecount
のゼロ以外の値を持つポイントが破壊に関わっています。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
fracturecount
|
Point | Integer | ポイントがシミュレーション中に破壊された回数。 |
レガシーとなったアトリビュート ¶
有限要素シミュレーションで影響を与えたい領域のほとんどは、ソフト拘束を使用することで目的を果たすことができます。 例えば、Target Constraints、Region Constraints、オブジェクトのターゲット強度/減衰の設定がそれです。 これらは、ソルバによって安定に動作する素晴らしいソルバ機能であり、正しく使用すれば高品質な結果が得られるはずです。 forceアトリビュートは、上位互換のためだけに今でも対応しています。 forceアトリビュートではソルバが必要とする情報が足りないので、安定性と品質が重要な時には当てになりません。 新しくシミュレーションをセットアップする時は、forceアトリビュートの代わりにソフト拘束のTarget Constraints、Region Constraints、アニメーションするRest Positions(静止位置)といった別の方法を考えるべきです。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
fexternal
|
Force | Vector | 外部フォース密度 |
force
|
Force | Vector | 外部フォース密度の別名 |