entagmaのケーブルチュートリアルを追う②
entagmaで2024/12/09 に公開された無料チュートリアルの「Space Filling Cable Generator」が、ゲリラゲームスが公開しているゲームに利用される目的のワイヤーを作成したという情報から最新のHoudiniの機能を利用すればもっと簡単に作成できます、という事例。実際にゲーム開発で利用されたワイヤージェネレータの再現なのでゲーム開発に利用できると思い学習目的でチュートリアルを追っていく。

元動画
- Entagma「Houdini Tutorial: Space Filling Cable Generator」
https://www.youtube.com/watch?v=yhTMKMBpOXg - 動画内で紹介しているゲリラゲームスのインタビュー記事
https://www.sidefx.com/community/horizon-zero-dawn-guerrilla-games/
前編の続きから:https://www.procedural.jp/articles/p78mwf1_jx3
ディテールアップ:歪曲具合の制御
探索パスの形状を操作可能にするコストアトリビュートを作成
コストアトリビュートを設定
経路探索用のパスにコストアトリビュートを作成すると経路探索時にコストが高い経路を避けるようになり、ケーブルの形状の操作ができるようになる。

ディテールアップ:径の太さを制御
作成されるワイヤーごとの太さの径を制御する
ワイヤーごとのpscaleを持つpscales配列detailアトリビュートを作成する
addノード、 attrib randomize 、attrib promote、 attribcopyを作成し、addでForブロックで作成するケーブル数分のIterationの値を設定する。
attrib randomizeでiteration数分のpointにランダムなpscaleが振られるのでそれをattribpromoteで配列化したdetailアトリビュートに変換する。
これをattribcopyでforブロック実行前にコピーする。
※動画では見た目の説明を含んでいたので画像ではノード構成を少し変えています

ケーブル作成のイテレーションごとにpscale要素を参照できるようにする
BlockBeginからmeta Importノードを作成し、detail wrangleノードも作成。
detail wranlgeに以下を設定しiterationごとにpscalesアトリビュートの配列内要素を参照できるようにする
float pscales[] = f[]@pscales;
int i = detail(1, "iteration");
f@current_scale = pscales[i];

経路探索削除範囲と径の大きさにcurrent scaleを反映する
径の大きさを制御していた group expressionのradiusの値を以下に設定
detail(0, "current_scale", 0)/2
ケーブル用スプラインのpoint attributeにpscaleとしてcurrent scaleを設定する
※動画ではシミュレーション用途にここでresampleも追加していたけど割愛

sweapのradiusは径の調整になる。(中央値は0.5)

機能の拡張:歪曲した範囲で利用可能にする
ここまでのアプローチでは歪曲した形状に沿うようなケーブルを生成するのが難しいという問題がある。

歪曲に沿うケーブルを作成したい場合は、添わせる形状のカーブを作成し、

Path Deformerに接続する。
Path DeformerのMap Length Usingを Fraction Of Curve Lengthに設定すると自動でパスの長さに合わせたデフォメーションをしてくれる。

汎用性の高そうなワークフローを学べるチュートリアルでした。

fish_ball
プロシージャル魚類