エクスプレッションは、ユーザーが書くスクリプトで、GPUコードにコンパイルされ、フィールドの合成やシェーダーのレンダリングなど、Eddyの内部操作の一部として実行することができます。E_ExpressionまたはE_ExpressionShaderを参照してください。
言語
エクスプレッションは、現在、EddyScriptまたはC++で書くことができます。
EddyScriptはPythonライクに記述できるコンパイラ言語で、GPU上で実行されます。(C++と比べると)コンパイルが非常に速く、インタラクティブな作業に適しています。スクリプトをリコンパイルする必要があるパラメータをスクラブする場合でも、通常、インタラクティブに行っているように感じます。Pythonに似ているとはいえ、理解していただきたい重要な相違点があり、そちらについては、こちらのドキュメントにまとめられています。
C++スクリプトは、大部分が標準C++であり、すでにC++の経験がある場合は望ましい選択かもしれません。しかし、コンパイルが遅くなり(通常は約0.5秒)、インタラクティブな作業ではあまり反応がよいとはいえません。
パラメータ
エクスプレッションは、ノード上にノブとして表示される入力パラメータを持つことができます。これはアニメーションさせたり、他のフィールドからエクスプレッションノードに接続させたり、スクリプトからサンプリングすることができます。
使用可能なパラメータを追加または修正するには、「Edit parameters」ボタンを押します。
Expressionパラメータ編集ダイアログ |
---|
パラメータの追加や修正は、「Add」および「Remove」ボタンで実行することができます。また、パラメータをドラッグすることで希望する順序へ並び替えることができます。
- Name: これは、パラメータがスクリプト関数で表示されるときの名前です。従って、それは有効な識別子 (文字または下線で始まり、文字、数字、下線のみを含む)である必要があります。
- Type: パラメータのタイプです。Float、IntまたはV3fのパラメータは、ノードでノブとして表示され、Fieldパラメータは、フィールドを接続することができるノード上のインプットとして表示されます。
- Display name: これは、パラメータがUI上で表示されるときの名前です。これが指定されていない場合、スクリプト名が使用されます。
- Tooltip: これは、UIに表示されるオプションのツールチップです。
スクリプトアクセス
スクリプトからシンプルなパラメータを参照するには、「settings.parameter_name」または「node.parameter_name」を使用します。
スクリプトから入力フィールドをサンプリングするには、フィールドをサンプリングする位置で「fields.parameter_name(position)」を使用します。戻り値の型は、入力されたフィールドの型に応じて、floatまたはvectorのいずれかになります。
ご注意
デコレータ
EddyScriptエクスプレッションは、オプションでデコレータを使用し、必要とする入力パラメータを指定することができます。スクリプト自体にパラメータの作成に必要な情報が含まれているため、エクスプレッションのスクリプトを共有する場合などに便利です。
ご注意
フィールドエクスプレッションに対する構文の例は以下のとおりです。
@eddyscript.expression(fields=['source:Float'], settings=['scale:Float:1.0', 'direction:Float3:[0.0, 0.0, 1.0]'])
シェーダーエクスプレッションに対する構文の例は以下のとおりです。
@eddyscript.shader(fields=['density:Float', 'temperature:Float'], settings=['absorption_colour:Float3:[1.0, 1.0, 1.0]', 'scattering_colour:Float3:[1.0, 1.0, 1.0]'])
それぞれのフィールドパラメータは、「name:Type」というフォーマットを持つ文字列で構成する必要があります。ここでのTypeは、スカラーフィールドの場合は「Float」、ベクトルフィールドの場合は「Float3」のいずれかです。それぞれの標準パラメータは「name:Type:Default」のフォーマットでなければなりません。ここでのTypeは、「Float」、「Float3」または「Int」です。