すあまの備忘録

誰得内容の自分のための非営利目的備忘録ブログ(筆者がわかっても内緒にしてください)

POPあれこれ自分メモ

自分のためのPOPメモ

設定

SOPでエミッターを詰める

必要なアトリビュートもSOPで作り、Pointのみの状態にして可能な限りCacheを取る。

Cacheを撮った場合はRetimeの処理も入れる。入れれないときもあるけど。

godofsuama.hatenablog.com

Velocity

Lifeを長くとり、初期Velocityを決めていい感じになるまで試す。POP ForceでGravityだけは足す。

その後Velocityにランダムを加えたのち、POP Dragを入れる。

最後にLifeを実際ほしい長さに調整してからPOP Forceのノイズ等を加える。

このあとUse VEXpression等を使い始める。

各工程にすぐ戻れるようにしておく。POP Force(Gravity)とPOP Force(Noise)を分けたりとか。

Jitter

すごい人の記事があるので…

火星防衛戦線:マンガ Houdini チュートリアル ーーエミッター補間ーー

Force

POP Force

GravityはPOP ForceのForceのYを-9.8とかで代用できる。 f:id:godofsuama:20210627181336p:plain

それ以外にも動きにノイズかけるときにも使う。

頻繁に使う理由はこのUse VEXpressionのチェック。

f:id:godofsuama:20210627181607p:plain

表に出ているパラメーターをすべてコントロールできる。

コントロールしたいパラメーターのアトリビュート名?的なのはパラメーター名の上にカーソル持っていくと出てくる。

Paramter:ampとかってやつ。

ageに依存してRamp使ってAmplitudeを変えたり、SOP上で作ったアトリビュートで何かしら処理を変えたり…と行ったことが手軽にできる。

このUse VEXpressionは他のPOP 〜〜系にもある。

POP Advect by Volume

PyroでシムしたVolumeのVelを読み込んできてPOPを動かす。という使い方が主。

ただ別にPyroじゃなくてもVolumeなら問題ない。

例えば、画像のようなカーブを作成し

f:id:godofsuama:20210627193107p:plain

Volume Velocity from Curveでvel Volumeにする。

f:id:godofsuama:20210627193127p:plain

f:id:godofsuama:20210627193158p:plain

なんかこういうのとか。

f:id:godofsuama:20210627200013g:plain

POP Curve Force

こちらの方のを参考に改変。

www.youtube.com

自分メモ)ちょっと改変して以下のように

Curveまでの距離でSuctionをMultiplyする処理とかいれた。

f:id:godofsuama:20210628152807p:plain

int hitprim;
vector hituv;

//culc
float dist = xyzdist(1, @P, hitprim, hituv);
float distRange = fit(dist, chf("srcDistx"), chf("srcDisty"), 0, 1);
float distRamp = chramp("Dist_Ramp", distRange);
distRamp = fit(distRamp, 0, 1, chf("distMultx"), chf("distMulty"));

vector dir = primuv(1, "N", hitprim, hituv);
vector pos = primuv(1, "P", hitprim, hituv);

vector suction = (@P - pos) * (chf("Suction_Mult") * distRamp);
dir *= chf("Dir_Speed");

//add force
v@force += (suction + dir) *-1;

//delete by cureveu
if(hituv.x >= 1) { 
    f@age = @life;
};

Property

f:id:godofsuama:20210627235512p:plain

POPのDragとかFrictionとか諸々のアトリビュートを設定できる。なんといってもUse VEXpressionが使える!つまり条件をつけていろいろ設定できるということ。

SOPで初期値を設定してDOP内で変更したい場合等。

POP Objectにはないものも設定できるので覚えておくとたまに便利。

Collision

基本的にSDF Volumeにする。

キャッシュを取らないと重いので、下記画像のようにPolygonとSDF別々にGroupを作ってからMergeしてキャッシュを取る。

f:id:godofsuama:20210627225114p:plain

DOP内では下記画像のようにつなぐ。Static SolverはなくてもOK。

f:id:godofsuama:20210627225157p:plain

設定は以下の感じ。

Use Deforming Geometryは動いていなければオフでOK

Laser ScanもSOPでSDFを作っていたら効果はなかったはず。

f:id:godofsuama:20210627225359p:plain

POP ObjectのPhysicsにあるBounce Forwardをほんの少し下げると摩擦?で停止するようになる。

f:id:godofsuama:20210627231337p:plain

f:id:godofsuama:20210627230714g:plain
Bounce Forward:1

f:id:godofsuama:20210627230737g:plain
Bounce Forward:0.99

回転

DOP

大抵の場合POPの回転は後処理でやるほうが良いとは思うが、どうしても中でやりたいときメモ

f:id:godofsuama:20210627160623p:plain

POP Wrangleで以下を記述

//rot speed
float speed = length(v@v);
f@rotAngle += speed;
float angle = @rotAngle * chf("mult");

//set random Dir
vector normV = normalize(@v);
vector rndDir = set(rand(@id), rand(@id+5), rand(@id*2));
vector normDir = normalize(rndDir);
vector axis = cross(normDir, normV);

//set orient
vector4 quat = quaternion(angle,axis);
p@orient = quat;

記述するとMultパラメーターができるのでそれでMultiplyする。

SOP

上記仕組みは簡単な手直しでSOP上でも使える。

f:id:godofsuama:20210627162131p:plain

Point Wrangle等で以下を記述

//rot speed
f@rotAngle += @Time;
float angle = @rotAngle * chf("mult");

//set random Dir
vector axis = normalize(@N);

//set orient
vector4 quat = quaternion(angle,axis);
p@orient = quat;

ようするに1つのVector Attributeと毎フレーム増加する値があればいい。

上の例ではNで回転方向を決め、@Timeを使って時間が進むほど回転するようにしている。

(この際Point Velocityでvを作ると初期設定で毎フレームアニメーションするvができるので、毎フレーム回転方向がめちゃくちゃになる。AnimatedをオフにすればOK)

POP Torque

POP Torqueもほぼ同じで、axisをSOPのアトリビュートとかrandomで作ればいい感じに乱れる。

POP TorqueでUse VEXpressionを使用しないと1方向に等速回転になるが、POP Wrangleでやっていることが分かっていれば何を変えればいいかなんとなくわかるようになる。

f:id:godofsuama:20210627163229p:plain

おまけ

Gas Intermittent Solve

f:id:godofsuama:20210627182537p:plain

POPよりかはRBDとかでよく使う。

f:id:godofsuama:20210627182610p:plain

Only Once Per Timestepにチェックを入れると、Substepを増やしてもこのノードの上流は1度しか計算しない。

何かしらのintアトリビュートの加算計算等をしてSubstepを増やすと、増やした分だけたされてしまったりするのでそれを回避するのに使っている。

出番は多くはないけどあると便利なときもある系