HOME

entagmaのケーブルチュートリアルを追う②

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

元動画


前編の続きから:https://www.procedural.jp/articles/p78mwf1_jx3

ディテールアップ:歪曲具合の制御

探索パスの形状を操作可能にするコストアトリビュートを作成

コストアトリビュートを設定
経路探索用のパスにコストアトリビュートを作成すると経路探索時にコストが高い経路を避けるようになり、ケーブルの形状の操作ができるようになる。

costアトリビュートを有効にする

ディテールアップ:径の太さを制御

作成されるワイヤーごとの太さの径を制御する

ワイヤーごとのpscaleを持つpscales配列detailアトリビュートを作成する
addノード、 attrib randomize 、attrib promote、 attribcopyを作成し、addでForブロックで作成するケーブル数分のIterationの値を設定する。
attrib randomizeでiteration数分のpointにランダムなpscaleが振られるのでそれをattribpromoteで配列化したdetailアトリビュートに変換する。
これをattribcopyでforブロック実行前にコピーする。

※動画では見た目の説明を含んでいたので画像ではノード構成を少し変えています

pscale配列アトリビュートを作成

ケーブル作成のイテレーションごとに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を設定

経路探索削除範囲と径の大きさにcurrent scaleを反映する

径の大きさを制御していた group expressionのradiusの値を以下に設定

detail(0, "current_scale", 0)/2

ケーブル用スプラインのpoint attributeにpscaleとしてcurrent scaleを設定する

※動画ではシミュレーション用途にここでresampleも追加していたけど割愛

ケーブルの径を設定

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

sweapのradiusで全体の太さを調整できる

機能の拡張:歪曲した範囲で利用可能にする

ここまでのアプローチでは歪曲した形状に沿うようなケーブルを生成するのが難しいという問題がある。

最短経路探索によるケーブル作成では歪曲形状に沿うケーブル配置ができない

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

変形用のカーブを作成

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

パスデフォーマによる変形

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

fish_ball

プロシージャル魚類