ほぼほぼ炎と作りは同じ。そろそろPyro系は飽きたな...
作っていて楽しかったのでメモ。
シーンファイルはこちら
キャラクターの用意
FBXを直接Houdiniに読み込むとhipが重くなるので注意。
Import -> FBX Importから読み込み、
100倍だと思うのでスケール0.01をかけて小さくする。
Takeの削除
その際にMixamoのデータはアニメーションがTake(Maya的にはアニメーションレイヤー状態)にはいっていて使いづらいので一度解除してあげる。
Mixamo.comと書いてある部分をMainにドラッグドロップすると、「Merge take(with override)」とでるので選択。
これでMainのTakeにアニメーションを移動できる。その後Main以外のTakeを右クリックで削除
これでTransformのグレーアウトがなくなるので、Uniform Scaleを0.01にする。
シェーダー調整
キャラクターが白っぽいのはシェーダーでEmissionが入っているからなので値を0に変更する。
アニメーションの調整
ちょっと後半ゆっくりにしたかったので調整。
アニメーションがはいってそうなものを全選択。
タイムスライダにキーがでるので、まるごと移動して調整。
Shifを押しながら調整したい部分のキーを選択し、後ろの部分を中ボタンドラッグする。そうするとキーフレームのリタイムができる。
オーラ部分
エミッター用ポイントの作成
止めたものに対してアトリビュート設定を行う。(設定が難しい場合を除いて)
Mixamoのアニメーションは、0フレームにするとTポーズになるのでTimeshiftで0フレームを指定する。
その後、restを作成し、「RBD Paint」ノードでDensityをペイントする。
これをもとにScatter率を変更する。
「Attribute Paint」ノードでもペイント可能だが、「RBD Paint」ノードはデフォルトのアトリビュート名がdensityなのでScatterする際のデフォルトと同じなことと、
「RBD Paint」ノードにはExploded Viewモードがついており、メッシュがバラバラな場合にペイントしやすい。
Scatterする際はDensity Scaleにすると密度に均一でScatterできる。
シムに必要なアトリビュートを作成する。
「Attribute Noise」でdensity、temperatureにマイナス値がでるくらい極端になるように設定する。
極端にしたほうが不思議な味がでたり、均一なエミットになりづらい。
「Enumrate」は今回特に必要ないが、idがあることでできることが広がるので設定している。
最後に「Point Deform」でもとのアニメーションに追従させている。
いつもは「Attribute Interpolate」だが、今回「Attribute Interpolate」だとエラーが出たので使用していない。
不要なアトリビュートを整理し、一度キャッシュを取る。
エミッターのVolume化
「Retime」はおまじないで、今度別記事で紹介。今回はいらない。
赤い「Transform」部分でUniform Scaleを4にしている。
シムが重くなるが、リアルスケールでやるよりも、シムの解像度を上げなくてもディテールが出やすく、結果としてメモリ消費を抑えられる場合がある。
ただし、スケール1状態と同じDivison Sizeにしたらあまり意味はなく、シムの値等もスケール分の値になるのに注意
緑の「Wrangle」ではキーを打ってエミットタイミングを決めている。
「Volume Rasterize Attribute」指定したAttributeをVolume化
Nをエミッターのvelとして使用。前述の「Attribute Noise」を極端にした後、この部分のNormalize by Clamped Coverageのチェックをオフにすると更に極端なエミッターにすることができる。暴れさせたいときとかには有用。
「Visibility」でDensity以外が表示の邪魔なので非表示にし、またキャッシュを取る。
キャラクターCollisionSDFの作成
別にいらないといえばいらないが、厚みがないメッシュの場合のSDF化
今回のメッシュはゲーム用が主なため、厚みがなかったり、メッシュが繋がっていない部分が多い。
「Fill Hole」などで穴埋めしてもいが、流石に数が多くてめんどくさいので別の方法で穴埋めをする。
ちょっと重いのと、内側も生成されるのが難点だが何もしなくても穴が埋まってくれる。
一度「Scatter」でポイントにする。
「VDB from Particle」で設定を低めにしSDFにする。
Voxel Size, Point Radius Scale, Minimum Radisu in Voxelを良い感じに設定する。
ここの値が高め(デフォルト等)だとSDFが生成されないので最初に接続してSDF化されなくても諦めない。
「Reshape SDF」で少し大きくする。
「Convert VDB」でポリゴンに変換
Collisionvelを作成する場合は「Attribute Transfer」でPointからアトリビュートを転送する。
赤い「Transform」でエミッターと同じスケールをかけ、「VDB from Polygon」の流れでCollison SDFを作成する。
シミュレーション
今回はPyro Solver SOPを使用。特殊なことはしていないので面白くない。
Voxel Size, Max Sizeを設定する。Max Sizeはシミュレーション範囲の最大の大きさ。
Collisionの設定をSDF+Volume Velocityに変更。
Time Scaleを4にし、Advection-Reflectionを設定。
Shapeタブもよくある設定
AdvancedタブではAdvectionのBlendに少し値を入れている。
不要だったかもしれないが、ここに少し値を入れると、低解像度時のタービュレントによる十字型の変なディテールを軽減できる。その代わり若干velがぼける。
Sourcingもよくある設定
Exportでは後処理でvelを保存するのでvelを出している。
好みの問題だが、まだVolume系のSOPでVDBをに対応していないものも多いため、この段階でVDB化はしない。
Post処理
VolumeをVDB化し、VDB Vector Mergeでvelをvectorにする。
VDB Advectでvelを使用してdensityを再度移流する。
過去記事でもやっている手法。筋感の強調やエミットが早い場合のぼそぼそ感を軽減できる。
赤い「Transform」でInvert Transformにチェックを入れ、もとの大きさに戻す。
シェーダー
過去記事の炎のシェーダーを拡張したもの。 godofsuama.hatenablog.com
Alphaのランプを1つ追加し、両方を足して2で割っている。
ディテール用と全体調整用の2つ。
コンポジット
キャラクターのマットアウトがめんどうなのでDeepを使用。Deep周りは別記事の予定
Deepは重くなりがちではあるが、オーラ系であれば意外とファイルサイズは小さい。
キャラクターの髪の毛やディスプレイスメントのBGでマットアウトするよりは全然実用的。
レンダラーが違っても大丈夫というのは大きい。
今回は1280*720ということもあるが、ファイルサイズは最大でも1fで20MB程度。
色調整
輝度が高い部分を抽出して彩度を抜いたものをもともとのものにOverで重ねる。
Plusで重ねても良いが、その分局所的に値が高くなってしまうのを避けるためにOverを使用。
白を意図的に出したい場合などにもOverで重ねるのは有用だと思う。
シャープ化
ちょっとボケているので、Sharpをかける。この際に一度Logに変換することでエラーを軽減する。
グロー部分の作成
毎回やり方を模索している部分。今回は割と手抜き。
グローと合体