HScriptで簡単なエクスプレッションを作成する


この記事ではHScriptを使って簡単なエクスプレッションを作成する方法について紹介します。
HScriptの概要についてはこちらの記事を、エクスプレッションについてはこちらの記事をご参照下さい。

HScriptでのパラメータの設定の仕方ですが、
エクスプレッションはパラメータエディタの各パラメ-タの項目に直接記載することが可能です。
ここからは、実際にラバートイを動かしながら、ご紹介をしていこうと思います。

まっすぐ進ませる

最初に等速直線運動をするようなアニメーションを作成します。

パラメータTranslate Zの箇所に$F*0.1と記述します。

キーフレームのない状態でエクスプレッションを入力すると、1フレーム目の時にパラメータが緑色になります。

このように設定することで、以下のような等速直線運動を作成できます。

この”$F” というのはフレーム数を表す変数というものです。
変数とは、フレーム数のような「情報」を$文字列の形式で呼び出せるようにしたもので、パラメータ上で利用することができます。
また、数値だけではなく、文字列も定義することができます。hipファイルのパスを示す文字列である、$HIPなども変数の一種です。

*” は乗算を意味します。ここではフレーム数の値に0.1を乗算している状態になりますので、
パラメータの値はフレーム数によって、以下のように変化します。

エクスプレッションによって、フレームが進むごとにTransalte Zの値が増大しております。

 

蛇行させる

次に蛇行をさせてみます。Transalte Xsin($F*10)*0.5と入力します。

このように入力することで、左右に蛇行しながら動くようになります。

ここでは、関数というものを利用しています。
関数とは、簡単に言うと数学的な処理の固まりのことで、HScriptでは”文字列()“の形式で定義されています。
難しく説明すると、以下のような定義をすることができます。
「ふたつの集合が与えられた際に、ひとつの集合の各要素に対して、もうひとつの集合の特定の要素を対応づけること」

HScriptの関数は、特定の入力の数値を入れることで、何らかの出力を出してくれます。
この「入力の数値」というのが、()の中の数値のことで、一般的にはこれを「引数」と呼びます。
また出力値は関数の文字列そのものであり、Houdiniは、sin(0)という文字列を0と認識し、sin(90)という文字列を1と認識します。

今回はsin()関数を利用しています。sinとは、高校数学で出てくる三角関数のsinのことになります。

sin(0)が0、sin(30)が1/2 、sin(45)が1/√2、sin(60)が√3/2、そしてsin(90)が1。このような暗記をされた方も多いのではないでしょうか。
「角度」の数値を引数として入力することによって、それに該当する三角関数sinの値を出力してくれます。

では、これが今回の例のような、sin($F)ではどうなるでしょうか。
横軸が$F、縦軸をとsin($F)にした時のグラフがこのようになります。

$Fはフレーム数なので、フレームが動くについて値が変わり、このような波のようなグラフが出力されていることがわかります。
これがsin()関数の出力となり、Translate Xの値となります。
そして、この画像は皆さんにお馴染みの画像かと思います。これは、HoudiniのAnimation Editorですね。

このようにX軸を時間(フレーム数)、Y軸をパラメータの値と考えることで、数学で培った知識をHoudiniに転用することができます。
XY平面のグラフの数式を、そのままフレームごとのパラメータの値とすることができるのです。

因みに今回の例では、$F*10の部分で周波数を10倍にしたのと、0.5を乗算することで振幅を半分にするような調整を行っております。

この結果として、先ほどの動画のような蛇行するアニメーションをsin()関数を使って実現しております。

 

進む方向を向かせる

最後に進行方向を向くように調整してみます。Rotate Y cos($F*10)*25と入力します。

これで進行方向に向くようになりました。

今度はcos()関数を利用しています。
cosも三角関数のcosのことです。波形を見るとこんな感じで、ちょうどsinから波形が90度分進んでいるのがcosとなります。

青がcos波形、緑がsin波形です。
cosもsin同様、-1.0~+1.0の値を出力するものですが、それだとRotateには値が不足するので、振幅を25倍しております。

 

因みに、こちらのエクスプレッションでも、cos($F*10)*25と同様の結果になります。
cosはsinから位相が90度分進んでいるだけですので、sinの引数との値に、90足してあげることで、cosと同様の挙動となります。

 

キーフレームを併用する

エクスプレッションを作成した後に、キーフレームを打つことも可能です。

この例では、50フレームにキーを打ち、Translate (0,0,0.5)とし、Rotate Y $F-50という別のエクスプレッションを入力しています。

これにより50フレームから、(0,0,0.5)の座標で回転するような動きに変わるようなアニメーションを作成してます。