2024年12月25日水曜日

樹木からワイヤーを作る

 この記事はHoudini アドベントカレンダー2024↓の24日目の記事です。
 https://qiita.com/advent-calendar/2024/houdini

この記事は、Speed Tree等の樹木生成ソフトなどで作った木のデータからワイヤーを作るTipsです。ワイヤーを作成できるとシミュレーション使えたり、
このワイヤーを元にローポリモデルを簡単に作れたりと何かと便利です。

木のデータは、以下からダウンロードしました。
https://www.cgtrader.com/free-3d-models/plant/conifer/american-elm-tree-78c0a9f7-078f-40cf-bbd9-236c991cb019

前提として、樹木生成ソフトで作った木のデータは、どの枝(幹)も多少の違いはあれど円柱をベースとした頂点番号の並びになっています。
なので、どの枝も同じような頂点番号の並びの円柱の集まりなので、ルールを把握し枝毎に一本エッジを取り出し、中心に配置という処理を構築出来れば、あとはFor Loopで回せば木全体のワイヤーを作ることができます。

というわけで、手動モデリングした木のデータなどにはこの手法は使えないのでご注意を。

以下、手順です。

まずは、木のデータ(FBX)をインポートし、以下の様に下準備。


以下は、枝毎にエッジを一本取り出し、枝の中心に配置する処理です。


以下はFor Loopの各ステップのビューポート。
For Loopの一番始め(上図のforeach_begin1)

上図の2番(get_edge)エッジを一本とりだす。

上図の3番。エッジを枝(幹)の中心に移動。


どの枝も円柱ベースで、同じルールで頂点番号が並んでいるので上図2,3の様な
処理でエッジを取り出したり、中心座標を計算できます。


For Loopを抜け出すと、完成です。

以上で、解説は終わりです。

この木のデータではこの手法が有効でしたが、別ソフトで作られた場合はルールが変わります。ですが、どの樹木生成ソフトも枝や幹は円柱がベースになっているので少し改造するだけで同じことができるかと思います。

hipファイルはこちら

今年も本家もApprenticeもどちらのHoudiniアドベントカレンダーを盛況ですね。
素晴らしいです。過去にも多くの有用な記事あるので是非見てみてください。
以下からアクセスできます!







2024年12月23日月曜日

フェイクスキャッタリングライティング

この記事はHoudini Apprenticeアドベントカレンダー2024↓の22日目の記事です。
 https://qiita.com/advent-calendar/2024/happrentice

完成図


ボリュームのラインティング、真面目にやるとめっちゃ重いですよね。特にスキャッタリングが必要な場合は、ボリュームサンプリングとDepth設定を上げる必要がある為激重になります。

この記事は高速化の為に、Sopでフェイクでやる方法の解説です。
フェイクなので万能ではありませんが、雲に対して稲妻がつくるスキャッタリングなんかの時には有用です。

以下手順です。
まずは、雲と光源となる円柱を用意。


雲はHoudini20で搭載された新ノードSkyboxで一瞬で作れるようになりましたね。
調整も簡単です。

仕込みとして、円柱のほうにscatterノードでpointをばら撒きます。
(円柱のポリゴンが十分細かければ、scatterは不要です。)


このpoint群と雲のvoxelと距離を計算し、距離が離れれば離れるほど弱くなるフィールドを作り、PyroBakeVolumeノードで色を付けるという流れになります。

以下は、そのvoxelとpointの距離を計算する方法です。



雲側から円柱にscatterしたポイントをpoint cloudで参照し、Pアトリビュートを取得し、
voxel自身のPとdistanceノードで距離出します。
距離をfitノードで0~50の値を1 ~ 0の範囲に収め、元のDensityに掛け算します。



すると、以下のように近い所は元のdensity値、遠い所はdensityが0となります。


このdensityフィールドをtemperatureにNameノードで変更します。
名前はtemperatureでなくても、density以外なら何でも良いのですがpyro bake vokumeノードがデフォルトでtemperatureをscattterに変換するのでtemperatureにしています。


これを元のdensityのみの雲と合体させ(上図merge2ノード)ると、

Pyro Bake Volumeでルックを設定できます。
ScatterやFireタブでほぼリアルタイムで変更可能です。


以上で、解説は終わりです。

hipファイルはこちら

今年も本家もApprenticeもどちらのHoudiniアドベントカレンダーを盛況ですね。
素晴らしいです。過去にも多くの有用な記事あるので是非見てみてください。
以下からアクセスできます!