エクスプレッションは、ユーザーが書くスクリプトで、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のいずれかになります。
ご注意
パラメータを参照する「settings」, 「fields」, および「node」の設定は、お互いに完全に代替することができますが、フィールドパラメータを参照する場合に「fields」を使用すると、スクリプトを読みやすくし、理解しやすくするのに役立ちます。
デコレータ
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」です。