エクスプレッションとスクリプトについて


この記事ではHoudiniに用いられるエクスプレッションとスクリプトについて簡単な概要紹介を行います。
Houndini16.5対応版として投稿されている、こちらの記事も併せてお読みいただければと思います。


まずは、エクスプレッションとスクリプトについて、簡単な紹介をさせて頂きます。

そもそも、これらがなんの為にあるかということについてですが、目的は大きく分けると「高度化」「効率化」です。
Houdiniのノードベースの概念も、結局はこの「高度化」と「効率化」が目的ではあるわけですが、
エクスプレッションなどのスクリプトを用いた制御は、単純なノードべースをさらに上回る「高度化」と「効率化」を達成できます。
特にパラメータに利用するエクスプレッションの概念については、Houdiniに限らずCGソフトウェアでは必須の知識となるでしょう。

アーティストがよりクリエィティブな作業に集中できるようにするために、高度な処理や、繰り返しを行うような処理は、
記述できる分に関してはスクリプトを用いて簡潔に記述することも、ひとつのアプローチとして挙げられます。

この記事は、まず最初の段階として、エクスプレッション、及びスクリプトというものが何なのか、についての紹介の記事となります。

 

エクスプレッション

エクスプレッション(Expression)は日本語に直訳すると「表現」「語法」「式」となります。
ここでは「表現」よりも「語法」や「式」の意味で捉えた方が良いでしょう。

Houdiniで定義されるエクスプレッションは概念的なものです。
ノードのパラメータをただ単純な数値ではなく、様々な手法を用いて入力、定義する方法です。

そのさまざまな方法というのが「語法」や「式」に当たります。
Houdiniのエクスプレッションにおける「語法」や「式」には以下のようなものが考えられます。

    • 変数

      数学で出てくる、xやyのように特定の値を意味する記号のことです。
      変数についてはよく、「数字を入れる箱」という説明がされますが、
      Houdiniではファイルのパスを示す変数である[$HIP]や、現在のフレーム数を示す変数である[$F]等が例として挙げられます。
      また、変数は事前に定義されたものだけではなく、ユーザ側で自由に作成(定義)することも可能です。

    • 数式

      数学で利用されるような四則演算などの数式を利用することができます。
      上述した変数や下記の関数同士を計算して、その結果をパラメータ値として設定することが可能です。

    • 関数

      単純な計算だけでは作り出せない、複雑な処理のための計算が行える機能となります。
      sin,cosなどの三角関数やrandのようなランダムな値を出力する関数、四捨五入を行うround関数などがあり、
      こちらもユーザ側で自由に定義することが可能です。

       

    • 関係演算/論理演算/条件演算

      上記の「数式」とは算術演算のことを指します。それ以外にもHoudiniのエクスプレッションでは3種類の演算が利用できます。

       

    エクスプレッションとは、上記を利用することによって複雑にパラメータを制御することができるシステムとなっております。
    複雑なプログラムを書くのではなく、1行から数行で簡単に記述するのが一般的です。

     

    スクリプト

    スクリプト(Script)とはプログラミング言語の種類のことを指します。
    Houdini内部で利用できるプログラミング言語の、HScript, VEX, Pythonは実質的に全てスクリプトなのと、
    基本的にHoudiniのスクリプトはHoudiniの内部で実行されるので、特徴が見えにくいかと思いますが、
    スクリプトは各行ごとに逐次で実行が可能な言語の形式なのが特徴です。
    つまり記述したものが、即時に結果に反映されますので、プログラムの編集、変更が容易です。

    • HScript

      Houdini上で利用できる簡易的なスクリプト言語です。
      主にエクスプレッションで利用されます。

    • VEX

      元々Houdiniのシェーダを記述するために開発された言語です。並列計算に特化しており、
      その特徴を生かして特定のノード上でVEXpressionという形でエクスプレッションを記述することが可能です。
      因みにVEXは厳密にはスクリプトではないですが、Houdini UI 上ではスクリプトとして振る舞っています。

    • Python

      こちらはHoudini由来のスクリプトではありません。CG分野に限らず、一般的に広く利用されているプログラミング言語です。
      主にHoudiniのUIやシェルフなどを作成するときに使うスクリプトですが、エクスプレッションの記述にも使用できます。

    スクリプトでない形式のプログラミング言語は、そのままでは実行することができないので、
    実行前に実行できる形式に変換(コンパイル)する必要があります。
    ところがスクリプトは、事前にコンパイルを行うが必要ないので、シームレスにインタラクティブな開発が可能です。
    しかし、その分コードの処理速度はコンパイルを行う言語に比べると低速です。
    このような特徴から、一般的にスクリプトはプログラミング言語としては優しい部類に入ることが多いです。

     

    上記に説明した通り、エクスプレッションとスクリプトは完全に別の概念であり、
    両者の関係を簡潔に書くと、「Houdiniではスクリプトを用いてエクスプレッションを記述できる」となります。

    しかし、スクリプトはエクスプレッションを書くためのもの、という紹介も少し間違っておりまして、
    HScriptは現在エクスプレッションでしか利用が推奨されませんが、VEXとPythonは他にも幅広い用途で利用されております。

    本質的な捉え方は、Houdiniには内部でプログラムを記述することのできる、3種類のスクリプトが存在しており、
    その中で、ノードのパラメータをスクリプトで記載する方法が「エクスプレッション」、という先ほどと逆の捉え方になります。

     

    以上がエクスプレッションとスクリプトについての簡単な概要紹介となります。