VEXの概要


前回の記事まではHScriptの話をさせて頂いておりました。
この記事ではHoudiniのもうひとつのプログラミング言語、VEXについての簡単な紹介を行います。

VEXは、Renderman Shading Language (RSL)にヒントを得たHoudiniのシェーダ記述用言語です。
RSLと同じくC言語ベースで作成されたプログラミング言語となります。

シェーダ言語ということですので、基本的にはシェーダを開発するために作成されたプログラミング言語となります。
しかし、並列計算処理に特化しているという特徴から、現在ではジオメトリやチャネルの制御にも広く用いられています。

現在、主にVEXはシェーディング以外でも、Houdiniのこのような部分で利用されております。
・モデリング
・CHOP
・パーティクル
・コンポジット
・ファー

 

並列処理

VEXをシェーディング以外で利用する上で、一番重要なファクターとなるのが「並列処理」の概念です。

ここでは最初に並列処理についての紹介を行います。

並列処理とは簡単に言うと、本来ひとつの処理はひとつCPUコアで行われるのが原則ですが、
複数のCPUコアやGPUを用いて、ひとつの処理を分担して行えるようする手法、あるいはその処理そのもののことを指します。

また、ひとつのCPUは同時に複数の処理はできません。複数処理がある場合はひとつずつ実行する必要があるのですが、
これを、複数のCPUコアやGPUを用いて、複数の処理を同時に行うことも並列処理に該当します。

当然、並列処理を行うメリットとしては、処理速度をマシンのコア数分だけ向上させることが可能になることです。
※厳密にはメモリアクセス、分割配布処理、統合などのボトルネックが発生する関係で、線形上昇は見込めません。

しかし、通常、並列処理は複雑な処理系統を必要としますので、特別なライブラリなどを使わないと利用することができません。
それをプログラミング言語の機能を制限することにより、標準で並列処理を実行できるように設計されているのが、VEXとなります。

よって、C言語ライクとは紹介しておりますが、異なる点として、Houdiniで利用されるデータ構造が標準で利用できるほかに、
再起呼び出しなどの、C言語で実現可能な構文など(特にメモリに関連する処理)が一部利用不可となっております。

このネイティブな並列処理対応のおかげで、VEXは高速処理を売りにすることができており、
場合によっては、CやC++に匹敵する速度での処理も可能になります。

その他の特徴

  • アトリビュートへのアクセス
    VEXはアトリビュートへのアクセスがHScriptやPythonと比べると非常に容易です。
    HScriptやPythonではローカル変数としてマップされていないアトリビュートへのアクセスには関数を使う必要がありますが、
    VEXの場合@を使用して非常に簡単にアクセスをすることができます。
  • ネットワークへのデータ授受のしやすさ
    上記に付随しますが、アトリビュートにネイティブに対応することにより、シームレスにノード間で情報授受が可能になります。
  • コンパイルSOPへの対応
    HScriptのエクスプレッションはコンパイルSOPによるコンパイルを行うことができません。
    しかし、VEXはこれに対応しております。
  • データ構造の簡素化
    VEXはCライクな言語ではありますが、配列や文字列などのデータ構造や処理は、Pythonを参考にしている部分が多く、
    これらの処理記述はC言語に比べてに非常に容易です。
  • 可読性の高さ
    1行で収まる簡単な処理の可読性はHScriptに軍配が上がりますが、
    上記の作用の影響で少し複雑なコードの際は、VEXの方が単純かつわかりやすいコードになりやすいです。
  • VOPの実装
    VEX Operatorの略となる、VEXのコードをノード化しているVOPというノードが存在します。
    プログラムに馴染みのない方でも、簡単にVEXをノードを使ってネットワークを構成することが可能です。詳しくはこちら

VEXの記法

VEXの記法はこのような形になります。

既にC言語などを学習されている方は、この記法がCに非常に近いことが、おわかりいただけるかと思います。

HScriptとは異なり、VEXでは基本的にこのような形で複数行のソースコード(スニペット)を記述するようになります。
この例では30行程度記述しております。HScriptが基本1行構成であるのと比べると、かなり長い文量を記述していくことになります。

とはいえ、最初からこのように書いていく必要はなく、簡単なVEXpressionから慣れていくのが良いのではないでしょうか。
次の記事ではこのようにガッツリ書くのではなく、HScriptのような短い構文をVEXpression上に記述する例について紹介します。