On this page | |
Since | 13.0 |
FEM Solver DOPは、Finite Element Solver(有限要素ソルバ)を使用するオブジェクトを設定します。
オブジェクトがSolver
サブデータとしてこのDOPを持っていれば、そのオブジェクト自体がClothオブジェクトとして進化します。
このソルバは、以下の特別なサブデータが存在すれば、それを認識します:
-
ShellMassProperties
という名前のShell Mass Propertiesデータ。 -
SolidMassProperties
という名前のSolid Mass Propertiesデータ。 -
ShellStretchBehavior
,ShellShearBehavior
,ShellWeakBendBehavior
,ShellStrongBendBehavior
,SolidStretchBehavior
,SolidShearBehavior
,SolidVolumeBehavior
という名前のSoft Body Material Behaviorデータ。 -
SolidAnisoProperties
という名前のSolid Aniso Propertiesデータ。 -
SeamProperties
という名前のSeam Propertiesデータ。 -
RestProperties
という名前のSoft Body Rest Propertiesデータ。 -
TargetProperties
という名前のSoft Body Target Propertiesデータ。 -
CollisionProperties
という名前のSoft Body Collision Propertiesデータ。 -
DragProperties
という名前のSoft Body Drag Propertiesデータ。
また、このソルバは、ほとんどの標準サブデータも認識します:
-
Geometry
という名前のGeometryデータ -
Constraintデータ
-
Forceデータ
Finite Element Solverは、各計算を行なう前に、シミュレーションジオメトリGeometry
上のアトリビュートから、各オブジェクトのシミュレーションの状態を読み込んで、そのシミュレーションの前の状態を取得します。
その計算を行なった後で、新しいシミュレーションの状態をGeometry
上のアトリビュートに書き出します。
さらに、Finite Element Solverは、EmbeddedGeometry
を保持します。これは、通常ではGeometry
と共に移動や破壊をする、より高解像度のジオメトリになります。
EmbeddedGeometry
は、ポリゴンまたは四面体(またはそれらの組み合わせ)で構成することができます。
Finite Element Solverは、連続体力学をエレメントの有限数に分割することで近似します。 ソリッドオブジェクトの場合、それらのエレメントを四面体で定義します。 Cloth Objectの場合、それらのエレメントを三角形と四角形で定義します。 四面体の解像度と個々の四面体の向きは、全体の動きに対してほとんど影響力を持ちません。 全体のソリッド形状が変わらない限り、その挙動は、ほぼ同じです(非常に粗いメッシュを除く)。 有限要素法(FEM)は、それらのエレメントを連続体の近似として扱います。 この特性は、低解像度なメッシュや高解像度なメッシュを使用して同じ形状をシミュレーションした時に、結果を予測しやすくなります。
パラメータ ¶
Substepping ¶
Substeps
これは、フレーム毎のサブステップ数です。この値が高いほど、シミュレーションの品質と精度が良くなります。しかし、フレーム毎の計算時間も増えます。 シミュレーションの品質や安定性に問題がある時、まず最初に試してみるのが、この Substeps を上げることです。 それが必要となる特定のケースの1つが、高速移動するオブジェクトを衝突させる時です。 相対Velocityがフィーチャサイズよりも大きい時、手動で Substeps を上げて、よい結果を得るようにする必要があります。
Capabilities ¶
Enable Collisions
これが無効な時、ソルバや計算するオブジェクトのコリジョン設定に関わらず、シミュレーションで衝突が起こりません。これは、衝突なしのオブジェクトの挙動をすぐに確認するための便宜的なトグルです。
Enable Fracturing
これが無効な時、このソルバに取り付けられたSolid ObjectやCloth Objectに破壊や引裂が起こらなくなります。
Accuracy ¶
Absolute Tolerance Implicit Solve
Finite Element Solverが陰積分の過程に十分な近似解が見つかったかどうかを判断する時に使用する絶対許容値。 これは、各積分の過程で計算される加速度に許容される誤差の大きさをほぼ意味しています。 この許容値をデフォルト値から非常に大きい値に上げることは推奨しません。
Relative Tolerance Implicit Solve
Finite Element Solverが陰積分の過程に十分な近似解が見つかったかどうかを判断する時に使用する相対許容値。 絶対許容値とは違って、このパラメータには単位がありません。この許容値をデフォルトから上げることは推奨しません。なぜなら、これは不安定または低品質な結果を生成することがあるからです。 いくつかのタイプのシミュレーションでは、 Relative Tolerance Implicit Solve を低い値、例えば0.0001またはそれより小さい値に下げる必要がある場合があります。 例えば、非常に硬いオブジェクトを使って破壊シミュレーションをする場合は、この許容値を下げる必要があります。
Max Collision Passes
これは、1回のサブステップ内の最大回数で、ソルバが新しい衝突の検出と計算をするのを可能にします。 パス毎の衝突計算ステップには、後のパスで計算しなければならない二次衝突が新しく発生することがあります。
Attributes ¶
Create Quality Attributes
これは、シミュレーションジオメトリにfloat値のPrimitiveアトリビュートquality
を作成します。このアトリビュートは、シミュレーションに悪い影響を与えているプリミティブを見つけることができます。
値が1に近いほど良いです。悪い四面体ほど値が0に近いので、それを削除または改良してください。
Create Energy Attributes
これは、シミュレーションジオメトリ上にfloat値のVertexアトリビュートを作成します。
それらのアトリビュートpotentialdensity
, dissipationdensity
, kineticdensity
は、それぞれ、潜在エネルギー密度、エネルギー消失の密度、運動エネルギーを意味します。
Create Fracture Attributes
これは、fracturecount
Pointアトリビュートを作成することができます。シミュレーション時に破壊されたポイントのfracturecount
は1以上になります。
Advanced ¶
Float Precision
これは、Finite Element Solverで内部的に使用される浮動小数点精度を決めます。 Float 32 bit はメモリ使用量が少なく、一般的には Float 64 bit よりも高速です。 とはいえ、全体的に非常に硬い剛性のオブジェクトをシミュレーションする時や、ジオメトリを原点から非常に遠く離れたところに配置する時には、64bitの浮動小数点の精度が必要になることがあります。
Integrator Type
これは、使用する積分のタイプを決定します。デフォルトはImplicit
で、硬いオブジェクトを破壊するシミュレーションに対して最も安定するオプションです。
Implicit Order 2
は、ほぼ同じ計算時間で、より活発に見える高品質なシミュレーションが可能です。キャラクタの贅肉のような有限要素シミュレーションを行なう時に最も良い選択です。
Max Fully Implicit Passes
非線形な有限要素シミュレーションをしたい場合には、このパラメータを上げると、サブステップを上げずに品質が良くなることがあります。これは、四面体の変形が相対的に大きいシミュレーションで必要になることがあります。
Attributes ¶
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 | 外部フォース密度の別名 |
入力 ¶
First Input
このオプションの入力を使えば、このノードで修正するシミュレーションオブジェクトを制御することができます。 この入力に接続されていて Group パラメータフィールドに一致するオブジェクトが修正されます。
この入力を接続しなかった場合、このノードを Apply Data ノードと併用して使用するか、または他のデータノードの入力として使用することができます。
All Other Inputs
このノードに複数の入力コネクタがあれば、他のデータノードを取り付けて、このノードで作成されるデータのモディファイアとして動作させることができます。
意味のあるサブデータの特定のタイプは、ノードからノードへ変化します。 意味があるように取り付け可能な利用可能なデータノードのリストを確認するには、入力コネクタをクリックします。
出力 ¶
First Output
この出力のオペレーションは、このノードに接続している入力に依存します。 オブジェクトストリームがこのノードの入力であれば、その出力も入力と同じオブジェクトを含んだオブジェクトストリーム(しかし、取り付けられたこのノードのデータを持ちます)です。
オブジェクトストリームをこのノードに接続しなかった場合、その出力はデータ出力になります。 このデータ出力をApply Data DOPに接続したり、他のデータノードのデータ入力に直接接続することで、 このノードのデータをオブジェクトや他のデータに取り付けることができます。
ローカル変数 ¶
ST
ノードが評価されるシミュレーション時間です。
この値は、変数Tで表現される現在のHoudiniの時間と同じではなく、DOP Networkの Offset Time と Scale Time のパラメータの設定に依存しています。
STは、シミュレーションの開始時間がゼロになるようになっています。
つまり、シミュレーションの最初のタイムステップをテストする時は、$T == 0
や$FF == 1
を使うのではなくて、$ST == 0
のようなテストを使うのがベストです。
SF
ノードが評価されるシミュレーションフレーム(正確には、シミュレーションタイムステップ番号)。
この値は、変数Fで表現される現在のHoudiniのフレーム番号と同じではなく、DOP Networkパラメータの設定に依存しています。 代わりに、この値は、シミュレーション時間(ST)をシミュレーションタイムステップサイズ(TIMESTEP)で割算した値と同じです。
TIMESTEP
シミュレーションタイムステップのサイズ。 この値は、1秒あたりのユニットで表現した値をスケールするのに役に立ちますが、タイムステップ毎に適用されます。
SFPS
TIMESTEPの逆数。 シミュレーション時間の1秒あたりのタイムステップ数です。
SNOBJ
シミュレーション内のオブジェクトの数。 Empty Object DOPなどのオブジェクトを作成するノードでは、SNOBJは、オブジェクトが評価される度に値が増えます。
固有のオブジェクト名を確保する良い方法は、object_$SNOBJ
のようなエクスプレッションを使うことです。
NOBJ
このタイムステップ間で現行ノードで評価されるオブジェクトの数。 この値は、多くのノードがシミュレーション内のオブジェクトすべてを処理しないので、SNOBJとは異なります。
NOBJは、ノードが各オブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJ
ノードで処理される特定のオブジェクトのインデックス。 この値は、指定したタイムステップで常にゼロからNOBJ-1まで実行されます。 この値は、OBJIDやOBJNAMEなどのシミュレーション内の現行オブジェクトを識別せず、現在の処理順でのオブジェクトの順番を識別します。
この値は、オブジェクト毎に乱数を生成するのに役に立ちます。他には、処理別にオブジェクトを2,3のグループに分けるのに役に立ちます。 この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら-1を返します。
OBJID
処理されているオブジェクトの固有ID。 すべてのオブジェクトは、すべての時間のシミュレーション内のオブジェクトすべてで固有な整数値が割り当てられています。たとえオブジェクトが削除されても、そのIDは決して再利用されません。 オブジェクトIDは、オブジェクト毎に別々の処理をさせたい場面(例えば、オブジェクト毎に固有の乱数を生成したい)で非常に役に立ちます。
この値は、dopfieldエクスプレッション関数を使って、オブジェクトの情報を検索するのにベストな方法です。
OBJIDは、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら-1を返します。
ALLOBJIDS
この文字列には、現行ノードで処理されているオブジェクトすべての固有のオブジェクトIDをスペース区切りにしたリストが含まれています。
ALLOBJNAMES
この文字列には、現行ノードで処理されているオブジェクトすべての名前をスペース区切りにしたリストが含まれています。
OBJCT
現行オブジェクトが作成された時のシミュレーション時間(変数STを参照)。
そのため、オブジェクトが現在のタイムステップで作成されたかどうかチェックするには、$ST == $OBJCT
のエクスプレッションが常に使われます。
この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJCF
現行オブジェクトが作成された時のシミュレーションフレーム(変数SFを参照)。
この値は、OBJCT変数にdopsttoframeエクスプレッションを使ったものと等価です。この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJNAME
処理されているオブジェクトの名前を含んだ文字列値。
オブジェクト名は、シミュレーション内で固有であることが保証されていません。 しかし、オブジェクト名が固有になるように注意して名前を付けていれば、オブジェクトの識別は、オブジェクトIDよりも、オブジェクト名を指定するほうが簡単です。
オブジェクト名は、同じ名前を持つオブジェクトの数を仮想グループとして扱うこともできます。
“myobject”という名前のオブジェクトが20個あれば、DOPのActivationフィールドにstrcmp($OBJNAME, "myobject") == 0
を指定すると、DOPがその20個のオブジェクトのみを操作します。
この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら空っぽの文字列を返します。
DOPNET
現在のDOP Networkのフルパスを含んだ文字列値。 この値は、ノードを含むDOP Networkのパスを知りたりDOPサブネットのデジタルアセットで非常に役に立ちます。
Note
ほとんどのダイナミクスノードには、そのノードのパラメータと同じ名前のローカル変数があります。 例えば、Position DOPでは、以下のエクスプレッションを記述することができます:
$tx + 0.1
これはオブジェクトをタイムステップ毎にX軸方向に0.1単位分移動させます。
See also |