【Houdini】VEXでバウンディングボックスを基準にグループを作る(ver17.5)
こんにちは。
皆さんは下図のような半球のメッシュを作る時、どのように作っていますでしょうか?
エフェクトでよく使う形状ですね。
今回は、VEXを使ってスフィアのバウンディングボックスを基準にグループを作成し、そのグループを削除する方法で作ってみたいと思います。
この方法で作ると、下図のようにサイズ、分割数、削除する範囲を自由に変える事ができるようになります。
つくりかた
ノード構成
まず、ノード構成はこのようになっています。
非常にシンプル。
VEX全文
VEXの全文はこのようになっています。
順番に見ていきましょう。
スフィアのバウンディングボックスを取得する
1行目では、「relbbox」という関数を使って、スフィアのバウンディングボックスを0~1の範囲で取得し、「bbox」という変数に代入しています。
vector bbox = relbbox(0, @P);
グループ範囲を決めるしきい値をつくる
2行目はどこを堺にグループに含むかのしきい値用の変数を作っています。
float threshold = chf("threshold");
しきい値は調整可能にしたいので、chf関数を使って下図のように外に出しておきます。
if文でグループに含む条件を設定する
3行目はif文を使い、グループに含めるポイントの条件を設定しています。
スフィアの正面を+Zとしてその背面を削除したいので、「bbox.z」と記述してスフィアのバウンディングボックスのZ方向0~1の範囲だけ参照します。
そして「< hreshold」と記述して、しきい値より小さい場合はグループに含めるとします。
if(bbox.z < threshold)
{
i@group_BackFace = 1;
}
VEXでグループを作る際、アトリビュートを作るのと似たような感じで「i@group_自由な名前」でグループを作る事ができます。
グループに含むか含まないかは0か1かで判断されるので、含みたい場合は「1」を、含みたくない場合は「0」というif文を書く事でグループがつくれます。
ですので、条件に含まない場合は「0」という処理を最後に書きます。
else
{
i@group_BackFace = 0;
}
これで下図のようにスフィアの背面をグループ化する事ができました!
グループ化されたポイントをハイライトする方法
添付の画像ではグループ化されたポイントが黄色くハイライトされていますね。
グループ範囲は可視化しておいた方が制作しやすいのでしておきましょう。
「Bindings」タブの「Output Selection Group」にグループ名を記入すればハイライトされるようになります。
グループ化されたポイントを削除
最後にこのグループを「Delete」ノードで削除して完成です!
Houdini本 販売中!
Houdiniでエフェクト用メッシュをさくさく作れるようになるチュートリアル本を販売中です!
エフェクトでよく使う4つの形状を例に、Houdini初心者のために分かりやすく丁寧に解説していますので、ぜひ覗いてみてください!