今回はメインの雲をHoudiniで作成する
前回より複雑なので長め
全体
最後のMergeから向かって左側が雲部分、右が草部分
作り方1
元形状を読み込む
Blenderで簡単に作ったものに対して雲っぽさを足していく。
後ろの方の同じ雲も同じ仕様でパラメーターを少し変えただけなので量産しやすい。
Volumeに変換
Cloudノードで雲に変換。
デフォルトだと大きさで解像度が変わってしまうため、パターン違いを作る場合はby Sizeで指定するほうが良い。
Volume変換時に追加される球状のディテール。SmoothingやShapre Sizeを主に調整し、Seedガチャ。
これでボコボコしたディテールが追加される。
Flattenのタブで、天面(底面)をどのくらい平らにするかを指定
Smoothをかける
一度Fog VolumeからSDFに変換し、マスクを使用して一部のみにSmoothをかける。
マスクのほうはFog Volumeの必要がある。
今回はY軸の下の方にスムースをかけている。
草を生やすベース
SDFからポリゴンに変換し、草を生やす部分をClip等で分離する。
Group Expandで外側から縮小させたグループを作る
できたグループのみを分離し
強めにSmoothをかける。この際Constrained Boundaryをnoneにしないと外周部分にはスムースがかからなくなってしまう。
Extrude Volumeで厚みをつける。Poly Extrudeを使用するとNの方向に厚みがついてしまうので使わない。
再度SDFに変換し、VDB Reshapeで少し太らせる。
1つ前のSmoothをかけたSDFから草を生やすベースをSubtractする。
これで外周部分が少し盛り上がった雲になる。
SDFからFogに戻す。
作り方2
この処理で少し筋っぽいディテールを追加する。
Smoothし、分割数を増やす
天面と底面のグループを作る
Keep by Normalsで特定の法線方向のものをグループにする。不要な部分も取れているが気にしない。
天面と底面をつなぐ
Find Shortest Pathで天面、底面をつなぐ最短距離のカーブを作る。
元形状に近づける
Rayで元の形状に近づくように調整する。
NURBSに変換し、Resampleする。
Convertで一度NURBSに変換する。
Resampleでcurveuとcurvenumを作成する。(Resampleするとポリゴンに戻る)
SDFに対してRayをする
ディテール追加後のメッシュに対してRayをする。
Rayするメッシュは草を生成する部分をSubtractする前のもの
Rayする際にImport Attributes from Hitsを設定することで、元メッシュからアトリビュートを転送できる。
外へ押出し、pscaleを設定する
Displace Along NormalでN方向へカーブを押し出し、
curveuを使用してRampでpscaleを設定する。この際にcurvenumでcurveuをオフセットすることでpscaleの位置をずらしている。
CurveをVolumeに変換
Volume Rasterize CurveでCurveをVolumeに変換する。この際に一つ上で作ったpscaleがあると自動で太さが変わってくれる。
Smoothをかける
作り方3
作り方1と2を結合する
一度Mergeしたのち、VDB Combineで結合する。
Maximumだとどちらかの値が高い方になるので変に濃い部分ができづらい。
CollationをFlatten All AにすることでInput0に繋がっている同じ名前のVolumeをすべて一括処理してくれる。
ディテールが消えないように、ResampleはLow-res to Match high-resで低い方を高い方に合わせる。
ノイズのマスクを作る
次の工程で使用するマスクを作成する。
作り方1のVolumeからScatterし、
さらに草のベース部分のSDFに近い部分をグループに指定する。
ポイント全体にnoiseアトリビュートを設定
草ベースに近い部分は0に設定する。
BBOXを使用して一定の高さ以下はnoiseがかかりづらくなるように設定する。
Volumeにノイズを追加する
Cloud Noiseの第二入力に先程のnoiseアトリビュートを持ったPointを接続してNoiseのかかる部分をコントロールする。
VolumeMixで濃さを調整し、マテリアルをアサイン
ライトがあると調整しやすい。
作り方4(草)
1-3までで雲は終了で4は草部分
地面を作成しないことで草の隙間から雲が見えて境界線が曖昧になるようにしている。
草を生やす範囲
分離した草を生やすベースと、
作り方2の際に消してしまった外側部分を用意
Distance Along Geometryで、外側部分からの距離をdistアトリビュートに格納する。
PointVOPでdistをRemapしてdensityアトリビュートを作成する。
このDensityの強さでhairを生やす。
草の生え方ガイドを作る
PointVOPでノイズと手打ちの値でNを作成する
ノイズを使って縮れ具合を設定する(frizzampscale)
Hair Generateで少なめにガイドカーブを作成する。この時点でNを読んで映える向きが変わっている。
Guide Process (Set Length)で長さをランダムにする。
Guide Process (Frizz)で設定したfrizzampscaleを元に縮れ具合を設定する。
その後Restを作成
草を増やす
再度Hair Generateを作り、Input0にDensityを設定したメッシュ、Input1にGuide Curveを接続する。
Skin Attributeでdensityを指定し、Densityを増やして毛の量を増やす。
Guideを使用せずの生成してもできるが、数が少ないほうがアトリビュートの設定がしやすい。
幅も設定する。
シェーダーを設定
Cdで色をランダムにすることもできるが、今回は手軽にシェーダーで設定している。