【Houdini】ポイントアルファをカーブで制御しよう

今回はポイントのアルファをRamp(カーブのようなもの)で制御できるようにしていきますが、
その中でVEXというコードを記述する必要があります。

コードというと文字列がいっぱい並んでてなんか難しそう…と思われる方がいるかもしれませんし
私もその中の1人です。
ただ今回は1行の簡単なコードを記述するだけなので、ぜひ見ていってください。

ノードの構成

まず始めにノード全体を見ていきましょう。

いくつかノードが並んでいますが、

  1. line, resample, sweepの3つのノードで板ポリを作成
  2. ポイントアルファ制御用のVEXを記述するAttribute wrangleノードを間に入れる

    流れで説明します。

板ポリを作ろう

 板ポリはHoudini上でGridと呼ばれていて、
今回はsweepノードを使用して作成します。

sweepは
入力1:入力2の配置のベースになる形状
入力2:入力1の形状に配置したいオブジェクト
を繋げていきます。
詳しくはインディーゾーンさんのHoudini 18 SOP No.24 “Sweep:2.0 SOP”
が分かりやすくておすすめです。

まずsweepの入力1に繋がるノードを見ます。
lineでシンプルな線を作成します。
ポイント数は後のノードで増やしていくので今は2個にしておきます。

次にresampleでlineのポイントを増やします。

入力2に繋がるノードを見ていきます。
数値が多少変わるだけでやることは一緒です。

lineでシンプルな線を作成して

resampleでlineのポイントを増やすだけです。
(Lengthの値は入力1より小さくしています。)

最後に入力1と入力2をそれぞれsweepにつなぎます。
これで板ポリができます。

イメージはお互いラインが格子状に配置されている感じです。

※今回はイメージしやすいように「格子状に配置されている」と書いてますが、正確には「2番目の入力から断面曲線を受け取り、1番目の入力の背骨曲線に沿ってその断面曲線のコピーを分布させて、その分布させた断面曲線間にサーフェスを作成す」処理が行われているので注意!

UVs and AttributesのCompute UVsにだけチェックを入れておきます。
UVを自動で作成してくれます。

これでGridの作成は完了です。

VEXを書いてみよう

次はVEXを記述していきます。

Attributewrangleを、左のresampleの下に繋ぎます。

VEXpressionという欄に以下を記述していきます。
@Alpha = chramp(“Alpha”, fit(@ptnum, 0,@numpt-1, 0, 1));

いったんコピペで大丈夫です。

細かく中身を見ていきましょう。
@Alphaはポイントのアルファ情報を意味しています。

fitは「ある範囲内の値を別の範囲内に置き換える、フィットさせる」関数です。

例えばfit(10, 5,15, 0,1)だった場合、
元の値が範囲 [5, 15] から範囲 [0, 1] に変換されます。
つまり、元の値 10 は範囲 [5, 15] で中間の位置にあるため、
fit() 関数によって範囲 [
0, 1] での中間の値に置き換えられます。
よってfit(10, 5,15, 0,1);の結果は0.5になります。

あらためて今回の場合を見ていきます。

置き換えたい値:@ptnum
@ptnumはそれぞれのポイントに順番に振られている番号で0~10まで振られてます。

元の範囲:0,@numpt-1
@numptというのはポイントの総数で、今回だと11になります。
そこから1をひくので 11-1=10。@numpt-1=10ということになります。

置き換え後の範囲:0, 1
これはそのまま0から1になります。

これで@ptnumは0~1の範囲に置き換えられました。
それを「@Alpha=」でAlpha値に代入します。

最終的な結果はGeometry Spreadsheetを確認してみましょう。
各ポイントAlphaに0~1の値が割り振られていることが分かります。

ちなみに1つ上のresampleノードでポイントの数を増やしたとしても、
その全てのポイントにちゃんと0~1の値が割り振られていることが確認できます。

ここまで説明しておいて何ですが

なぜポイントを0~1の範囲に収める必要があるか?

…を書いていませんでした。

それはchramp(カーブ)が0~1の範囲しか扱えないからです。
そのため、今回のように複数のポイントを扱う場合はfit関数で範囲を置き換える必要があります。

次に、chrampについてです。
前述したfit関数を覆うようにchramp関数を記述します。

“Alpha“はカーブの名前を決めるだけのものなので、“hogehoge”でも何でもOKです。
今回は分かりやすくするためにAlphaと付けておきます。

処理の流れは

のイメージです。

これでカーブでアルファ値を制御できるようになります。

…出来てはいますが見づらいですね。Visualizeノードを使用して色をつけて確認してみます。
attributewrangleにvisualizeを繋いで、

  1. Attribute:Alpha
  2. Max:1  と設定します

するとColorRampに基づいて「0に近いほどに / 1に近いほどに  」表示になります。
これで結果が分かりやすくなったと思います。

これで全ての作業は完了しました!

最終結果を見てみよう

では最後にsweepノードを見てみましょう。
上のほうで書きましたが、sweepで入力1のアルファをchrampで制御できるライン
横並びになって板ポリを形成します。

そのため、先ほどのwrangleのカーブを調整すれば、
板ポリ全体のアルファが制御できるようになっています。

今回はこれで以上です。
chrampやfitはVEXを使用していると何十回何百回と使うことになると思うので
日頃から使用して慣れていくと良いでしょう。

関連記事

  1. READ MORE

    【Houdini】Latticeノードの使い方

    2024-03-26

ページ上部へ戻る