ilrLuaNode で、Lua スクリプトを使用したカスタム シェーダを使用できます。
Lua ノードは Lua 言語で記述されたスクリプト ファイルを入力として取り、各フラグメントに対してそれを実行します。Lua 言語のプログラミングに関する参考資料は、http://www.lua.org にあります。
Lua ノードを出力シェーダとして使用できます。これは、Lua ノードを Turtle レンダー グローバルの出力シェーダに接続することで行います。その後、出力シェーダ バックエンド ノードをいずれかの Lua 入力に接続できます。遅延シェーディングや出力イメージのレベルの調整などに使用できます。Lua ノードがシェーダに接続されていない場合、入力内容を除いたライトやフラグメントの情報などのインプリシット データは利用できないことに注意してください。
注: Lua の配列とベクトルのインデックス付けは 1 から始まります。
LUA アトリビュート
- スクリプト ファイル(Script File)
-
このフィールドは、Lua スクリプトのソース ファイルを指定します。プロジェクトに相対的にするために nn というプリフィックスを付けることができます。たとえば、nnturtlenscriptsnphong.lua はプロジェクト フォルダの turtle 部分に置かれているスクリプトを指定します。
- 入力 1 ~ 5 (Input 1-5)
-
別のシェーディング ノードに接続できるカラー入力です。Lua スクリプトからアクセスできます。
- 出力 1 (output1)
-
Lua スクリプトの結果です。
Lua の Turtle 拡張機能
データ タイプ:
- vec3: 3 つの float 値のベクトルです。関数 vec3(x,y,z) で構成できます。
インプリシット データを取得するための関数:
- vec3 getPoint(): フラグメントのワールド空間交差ポイントを返します。
- vec3 getNormal(): フラグメントの法線を返します。
- vec3 getTangentU(): フラグメントの接線を返します。
- vec3 getTangentV(): フラグメントの二重接線を返します。
- vec3 getViewDir(): ワールド空間の視点にフラグメントのベクトルを返します。
- vec3 getUV(): フラグメントのテクスチャ座標を返します。vec3 の最初の 2 つのコンポーネントを使用します。
- vec3 getdTdX(): テクスチャ空間のスクリーン スペース ピクセルの x 軸の投影を返します。vec3 の最初の 2 つのコンポーネントを使用します。
- vec3 getdTdY(): テクスチャ空間のスクリーン スペース ピクセルの y 軸の投影を返します。vec3 の最初の 2 つのコンポーネントを使用します。
- float getT(): レイの原点から現在のフラグメントまでの距離を返します。
- vec3 getInput(i):Lua ノードからの i:th 入力を返します。これは 1 から 5 にインデックス付けされます。
ライティング用の関数:
- int getLights(): シーン内のライトの数を返します。
- bool getLightName(i): ライトの名前を返します。
- vec3 getLightDir(i): ワールド空間での i:th ライトからフラグメントへの方向を返します。
- float getLightDist(i): ワールド空間での i:th ライトからフラグメントまでの距離を返します。
- vec3 getLightCol(i): i:th ライトのカラーを返します。
- vec3 getLightColUnshadowed(i): シャドウを考慮せず、i:th ライトのカラーを返します。
- bool getLightAmb(i): ライトがアンビエントの場合に true を返します。
- bool getLightCastShadows(i): ライトがシャドウを投影する場合に true を返します。
レイ トレーシング用の関数:
- vec3 shootRay(vec3 o, vec3 d): シェーディング付きで、原点が o、方向が d のレイを放出します。交点のカラーを返します。
- float shootOccRay(vec3 o, vec3 d, [float tmax]): シェーディングなしで、原点が o、方向が d のレイを放出します。最も近い交点までの距離、または交点が見つからない場合には 1.0f を返します。必要な場合には、tmax で交点までの最大距離を指定できます。オクルージョン レイはオクルーダの透明度を無視します。
ユーティリティ関数:
- float length(vec3): ベクトルの長さを返します。
- float smoothstep(min, max, x): smoothstep 関数を返します。
- float step(min, max, x): step 関数を返します。
- float dot3(vec3 x, vec3 y): スカラー積 x.y を返します。
- vec3 cross3(vec3 x, vec3 y): 乗積 x x y を返します。
- float add3(vec3 x, y): x+y を返します。y は浮動小数または vec3 です。
- float sub3(vec3 x, y): x-y を返します。y は浮動小数または vec3 です。
- float neg3(vec3 x): -x を返します。x は vec3 です。
- float mul3(vec3 x, y): x*y を返します。y は浮動小数または vec3 です。y が vec3 の場合、乗算は要素ごとに実行されます。
- float div3(vec3 x, float y): x/y を返します。
- vec3 reflect(vec3 v, vec3 normal): 法線の周囲で反射された v を返します。
- vec3 refract(vec3 v, vec3 normal, float inIor, float outIor): 法線の周囲で屈折された v を返します。inIor はレイが出て行くマテリアルの屈折のインデックスで、outIor はレイが入るマテリアルの屈折のインデックスです。
- vec3 normalize(vec3 v): 正規化された v を返します。
vec3 の演算:
- +: add3 の別名です。
- - (2 項): sub3 の別名です。
- - (単項): neg3 の別名です。
- *: mul3 の別名です。
- /: div3 の別名です。
- [i]: vec3 の i:th コンポーネントを返します。