すあまの備忘録

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

天気の子をCGで作ってみた vol.2

今回はメインの雲をHoudiniで作成する

前回より複雑なので長め

f:id:godofsuama:20200711170706p:plain

f:id:godofsuama:20200711192003p:plain
この部分は全部同じ仕組み

全体

f:id:godofsuama:20200711170837p:plain

最後のMergeから向かって左側が雲部分、右が草部分

作り方1

f:id:godofsuama:20200711173711p:plain
作り方1の説明範囲


元形状を読み込む

f:id:godofsuama:20200711171033p:plain

Blenderで簡単に作ったものに対して雲っぽさを足していく。

後ろの方の同じ雲も同じ仕様でパラメーターを少し変えただけなので量産しやすい。

Volumeに変換

f:id:godofsuama:20200711171905p:plain


f:id:godofsuama:20200711171403p:plain

Cloudノードで雲に変換。

デフォルトだと大きさで解像度が変わってしまうため、パターン違いを作る場合はby Sizeで指定するほうが良い。

f:id:godofsuama:20200711171803p:plain

Volume変換時に追加される球状のディテール。SmoothingやShapre Sizeを主に調整し、Seedガチャ。

これでボコボコしたディテールが追加される。

f:id:godofsuama:20200711171520p:plain

Flattenのタブで、天面(底面)をどのくらい平らにするかを指定

Smoothをかける

f:id:godofsuama:20200711172112p:plain
Smooth前

f:id:godofsuama:20200711172143p:plain
Smooth後

f:id:godofsuama:20200711172328p:plain
マスク


一度Fog VolumeからSDFに変換し、マスクを使用して一部のみにSmoothをかける。

マスクのほうはFog Volumeの必要がある。

今回はY軸の下の方にスムースをかけている。

草を生やすベース

f:id:godofsuama:20200711172530p:plain
生やす部分のベース


SDFからポリゴンに変換し、草を生やす部分をClip等で分離する。

f:id:godofsuama:20200711172837p:plain

Group Expandで外側から縮小させたグループを作る

f:id:godofsuama:20200711172921p:plain

できたグループのみを分離し

f:id:godofsuama:20200711173017p:plain

強めにSmoothをかける。この際Constrained Boundaryをnoneにしないと外周部分にはスムースがかからなくなってしまう。

f:id:godofsuama:20200711173125p:plain

Extrude Volumeで厚みをつける。Poly Extrudeを使用するとNの方向に厚みがついてしまうので使わない。

f:id:godofsuama:20200711173229p:plain

再度SDFに変換し、VDB Reshapeで少し太らせる。

f:id:godofsuama:20200711173319p:plain

1つ前のSmoothをかけたSDFから草を生やすベースをSubtractする。

これで外周部分が少し盛り上がった雲になる。

f:id:godofsuama:20200711173548p:plain

SDFからFogに戻す。

作り方2

f:id:godofsuama:20200711173844p:plain
作り方2の説明範囲

この処理で少し筋っぽいディテールを追加する。


Smoothし、分割数を増やす

f:id:godofsuama:20200711173953p:plain

f:id:godofsuama:20200711174017p:plain

天面と底面のグループを作る

f:id:godofsuama:20200711174121p:plain
天面

f:id:godofsuama:20200711174147p:plain
底面


Keep by Normalsで特定の法線方向のものをグループにする。不要な部分も取れているが気にしない。

天面と底面をつなぐ

f:id:godofsuama:20200711174308p:plain


Find Shortest Pathで天面、底面をつなぐ最短距離のカーブを作る。

元形状に近づける

f:id:godofsuama:20200711174421p:plain


Rayで元の形状に近づくように調整する。

NURBSに変換し、Resampleする。

f:id:godofsuama:20200711174527p:plain
NURBS変換後

f:id:godofsuama:20200711174642p:plain
Resample


Convertで一度NURBSに変換する。

Resampleでcurveuとcurvenumを作成する。(Resampleするとポリゴンに戻る)

SDFに対してRayをする

f:id:godofsuama:20200711174917p:plain


ディテール追加後のメッシュに対してRayをする。

f:id:godofsuama:20200711175051p:plain

Rayするメッシュは草を生成する部分をSubtractする前のもの

f:id:godofsuama:20200711175439p:plain

Rayする際にImport Attributes from Hitsを設定することで、元メッシュからアトリビュートを転送できる。

外へ押出し、pscaleを設定する

f:id:godofsuama:20200711175216p:plain


f:id:godofsuama:20200711175246p:plain

Displace Along NormalでN方向へカーブを押し出し、

curveuを使用してRampでpscaleを設定する。この際にcurvenumでcurveuをオフセットすることでpscaleの位置をずらしている。

CurveをVolumeに変換

f:id:godofsuama:20200711175532p:plain


Volume Rasterize CurveでCurveをVolumeに変換する。この際に一つ上で作ったpscaleがあると自動で太さが変わってくれる。

Smoothをかける

f:id:godofsuama:20200711175655p:plain


作り方3

f:id:godofsuama:20200711175933p:plain
作り方3の説明範囲


作り方1と2を結合する

f:id:godofsuama:20200711180109p:plain


一度Mergeしたのち、VDB Combineで結合する。

Maximumだとどちらかの値が高い方になるので変に濃い部分ができづらい。

CollationをFlatten All AにすることでInput0に繋がっている同じ名前のVolumeをすべて一括処理してくれる。

ディテールが消えないように、ResampleはLow-res to Match high-resで低い方を高い方に合わせる。

ノイズのマスクを作る

f:id:godofsuama:20200711180642p:plain


次の工程で使用するマスクを作成する。

f:id:godofsuama:20200711180456p:plain

作り方1のVolumeからScatterし、

f:id:godofsuama:20200711180552p:plain

さらに草のベース部分のSDFに近い部分をグループに指定する。

f:id:godofsuama:20200711180741p:plain

ポイント全体にnoiseアトリビュートを設定

f:id:godofsuama:20200711180803p:plain

草ベースに近い部分は0に設定する。

f:id:godofsuama:20200711180855p:plain

BBOXを使用して一定の高さ以下はnoiseがかかりづらくなるように設定する。

Volumeにノイズを追加する

f:id:godofsuama:20200711181101p:plain


f:id:godofsuama:20200711181050p:plain

Cloud Noiseの第二入力に先程のnoiseアトリビュートを持ったPointを接続してNoiseのかかる部分をコントロールする。

VolumeMixで濃さを調整し、マテリアルをアサイ

f:id:godofsuama:20200711181229p:plain
調整前

f:id:godofsuama:20200711181250p:plain
調整後


ライトがあると調整しやすい。

f:id:godofsuama:20200711181401p:plain

作り方4(草)

f:id:godofsuama:20200711185457p:plain
作り方4の説明範囲

f:id:godofsuama:20200711185359p:plain

1-3までで雲は終了で4は草部分

地面を作成しないことで草の隙間から雲が見えて境界線が曖昧になるようにしている。


草を生やす範囲

f:id:godofsuama:20200711185738p:plain


f:id:godofsuama:20200711185651p:plain

分離した草を生やすベースと、

f:id:godofsuama:20200711185823p:plain

作り方2の際に消してしまった外側部分を用意

f:id:godofsuama:20200711185925p:plain

Distance Along Geometryで、外側部分からの距離をdistアトリビュートに格納する。

f:id:godofsuama:20200711190023p:plain

PointVOPでdistをRemapしてdensityアトリビュートを作成する。

このDensityの強さでhairを生やす。

草の生え方ガイドを作る

f:id:godofsuama:20200711190248p:plain


f:id:godofsuama:20200711190205p:plain

PointVOPでノイズと手打ちの値でNを作成する

f:id:godofsuama:20200711190323p:plain

ノイズを使って縮れ具合を設定する(frizzampscale)

f:id:godofsuama:20200711190429p:plain

Hair Generateで少なめにガイドカーブを作成する。この時点でNを読んで映える向きが変わっている。

f:id:godofsuama:20200711190546p:plain

Guide Process (Set Length)で長さをランダムにする。

f:id:godofsuama:20200711190626p:plain

Guide Process (Frizz)で設定したfrizzampscaleを元に縮れ具合を設定する。

その後Restを作成

草を増やす

f:id:godofsuama:20200711190831p:plain


f:id:godofsuama:20200711190925p:plain

再度Hair Generateを作り、Input0にDensityを設定したメッシュ、Input1にGuide Curveを接続する。

f:id:godofsuama:20200711191042p:plain

Skin Attributeでdensityを指定し、Densityを増やして毛の量を増やす。

Guideを使用せずの生成してもできるが、数が少ないほうがアトリビュートの設定がしやすい。

f:id:godofsuama:20200711191158p:plain

幅も設定する。

シェーダーを設定

f:id:godofsuama:20200711191245p:plain

f:id:godofsuama:20200711191326p:plain


Cdで色をランダムにすることもできるが、今回は手軽にシェーダーで設定している。