Render Pass ノードのプロパティをバインドする¶
以下の手順では、Render Pass ノードのプロパティをバインドして、あるプロパティの値で別のプロパティを制御する方法を示します。
Prism グラフの概要については、Prism グラフ を参照してください。
リソースプロパティのバインディング¶
リソースプロパティのバインディングは、同じタイプの 2 つのリソースプロパティの間に直接描画されるラインです。バインディングを作成するには、あるノードのソースプロパティから別のノードのターゲットプロパティへドラッグします。
例: レイトレーシングシャドウのために Build Acceleration Structure を Draw Objects に接続する¶
この例では、既存のレイトレーシングシャドウのシーンを Prism グラフとして再構築します。元のシーンでは、手動のレンダーパス設定を使用してトップレベルのアクセラレーション構造を生成し、それを使用する描画パスに渡しています。Prism グラフでは、同じ依存関係を 2 つのリソースプロパティ間のバインディングラインとして表現します。
レイトレーシングシャドウのために Build Acceleration Structure を Draw Objects に接続するには、以下の手順を実行します。
Kanzi Studio Quick Start ウィンドウで Projects をクリックし、Examples タブを選択します。Raytracing の例をまだダウンロードしていない場合は、その横にある
をクリックします。
Kanzi Studio は、例を
<KanziWorkspace>/Examples/Raytracingディレクトリにダウンロードします。元のプロジェクトを変更せずに保持するため、
<KanziWorkspace>/Examples/Raytracingフォルダを新しい場所にコピーします。コピーしたプロジェクトから
Raytracing.proj.kzmを開き、Preview にレイトレーシングシャドウが表示されていることを確認します。
Library で Rendering > Prism Graphs に移動します。Prism Graphs を右クリックし、Create > Empty Prism Graph を選択します。名前を
Raytracing Prism Graphにします。
シーンをレンダリングする Viewport 2D を選択します。Properties パネルで、Render Pass Prefab を新しい Prism グラフに設定します。グラフが完成するまで、ビューポートはレンダリングを停止します。
Library で Prism グラフをダブルクリックして開きます。グラフの Prism エディタが開き、Output ノードのみがある初期の空の状態が表示されます。
メインのレンダリングノードを追加します。グラフ内を右クリックして、以下を追加します。
Gather Lights レンダーパスノード。
Draw Objects レンダーパスノード。
Gather Lights を Draw Objects に接続し、Draw Objects を Output ノードに接続します。
これで Preview にはシーンのライティングの下でシーンオブジェクトがレンダリングされますが、レイトレーシングによるシャドウはまだ表示されません。次のステップでは、Draw Objects がこれらのシャドウをレンダリングするのに必要なアクセラレーション構造を追加してバインドします。
Draw Objects ノードで
をクリックして Add Properties ウィンドウを開きます。検索ボックスに topLevelASと入力して、Material Properties の下にあるこのプロパティを見つけます。
topLevelAS をダブルクリックして追加します。プロパティが Available Properties から Existing Properties に移動します。
Add Properties ウィンドウを閉じます。
グラフ内を右クリックして、Build Acceleration Structure レンダーパスノードを追加します。このノードはレンダリングされたイメージではなくアクセラレーション構造を生成するため、フレームバッファソケットがありません。このノードは他のノードに接続しないでください。このノードは、次のステップで追加するバインディングラインを通じてその利用側に到達します。
Build Acceleration Structure ノードの OutputAccelerationStructure プロパティから Draw Objects ノードの topLevelAS プロパティへ、バインディングラインをドラッグします。
これにより、2 つのプロパティ間にリソースプロパティバインディングが作成されます。このバインディングは OutputAccelerationStructure の値を topLevelAS にコピーするため、描画パスはビルドパスが生成したアクセラレーション構造を使用します。
Preview に再びレイトレーシングによるシャドウがレンダリングされることを確認します。このバインディングにより、Build Acceleration Structure が生成したアクセラレーション構造が Draw Objects に渡されます。
例:Decode を使用してオフスクリーンフレームバッファを Blit Render Pass にバインドする¶
この例では、Decode アダプターノードを使用してリソースプロパティバインディングを作成します。
一部の Prism ノードは、Decode アダプターノードを通じてバインド可能なリソースプロパティを公開します。Render Pass ノード以外のノードのオフスクリーンフレームバッファ出力から別のリソースプロパティにバインドするには、Decode が必要です。Decode はフレームバッファのアタッチメントを名前付きのテクスチャプロパティ(ResultTexture0、ResultDepthTexture)として提供し、Render Pass ノードのプロパティはそれらにバインドできます。
Decode を使用してオフスクリーンフレームバッファを Blit Render Pass にバインドするには:
プロジェクトで Scene を右クリックして Create > Box を選択し、シーンに Box を追加して、グラフにレンダリングする対象を用意します。
Library で Rendering > Prism Graphs に移動します。Prism Graphs を右クリックし、Create > Empty Prism Graph を選択します。名前を
Decode Bridge Prism Graphにします。シーンをレンダリングする Viewport 2D を選択します。Properties パネルで、Render Pass Prefab を新しい Prism グラフに設定します。
Library で Prism グラフをダブルクリックして開きます。
フレームバッファをレンダリングするノードを追加します。グラフ内を右クリックして、以下を追加します。
Offscreen Framebuffer ノード。
Clear ノード。
Draw ノード。
Offscreen Framebuffer を Clear に接続し、Clear を Draw に接続します。
続いて Render Pass ノードを追加します。以下を追加します。
Decode アダプターノード。上流のフレームバッファの内容を名前付きのテクスチャプロパティとして公開します。
Blit Render Pass ノード。
Draw を Decode に接続します。次に Blit を Output ノードに接続します。Decode には出力ソケットがないため、ノードソケットを介して Blit に接続することはできません。Decode から Blit への接続は、次のステップでバインディングラインを使用して行います。
Blit ノードで
をクリックして Add Properties ウィンドウを開きます。検索ボックスに Texture 0と入力し、プロパティをダブルクリックして追加します。Add Properties ウィンドウを閉じます。Decode ノードの ResultTexture0 プロパティから Blit ノードの Texture 0 プロパティへバインディングラインをドラッグします。
これによりリソースプロパティのバインディングが作成されます。ResultTexture0 の値が Texture 0 にコピーされ、上流のノードがオフスクリーンフレームバッファにレンダリングしたテクスチャを Blit レンダーパスが使用します。
Confirm the Preview renders the box composited through the Blit Render Pass. The upstream nodes render the box into the offscreen framebuffer; Decode exposes that framebuffer as ResultTexture0; the binding hands the texture to Blit, which composites it to the Output.
ヒント
この例では、Draw ノードの出力コネクタから Blit の Texture 0 プロパティへ直接ドラッグすると、Decode ノードの挿入とバインディングの作成が 1 回の操作で行われます。
テキストによるプロパティのバインディング¶
テキストによるプロパティのバインディングは、バインディング式から非リソースプロパティを駆動します。非リソースプロパティとは、数値、ブール値、カラー、ベクトルなどの値です。エディタで直接設定する値ではなく、Kanzi のバインディング式からプロパティの値を取得したい場合は、テキストバインディングを使用します。直接設定する値とは異なり、バインディング式には算術演算、関数呼び出し、他のプロパティへの参照を含めることができます。式の構文については、バインディング式リファレンス を参照してください。
例: バインディング式から Prism グラフの背景色を設定する¶
この例では、前の例で使用した Raytracing サンプルプロジェクトを再利用します。バインディング式で計算したカラーで画面をクリアし、その上にシーンを描画する小さな Prism グラフを作成します。同じパターンを使用して、Render Pass ノードの任意の非リソースプロパティをバインディング式から駆動できます。
バインディング式から Prism グラフの背景色を設定するには、以下の手順に従います。
まだ開いていない場合は、Raytracing サンプルのコピーから
Raytracing.proj.kzmを開きます。例: Build Acceleration Structure を Draw Objects に接続してレイトレーシングによるシャドウを作成する の手順 1 から 3 を参照してください。ライブラリ (Library) で レンダリング (Rendering) > Prism Graphs に移動します。Prism Graphs を右クリックし、クリエイト (Create) > Empty Prism Graph を選択します。名前を
Background Color Prism Graphにします。シーンをレンダリングする Viewport 2D を選択します。プロパティ (Properties) パネルで、Render Pass Prefab を新しいグラフに設定します。グラフが完成するまで、ビューポートはレンダリングを停止します。
Library で Prism グラフをダブルクリックして開きます。
グラフ内を右クリックし、Clear 基本ノードと ドローオブジェクト (Draw Objects) Render Pass ノードを追加します。Clear を ドローオブジェクト (Draw Objects) に、ドローオブジェクト (Draw Objects) を Output ノードに接続します。
Clear ノードで
をクリックして Add Properties ウィンドウを開きます。検索ボックスに Clear Color 0と入力します。Available Properties で Clear Color 0 をダブルクリックして追加します。Add Properties ウィンドウを閉じます。プレビュー (Preview) に、デフォルトの黒のクリアカラー上でシーンがレンダリングされます。
Clear ノードの Prism プロパティペインで Clear Color 0 の行を右クリックし、Edit binding... を選択します。
Kanzi Studio は、Clear Color 0 をバインディングのターゲットとして、フローティングウィンドウでバインディングエディタを開きます。
バインディングエディタの式フィールドに、次のように入力します。
Color4(0.1, 0.1, 0.3, 1.0)
Save をクリックします。エディタが閉じます。プレビュー (Preview) に、濃い青の背景上のシーンが表示されます。Clear Color 0 の行では、ラベルにバインディングインジケーターが表示され、値エディタの代わりに式の読み取り専用プレビューが表示されます。
バインディングエディタを再度開き、式を現在の式をスケールする式に置き換えます。
Color4(0.1, 0.1, 0.3, 1.0) * 2
保存します。背景が明るくなります。行のプレビューが更新され、新しい式が表示されます。
バインディングを削除して直接編集可能な値に戻すには、行を右クリックし、Clear binding を選択します。
式を解析できない場合、インラインプレビューが赤色になります。Edit binding... を再度開いて式を修正してください。
ヒント
ある Prism プロパティ行のディスプレイネームから、別の非リソースプロパティ行へドラッグして、テキストバインディングを開始することもできます。バインディングエディタが開き、ソース行のプロパティを参照する式があらかじめ入力されています。