花吹雪

たまにはチュートリアル的なものでも。
よくある紙吹雪や雨、雪のたぐいをパーティクルやダイナミクスを使わずに作ります。
なんでパーティクルを使わないかというとループ(繰り返し)がめんどくさいのと、
制御がしやすいし、正逆再生が簡単だし、なんかHoudiniっぽくね?!ってことで。
実際、よく使う手法ではあります。

まず、作業前に設定しておくもの。
ループ尺 $Loop_Time の設定用(今回は150フレームで1ループ)の変数。
AnimeationのStartを0からにする(なぜかは後ほど・実際のアニメーションは1〜150になる)

1valiable_2

1time

まず、GridSOPで発生面を作る。
サイズは、なるべく視界全体に収まるように。
Y位置はそのまま上下幅の基準になるのでこれもフレーム外になる高さに。
ここで、Y位置も変数にしとけばよかったと気付いたけど、とりあえずそのままいきます。

2viewport_2 2network_3

2palamater

ランダムに降らしたいのでScatterSOPでPointを散らす。
ランダム配置でなく規則正しい配置にする時はGridSOPのPointをそのまま使います。

3viewport

3network

3palamater

AttributeSOPでアトリビュート id($ID) を作る。
ちなみに id=$PT(Point番号) で、なぜ作るかは後ほど。

4network

4palamater1_2

4palamater2_2

もうひとつAttributeSOPでアトリビュート ydist($YDIST)を作る。
これがそれぞれのPoint固有の移動幅になります。

5network

5palamater

 

PointSOPで上下に散らす。
randで±$YDISTの幅に散らします。

6viewport

6network

6palamater

ここから実際のアニメーション。PointSOPで下に移動させる。
PositionのY座標に
 $TY-$FF/$Loop_Time*$YDIST*2
で、$Loop_Timeフレームで $YDIST*2 下に移動。

7viewport

7network

7palamater

そのままだとループにならないのでTimeShiftSOPで $FF-$Loop_Time フレームずらしてMergeSOPで結合。
これで、$Loop_TimeフレームでループするPointアニメーションができます。
ここで2つのSOPをマージするので、この後のランダムSeedとして先に設定した$IDが生きてきます。

実は1個上のアニメーションで
 wrap($TY-$FF/$Loop_Time*$YDIST*2,-$YDIST,$YDIST)
としてもループになります。ただしモーションブラーで不具合が出るので今回はTimeshiftを使ってます。
(下から上に戻る軌跡が見えてしまう)
モーションブラーをかけないのであればwrapを使った方が楽ですね。

8network

8palamater_2

 

ここまでで上から下にまっすぐ降りてくるループアニメーションができました。
続いて、紙吹雪らしくふらつかせましょう。

まずちょっと風で流されている感じにするために、PointSOPで右から左、手前から奥の動きをつける。
この時の移動量は$TYを基準にrandで幅をつけてます。この時のSeedは$IDを使いましょう。

9viewport

9network

9palamater

さらにPointSOPで左右にふわふわと動かす。
XYZPositionをそれぞれnoise関数を使ってふらつかせる。
noiseの引数に$TX,$TY,$TZを使っているのでPointの移動に伴い、勝手にあっちこっちに動いてくれます。
ついでに Add Color でカラーの設定をする。
rgb関数を使って、彩度明度1のランダムカラーを設定してます。

10viewport

10network

10palamater

これで、基本的な紙吹雪の動きが出来ました。
動きがおかしければ、noiseのパラメータをいじったり
さらにsin関数で動かすと複雑な動きになります。その時も$Loop_Timeを使ってループするのを忘れずに。

さて、ここから紙吹雪を作っていきます。
TrailSOPで速度 V を計算しておく。
ここでの V はこの後のCopySOPで V 方向に向かせるために使うためのものです。
この時、AnimeationのStartを0からにしておかないとFrame1の時にVが0になってしまいます。

11viewport

11network

11palamater

GridSOPで紙吹雪の元を作る。

12viewport

12network

12palamater

CopySOPで Grid をアニメーションした Point にコピーする。
紙吹雪の回転等のアニメーションもつけます。
Pivotも動かすと紙吹雪っぽく回転します。
注意点はループのために回転の基準に$TYを使うこと。
randのseedに$IDを使うこと。

13viewport

13network

13palamater

PointのAttributeもコピーすることで色をコピーします。
id等もコピーされているのでこの後でランダムシードとして使って色を変えたりもできます。

14palamater

最後に、モーションブラー用にTrailSOPで速度 Vで再定義。
で完成です。

15network

15palamater

 

今回は、かなり丁寧に作ってますので最初に変数を作ったり、まめにPointSOPを分けてますが、
実際はいきあたりばったりで1つのPointSOPでまとめてたりして、後で訳わからんようになったりするんですけどね。

Last

応用で、Gridにマッピングして花吹雪にしたり、

16viewport

16viewport2

stampを使ってみたり。

17viewpor

17network

17palamater

で、最終的に言いたいことはPointSOP最強!!!ってことなのでした。


ちなみに今回はあくまでPointSOPとExpressionにこだわってます。
実際はVopを使った方が速くなります。後々のことを考えると、
汎用性のあるものは、めんどくさがらずにVop(Vex)で作りましょう。

CG,Houdini

Posted by naniwa_cg