今日ペットショップに寄って
エルの新しいおもちゃを買ってきた。
エルにはおもちゃの好みがあるらしく、
買ってきてもほとんど遊ばないケースもある。
今日のは遊んでくれた。
ただ、飽きるのも結構早い。
http://www.serenelight3d.com/blog55/?p=2806
でノイズについて書いたが、カールノイズが抜けていたので今回検証してみた。
カール(curl)とは場(フィールド)を対象とするベクトル解析における「回転」演算を意味する。
Houdiniにおけるカールノイズは、ベクトル場に発散や消失を発生させないような
複数の渦巻き状の流れを作るベクトル場を構成する。
Houdiniでは次の4種類のVEX関数が用意されている。
引数は3次元ベクトルと4次元ベクトルの2つのバージョンがあるが
4次元ベクトルは位置(@P)+時間(@Time)として使用することが多い。
■PerlinノイズベースのCurl
vector curlnoise(vector xyz)
vector curlnoise(vector4 xyzt)
■SimplexノイズベースのCurl
vector curlxnoise(vector xyz)
vector curlxnoise(vector4 xyzt)
このカールノイズを速度ベクトルとして使用した場合には
そのベクトル場に沿いながらポイントが移動することになるが、その際
ポイントが一箇所に溜まったりバラバラに離散したりすることを避けながら
適度に不規則な動きを作ってくれる。
今回はカールノイズを使ってポイントをサーフェイス上で這わせてみた。
(DOP(Flip,POP,Grain等)は使用せずに全てSOP内で行っている)
カールノイズはSDFの-0.1~0のボクセル(サーフェイスの真下付近)だけに仕込んでおく。
SDFの勾配ベクトルと距離情報から、ポイントとサーフェイスのめり込み補正を行い
位置の補正後に近傍ボクセルのカールノイズを参照してポイントを動かしている。
Wrangleで常に重力をかけているので、サーフェイス上を這いながら
落下していく動きを作ることが出来る。
このテクニックで、SOPだけでいわゆる”Cling”ができる。
ポイントの軌道はカールノイズの周波数を変えるだけで簡単に変えることができる。
Houdini SOP Curl Noise Frequency test v001 from shuichi sakuma on Vimeo.
Houdini SOP Cling & Wetmap test v001 from shuichi sakuma on Vimeo.
そろそろ花火大会の季節。
ということで今回はHoudiniで花火を作ってみた。
全てSOPだけでフルスクラッチ。
重力加速度、空気抵抗、ポイントからのポイント放出、放出のタイミング制御、
ポイントの寿命・世代の管理、ゴール機能、カラーリング、積分器などは
全てWrangleを使ってVEXで実装した。
DOPを学習する前に
SOPだけで物理法則に従うアニメーションを作っておくと
DOPを理解する上で必ず役に立つと思う。
Houdiniで画像を使用して街並みのモデリングを行ってみた。
今回、素材となる画像を生成するために
専用のアプリケーションを開発した。
cinderというフレームワークを使いC++で実装。
このアプリケーションでは乱数ベースで様々なパターンの通路を自動生成し、
パラメーターを変えることで無限のバリエーションを作ることが出来る。
cinderはWindows上でちょっとしたリアルタイムアプリを作るには
ちょうどいいC++のクラスライブラリ。
cinderはOpenGL、各種IO、音声・画像データ、数学関連の
クラスライブラリが扱いやすく、標準でBoostも入っている。
https://libcinder.org/
以下、これらの画像を使ったモデリング結果。
中心となるのはTrace SOP。
<パターン1>
<パターン2>
<パターン3>
隣接している建物は全て別ジオメトリになっているため
それぞれ個別に動かすことができる。
Houdini Building Generator test v001 from shuichi sakuma on Vimeo.
HoudiniのCHOPを使って稲妻を作ってみた。
Houdini Lightning test v001 from shuichi sakuma on Vimeo.
腕と指先のアニメーションはMayaで作成しておき
Alembic経由でHouidniにインポートした。
CHOPは全て結果がグラフ表示されるので理解しやすい。
また、計算も早いため様々なエフェクトで補佐的に使っていけると思う。
通常、Mayaにおけるモデリング作業というと
手動でポリゴンの頂点を動かしていくが、
Houdiniではオペレーターを通して
プロシージャルにモデリングを行うことができる。
今回、最初に以下に示すようなポリゴンチューブを用意して
Houdiniの様々なオペレーターやVEXを使って複雑な形状にしてみた。
Mayaのように頂点を直接手で動かさなくても
Houdiniのプロシージャルシステムを使えば
単純なポリゴンチューブからこんな形状を作ることができる。
また、Houdiniにおいてはモデリング作業とアニメーション作業に
厳密な境界線はないため、モデリングとアニメーション作業を
並行して行うことも可能になる。
VEXを使ってアニメーションを作ってみた。
<ノイズ関数についての備忘録>
Houdiniには複数のノイズ関数が用意されているが
その効果の違いを確認するため
振幅、周波数、オフセットパラメータなどを全て同じ値にして
代表的なノイズ関数を比較してみた。
それぞれディスプレイスマッピングのレンダリング画像と
ベクトルフィールドの結果になっている。
(worleyノイズのみ距離を返す関数のためスカラフィールド)
ディスプレイスマップのノイズパラメータは
以下のデフォルト値を使用した。
(worleyノイズのみ周波数1に設定)
■周波数:10 10 10
■オフセット:0 0 0
■振幅:1
■粗さ:0.5
■減衰:1
■乱流:5
オリジナルの状態(Sphere SOPで作成した球体)
◆originalperlin noise
標準的なノイズ関数。
近傍との連続性を維持しながら全体的に均等なノイズがかかる。
◆alligator noise
領域ごとにノイズのかかり方に共通性が現れる。
ディスプレイスメントマップではそれが細胞状の隆起となって確認できる。
◆simplex noise
ノイズのかかり方は比較的緩やか。
領域によるノイズの変動も小さい。
◆sparcecovolusion noise
領域ごとに特定方向に大きなうねりを作る。
うねりごとの領域面積にはばらつきが見える。
ノイズ関数の中では見た目の変動が一番大きくなる。
◆worley noise
ポアソン分布に従ってばら撒かれたポイントまでの
距離を返す関数であるため、alligator noiseと同様に
領域ごとにノイズのかかり方が異なり、その見た目は細胞状になる。
Point Wrangleを使ってVEXコンストレインを実装してみた。
そーいえば昔こういうゲームがあったな…
この手のコンストレインは基底ベクトルの座標系変換が中心となる。
Houdini Sop wrangle constraints test v001 from shuichi sakuma on Vimeo.