Houdiniかんたんレシピ 13 ~ Ramp vs チャンネルカーブ ~


~基本的すぎてあまり紹介されない、ちょっと便利なTips紹介~

『Houdiniかんたんレシピ』は、Houdiniを使っていく上で、基本的なことですが基本すぎてチュートリアル等で紹介されないような、ちょっとしたTipsや、ニッチな機能を紹介していくシリーズです。

かんたんレシピ第13回目は、Ramp vs チャンネルカーブです。

 

カーブを元にアトリビュートを制御する時に、FloatのRampパラメーターを使うことがあると思います。

しかし、RampパラメータのFloatカーブは自由な形を作るのが大変だと思いませんか?

Rampパラメータができる以前は、エクスプレッションを使ってチャンネルカーブを元にアトリビュートを制御するといったことをしていました。

そこで今回はRampとチャンネルカーブのそれぞれの使い方と、比較をしていきたいと思います。

 

Rampとチャンネルカーブの比較

Ramp

  • VOPでもWrangleでも使用可能で処理が早い。
  • カーブ形状のアニメーションができる。
  • ランプを作るWindowが狭い。
  • ランプカーブを0~1の範囲内で作る必要がある。
  • ランプ形状の補間方法が使いづらい。
  • 拡大ができないので細かいカーブを作るのが難しい。

チャンネルカーブ

  • Animation Editorが使用できるため、カーブの形状を作りやすい。
  • 拡大縮小が自由自在。
  • 数値も自由に設定できる。
  • VOPでは使用できない。
  • カーブ形状のアニメーションが簡単にはできない。

Rampパラメータでは、細かいカーブが比較的作りづらいと思います。

 

実際の使用例(グリッドの変形)

○Expressionの場合

どちらの場合もPoint-Old SOPを使って、Spareパラメーターを作ってそれを参照します。

同じような形状になるように設定しています。

  • Rampを使う

Rampパラメータを作って、chramp()で参照します。

Rampの場合は、先程の比較にもあった通り、数値の範囲を0~1にする必要があるので、Expressionの方で整形しています。

  • チャンネルカーブとchf()を使う

floatパラメータを作り、キーフレームでチャンネルカーブを作って、chf()で参照します。

横軸がフレーム値になるので、それを計算してchf()を設定します。

この例では、$BBXの0~1を100倍することでフレーム0~100を参照するように設定しています。

 

○Wrangleの場合

先程の例と、同じような形状になるように設定しています。

  • Rampを使う

Rampパラメータを作ってchramp()で参照します。

以下は、こちらの例のWrangleのVEXスニペット文です。

vector BBOX = relbbox(0,@P); // バウンディングボックスの計算
@P.y=chramp("ramp",BBOX.x)-0.5; // Rampパラメータ"ramp"を参照してY座標に設定

 

  • チャンネルカーブとchを使う

floatパラメータを作ってキーフレームでチャンネルカーブを作ってch()で参照します。

VEXにはchf()が無く、別時間の値を参照する関数はch()になります。

また、chf()がフレーム参照なのに対してchは秒になるので注意が必要です。

以下は、こちらの例のWrangleのVEXスニペット文です。

vector BBOX = relbbox(0,@P); // バウンディングボックスの計算
@P.y=ch("ramp",(BBOX.x*100-1)/$FPS); // chでFloatパラメータ"ramp"を参照してY座標に設定
// chはtimeで参照するので/$FPSすることでフレームを秒に変換してます

 

○VOPの場合

チャンネルを参照するVOPノードが無いため、ch、チャンネルカーブを使用することができません。

VOPの場合は、RampVOPでRampパラメータを使用する方法のみが使用可能となります。