すあまの備忘録

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

Houdiniで纏うオーラを作る

ほぼほぼ炎と作りは同じ。そろそろPyro系は飽きたな...

作っていて楽しかったのでメモ。

f:id:godofsuama:20200830211941p:plain
完成画


Aura

シーンファイルはこちら

キャラクターの用意

キャラクターがないと寂しいので、Mixamoから用意

FBXを直接Houdiniに読み込むとhipが重くなるので注意。

Import -> FBX Importから読み込み、

100倍だと思うのでスケール0.01をかけて小さくする。

f:id:godofsuama:20200830212606p:plain

Takeの削除

その際にMixamoのデータはアニメーションがTake(Maya的にはアニメーションレイヤー状態)にはいっていて使いづらいので一度解除してあげる。

f:id:godofsuama:20200830212722p:plain

Mixamo.comと書いてある部分をMainにドラッグドロップすると、「Merge take(with override)」とでるので選択。

これでMainのTakeにアニメーションを移動できる。その後Main以外のTakeを右クリックで削除

これでTransformのグレーアウトがなくなるので、Uniform Scaleを0.01にする。

f:id:godofsuama:20200830213433p:plain

シェーダー調整

キャラクターが白っぽいのはシェーダーでEmissionが入っているからなので値を0に変更する。

f:id:godofsuama:20200830213128p:plain

f:id:godofsuama:20200830213529p:plain
シェーダー変更後

アニメーションの調整

ちょっと後半ゆっくりにしたかったので調整。

アニメーションがはいってそうなものを全選択。

f:id:godofsuama:20200830213756p:plain

タイムスライダにキーがでるので、まるごと移動して調整。

f:id:godofsuama:20200830213819p:plain

Shifを押しながら調整したい部分のキーを選択し、後ろの部分を中ボタンドラッグする。そうするとキーフレームのリタイムができる。

f:id:godofsuama:20200830213908p:plain

f:id:godofsuama:20200830214048p:plain

f:id:godofsuama:20200830214116p:plain

オーラ部分

f:id:godofsuama:20200830212119p:plain
ネットワーク全体

エミッター用ポイントの作成

f:id:godofsuama:20200830214555p:plain

止めたものに対してアトリビュート設定を行う。(設定が難しい場合を除いて)

Mixamoのアニメーションは、0フレームにするとTポーズになるのでTimeshiftで0フレームを指定する。

その後、restを作成し、「RBD Paint」ノードでDensityをペイントする。

これをもとにScatter率を変更する。

「Attribute Paint」ノードでもペイント可能だが、「RBD Paint」ノードはデフォルトのアトリビュート名がdensityなのでScatterする際のデフォルトと同じなことと、

「RBD Paint」ノードにはExploded Viewモードがついており、メッシュがバラバラな場合にペイントしやすい。

f:id:godofsuama:20200830215037p:plain

Scatterする際はDensity Scaleにすると密度に均一でScatterできる。

f:id:godofsuama:20200830215243p:plain

シムに必要なアトリビュートを作成する。 f:id:godofsuama:20200830215410p:plain

「Attribute Noise」でdensity、temperatureにマイナス値がでるくらい極端になるように設定する。

極端にしたほうが不思議な味がでたり、均一なエミットになりづらい。

f:id:godofsuama:20200830215526p:plain

「Enumrate」は今回特に必要ないが、idがあることでできることが広がるので設定している。

最後に「Point Deform」でもとのアニメーションに追従させている。

いつもは「Attribute Interpolate」だが、今回「Attribute Interpolate」だとエラーが出たので使用していない。

f:id:godofsuama:20200830215827p:plain

不要なアトリビュートを整理し、一度キャッシュを取る。

f:id:godofsuama:20200830220038p:plain

エミッターのVolume化

f:id:godofsuama:20200830220149p:plain

「Retime」はおまじないで、今度別記事で紹介。今回はいらない。

赤い「Transform」部分でUniform Scaleを4にしている。

シムが重くなるが、リアルスケールでやるよりも、シムの解像度を上げなくてもディテールが出やすく、結果としてメモリ消費を抑えられる場合がある。

ただし、スケール1状態と同じDivison Sizeにしたらあまり意味はなく、シムの値等もスケール分の値になるのに注意

f:id:godofsuama:20200830220334p:plain

緑の「Wrangle」ではキーを打ってエミットタイミングを決めている。

f:id:godofsuama:20200830221403p:plain

「Volume Rasterize Attribute」指定したAttributeをVolume化

Nをエミッターのvelとして使用。前述の「Attribute Noise」を極端にした後、この部分のNormalize by Clamped Coverageのチェックをオフにすると更に極端なエミッターにすることができる。暴れさせたいときとかには有用。

f:id:godofsuama:20200830221646p:plain

「Visibility」でDensity以外が表示の邪魔なので非表示にし、またキャッシュを取る。

f:id:godofsuama:20200830221808p:plain

キャラクターCollisionSDFの作成

f:id:godofsuama:20200830222135p:plain

別にいらないといえばいらないが、厚みがないメッシュの場合のSDF化

今回のメッシュはゲーム用が主なため、厚みがなかったり、メッシュが繋がっていない部分が多い。

「Fill Hole」などで穴埋めしてもいが、流石に数が多くてめんどくさいので別の方法で穴埋めをする。

ちょっと重いのと、内側も生成されるのが難点だが何もしなくても穴が埋まってくれる。

f:id:godofsuama:20200830222022p:plain

一度「Scatter」でポイントにする。 f:id:godofsuama:20200830222211p:plain

「VDB from Particle」で設定を低めにしSDFにする。

Voxel Size, Point Radius Scale, Minimum Radisu in Voxelを良い感じに設定する。

ここの値が高め(デフォルト等)だとSDFが生成されないので最初に接続してSDF化されなくても諦めない。

f:id:godofsuama:20200830222259p:plain

「Reshape SDF」で少し大きくする。 f:id:godofsuama:20200830222511p:plain

「Convert VDB」でポリゴンに変換 f:id:godofsuama:20200830222802p:plain

Collisionvelを作成する場合は「Attribute Transfer」でPointからアトリビュートを転送する。

赤い「Transform」でエミッターと同じスケールをかけ、「VDB from Polygon」の流れでCollison SDFを作成する。

f:id:godofsuama:20200830223014p:plain

シミュレーション

f:id:godofsuama:20200830223229p:plain

今回はPyro Solver SOPを使用。特殊なことはしていないので面白くない。

Voxel Size, Max Sizeを設定する。Max Sizeはシミュレーション範囲の最大の大きさ。

Collisionの設定をSDF+Volume Velocityに変更。

f:id:godofsuama:20200830223255p:plain

Time Scaleを4にし、Advection-Reflectionを設定。

f:id:godofsuama:20200830223443p:plain

Shapeタブもよくある設定

f:id:godofsuama:20200830223520p:plain

AdvancedタブではAdvectionのBlendに少し値を入れている。

不要だったかもしれないが、ここに少し値を入れると、低解像度時のタービュレントによる十字型の変なディテールを軽減できる。その代わり若干velがぼける。

f:id:godofsuama:20200830223617p:plain

Sourcingもよくある設定 f:id:godofsuama:20200830223740p:plain

Exportでは後処理でvelを保存するのでvelを出している。

好みの問題だが、まだVolume系のSOPでVDBをに対応していないものも多いため、この段階でVDB化はしない。

f:id:godofsuama:20200830223822p:plain

Post処理

f:id:godofsuama:20200830224002p:plain

VolumeをVDB化し、VDB Vector Mergeでvelをvectorにする。 f:id:godofsuama:20200830224056p:plain

VDB Advectでvelを使用してdensityを再度移流する。

過去記事でもやっている手法。筋感の強調やエミットが早い場合のぼそぼそ感を軽減できる。

godofsuama.hatenablog.com

f:id:godofsuama:20200830224226p:plain

赤い「Transform」でInvert Transformにチェックを入れ、もとの大きさに戻す。

f:id:godofsuama:20200830224415p:plain

シェーダー

過去記事の炎のシェーダーを拡張したもの。 godofsuama.hatenablog.com

Alphaのランプを1つ追加し、両方を足して2で割っている。

ディテール用と全体調整用の2つ。

f:id:godofsuama:20200830224645p:plain

f:id:godofsuama:20200830224709p:plain

コンポジット

f:id:godofsuama:20200830225229p:plain

キャラクターのマットアウトがめんどうなのでDeepを使用。Deep周りは別記事の予定

Deepは重くなりがちではあるが、オーラ系であれば意外とファイルサイズは小さい。

キャラクターの髪の毛やディスプレイスメントのBGでマットアウトするよりは全然実用的。

レンダラーが違っても大丈夫というのは大きい。

今回は1280*720ということもあるが、ファイルサイズは最大でも1fで20MB程度。

色調整

輝度が高い部分を抽出して彩度を抜いたものをもともとのものにOverで重ねる。

Plusで重ねても良いが、その分局所的に値が高くなってしまうのを避けるためにOverを使用。

白を意図的に出したい場合などにもOverで重ねるのは有用だと思う。

f:id:godofsuama:20200830225654p:plain

f:id:godofsuama:20200830225727p:plain
重ねた状態

シャープ化

ちょっとボケているので、Sharpをかける。この際に一度Logに変換することでエラーを軽減する。

f:id:godofsuama:20200830225919p:plain

f:id:godofsuama:20200830225837p:plain
シャープ化後

グロー部分の作成

f:id:godofsuama:20200830230017p:plain
グロー処理

毎回やり方を模索している部分。今回は割と手抜き。

f:id:godofsuama:20200830230058p:plain

グローと合体

f:id:godofsuama:20200830230131p:plain