パーティクルシステムは、何よりもまずアトリビュートから駆動されます。ここでは、ソルバで理解されるアトリビュートの一部をご紹介します。

アトリビュートの名前の@の頭にある文字は、そのアトリビュートのタイプを意味し、それがないものは、floatを意味します。

アトリビュートの作成で推奨する方法は、POP VOPPOP Wrangleの2つです。

POP VOPでは、Bind Export VOPによって必要なアトリビュートを書き出します。

POP Wrangleでは、プロトタイプを使ってアトリビュートとデフォルトを指定します。

int @id = -1;
point @orient = {0, 0, 0, 1};

Note

イコール(=)の後のエクスプレッションは、単純な定数のエクスプレッションでなければなりません。

アトリビュート

Houdiniは、Cd(diffuse color)Pointアトリビュートを使用して、パーティクルにカラーを付けます。

状態

age

float

パーティクルが発生してから今までの秒数。相対時間を取得して、衰退効果に役立てたいのであれば、@nageを使ってください。

nage

float

@age/@life。暗黙のアトリビュートで、このアトリビュートは書き込み不可です。

life

float

パーティクルが生存できる秒数。@age>@lifeの時は、パーティクルが死んだとみなされます。

id

int

単一シミュレーションにおいて同じままのパーティクルの固有ID。パーティクルが削除されても状況が変わらないようにするためには、常に@ptnumではなく@idを使ってください。IDに一致するポイント番号を調べるには、findattribval()を使ってください。

Default -1.

線形物理学

Particle Solverは、パーティクルの向きとして、通常のv(Velocity)アトリビュートを使用します。 パーティクルの速度を取得するには、length(@v)を使用します。

force

このフレームのパーティクルのフォース。

mass

float

パーティクルの慣性。

Default 1.0

spinshape

vec3

これは、@pscaleで乗算することで、回転の慣性用にパーティクルのラフな形状を決めます。

Default (1, 1, 1)

drag

float

これは、風のエフェクトでパーティクルが引き寄せられる力です。

Default 1.0

dragexp

float

1から2の範囲の値です。1の値は、パーティクルが風のVelocityにスピードの差に比例した強さで引き寄せられることを意味します。 2の値は、スピードの2乗の強さで引き寄せられます。2の値の方は、パーティクルが速く移動するほど、もっと速く加速され、既に風の速度に近い状態のパーティクルほど影響が少ないです。

デフォルトは、ソルバのパラメータで設定します。

これは、角速度と線形速度のどちらのdragにも使われます。

dragshape

vec3

パーティクルがそのローカル軸それぞれに引っ張られる力。 パーティクルが各軸を下って見えるように、パーティクルの横断面に比例するようにしてください。

Default (1, 1, 1)

dragcenter

vec3

指定すると、dragフォースがdragの中心と質量の中心の間の差に基づいてパーティクルに回転モーメントを生成します。 質量の中心は、常にパーティクルの位置になっています。これは、パーティクルのローカルオフセットを用意してます。

Default (0, 0, 0)

dragnormal

float

dragshapeが存在しなかった場合、且つ、dragnormalが1でない場合、 このパーティクルに繋がったポリゴンまたはポリラインによって自動的にローカル形状が自動的に計算されます。 このdragnormalは、サーフェスのほぼ法線方向のフォースに対して使用されます。 それに対してdragtangentは、サーフェスの接線方向のフォースに対して使用されます。 ポリラインに関しては、その接線は、カーブの方向であり、法線はそれ以外の方向を意味します。

Default 1

dragtangent

float

ローカルのドラッグ形状を自動的に計算する時に、dragnormalと一緒に使用されます。

Default 1

targetv

vec3

ローカルの風のVelocity。パーティクルのゴール、ターゲット、Velocityとみなされます。

airresist

float

風の速度に対する抵抗度。これは、風のフォースの特性を測定するという点でdragとは異なります。パーティクルの特性はパーティクルが移動しても同じままになるのではなく、おそらく空間で変化します。

speedmin, speedmax

float

パーティクルが移動可能な1秒あたりのユニットの速度制限。 パーティクルは、衝突エフェクトによって一時的にこの速度を越える場合があります。これはフォース計算の後のタイムステップ毎にハードクランプとして機能します。

角度物理学

p@orient

vec4

パーティクルの向き。これは、パーティクルのスタンプ、“ローカル”のフォースの計算で使われます。 orientアトリビュートを持つパーティクルは、今では移動方向に対して垂直とみなされません。これはクォータニオンです。

Default (0, 0, 0, 1)

w

vec3

パーティクルの角速度。これは、スピンレートの強さを持つ回転軸のベクトルと考えることができます。スピンレートの単位は、1秒あたりのラジアンです。

torque

vec3

スピンに対するフォースと同等です。 現在のところ、慣性テンソル(massと同等)がサポートされていません。

targetw

vec3

このパーティクルのゴールスピンの方向と速度。

spinresist

float

targetwに対する抵抗度。

spinmin, spinmax

float

パーティクルがスピン可能な1秒あたりのラジアンの速度を制限します。

状態

dead

int

パーティクルが生きている(0)または死んでいる(1)かどうか。 Reaping(刈り取り)ステージで死んだパーティクルが削除されます。 これは、ソルバの最終ステージとしてpost-solveノードの後に実行されるので、通常ではReapingをオフにしない限りは、死んだパーティクルが見えません。 @dead>0は死んだパーティクルすべてをグループ化することができます。 @dead==0 は生きているパーティクルをグループ化します。

stopped

int

パーティクルが動いている(0)または停止している(1)かどうか。 停止したパーティクル。そのパーティクルのVelocityは保持されていますが、その位置、Velocity、向き、角速度を加算減算していきません。ただし、それらのアトリビュートを直接変更することができます。例えば、向きを変更するLook At POPを実行することができます。

stuck

int

パーティクルが自由(0)または引っ付いている(1)かどうか。 引っ付いたパーティクルはフレーム毎にポジションパスに瞬間移動します。これは、引っ付いているサーフェスのVelocityを引き継ぎます。

sliding

int

パーティクルが自由(0)またはサーフェスに沿って滑っている(1)かどうか。 滑っているパーティクルは、動くことができますが、そのポジションパスのオブジェクト上に乗ろうとします。オブジェクト間を移動することができませんが、この処理中にプリミティブ/UVの座標を変更することができます。

cling

float

滑るパーティクルは、内側方向(サーフェス法線に応じて)のフォースをそのパーティクルがくっついているオブジェクトに適用します。 これは、そのパーティクルを屈曲上に維持させたいときに役に立ちます。

pospath

string

この文字列は、パーティクルが見るオブジェクトのパスを記録しています。ディクスのファイルのパスまたは絶対op:パスです。(op:パスはDOPのオブジェクトの参照をサポートすることができます。)

posprim

int

参照したい位置のパスジオメトリのプリミティブ。

Default -1

posuv

vec3

プリミティブの位置。これはテクスチャUVでは なくて パラメトリックUVです。 primuvVEXコマンドを使えば、これを使っているアトリビュートを調べることができます。 これは、3つの座標を記録しているプリミティブ(Polysoup、四面体、ボリュームなど)のベクトルです。

衝突

hittotal

int

パーティクルのすべてのヒットの累積総数です。この数は、古いPOPの$NUMHITに相当します。

サブステップ内でパーティクルが複数回衝突した場合は、i@numhitが1より大きくなります。 しかし、i@hittotalはサブステップ内では1回だけカウントされるので、トリガーの構築が簡単です。

POP Collision Behaviorノードを追加すると、 Compute Hit Total がオンの場合に衝突回数が2倍にカウントされることがあります。

has_pprevious

int

@ppreviousに有効な値が含まれていれば、このアトリビュートは1です。

pprevious

vec3

前のフレームのパーティクルの位置を記録します。これは、パーティクルの動き方に関係なく必ず衝突を登録できるようにするために衝突検出で使われます。

hitnum

int

パーティクルが最後のPOP Collision Detectで衝突した回数。@hitnum>0は一度当たったパーティクルすべてをグループ化することができます。初めてのヒットのみがアトリビュートに記録されます。これは、古いPOPの$JUSTHITに相当します。

hitpath

string

ヒットしたオブジェクトのパス。ディスクのファイルへのパスまたはop:パス。

hitprim

int

プリミティブヒット。これは、衝突検出で衝突したプリミティブを検出できなかった場合は-1になります。POP Solver@xyzdistを使って、このアトリビュートから回復しようとします。

Default -1

hituv

vec3

プリミティブの位置。これはテクスチャUVでは なくて 、パラメトリックUVです。

hitpos

vec3

ヒットが実際に発生した位置。通常は、P上のprimuvでこのアトリビュートが発生しますが、衝突オブジェクトが移動していれば、発生しません。

hitnml

vec3

衝突した時間でのサーフェスの法線。

hitv

vec3

衝突した時間でのサーフェスのVelocity。

hittime

float

衝突が発生した時のフレーム。

hitimpulse

float

Gas Impact to Attributesノードで作成されます。 これは、衝突計算に必要だった衝撃の大きさを記録します。 POP SolverのAdd Impact Dataも有効でなければなりません。

この値はタイムステップによって変化します。

bounce

float

パーティクルが他のオブジェクトを跳ねる時、これは、パーティクルが法線方向を保持するエネルギー量を制御します。値が1なら、すべてのエネルギーを保持し、0なら停止するようになります。この値は、他のオブジェクトのbounce値と乗算されます。

デフォルトは、POP Objectのパラメータで制御されます。

bounceforward

float

パーティクルが他のオブジェクトを跳ねる時、これは、パーティクルが接線方向を保持するエネルギー量を制御します。値が1なら、パーティクルが接線方向の移動を保持します。つまり、完全な跳ね返り。0なら、パーティクルが衝突オブジェクトの接線方向基準に停止します。-1なら、パーティクルが逆方向に跳ね返ります。2なら、パーティクルが衝突する度にエネルギーを増やします。この値は、他のオブジェクトのbounce forward値と乗算されます。

デフォルトは、POP Objectのパラメータで制御されます。

friction

float

パーティクルが他のオブジェクトを跳ねる時、パーティクルがオブジェクトにぶつかった時の強さに比例して接線方向に遅くなります。値が0なら、運動量伝達なしで跳ね返ります。値を高くすると、衝突オブジェクトの速度に張り付くパーティクルの量が増えます。この値は、他のオブジェクトのFriction(摩擦)で乗算されます。

デフォルトは、POP Objectのパラメータで制御されます。

collisionignore

string

このパターンに一致するオブジェクトは、POP Solver衝突ステージ間では衝突しません。これは、POP Collision Detectに影響を与えず、計算中の暗黙的な衝突にだけ影響を与えます。オブジェクト名とオブジェクトIDの両方が、エクスプレッションで一致させることができます。そのため、0 torus*は、1番目のDOPオブジェクトとtorusで始まる名前のDOPオブジェクトすべてとの衝突を避けます。

Default ""

その他

s@instancepath

string

各パーティクルにコピーするジオメトリ。ディスクのファイルへのパスまたはop:パス。ファイルパスの場合、Mantra Point Instancingを使って、それをレンダリングすることができます。op:パスの場合、Instance SOPを使って、op:パスすべてを最初に実体化することができます。ファイルパスは参照のままです。

nearest

int

一番近いパーティクルの@idです。idアトリビュートが見つからなければ@ptnumになります。このアトリビュートはProximity POPで作成されます。検索範囲内に何も見つからなければ、値は-1になります。

Default -1

nearestdist

float

一番近いパーティクルまでの距離。範囲内にパーティクルがなければ-1になります。このアトリビュートはProximity POPで作成されます。

Default -1

numproximity

int

指定した範囲内のパーティクルの数。このアトリビュートはProximity POPで作成されます。

Default 0

See also

パーティクル

はじめよう

挙動

次のステップ

リファレンス