Kanzi Studio レンダーパスプリセットを使用する¶
Kanzi アプリケーションで 3D コンテンツのレンダリングを定義するには、レンダーパスを使用します。
始めるために、Kanzi Studio には次のレンダーパスプリセットが付属しています。
Default Render Pass には、透過設定のないノードを最初にレンダリングし、次に透過設定のあるノードをレンダリングする基本的なレンダーパスのセットが含まれています。
Default Render Pass を使用する を参照してください。
Render to Texture Pass は、テクスチャにレンダリングすることを可能にするレンダーパスを含んでいます。テクスチャへのレンダリング (Rendering to texture) を参照してください。
Compose and Blit Pass は、特定のマテリアルを使用して、Composition Target Render Pass のレンダーパスまたはテクスチャを画面にブリットすることを可能にするレンダーパス構造を含んでいます。
コンポジションターゲットへのコンテンツのレンダリング を参照してください。
Image-Based Lighting Filter Pass には、リアルタイムのイメージベースドライティング用に、動的な Environment Ambient Texture および Environment Reflection Texture キューブマップテクスチャを作成できるレンダーパスが含まれています。
動的なイメージベースドライティング用のキューブマップのレンダリング を参照してください。
Default Render Pass を使用する¶
Default Render Pass プリセットを使用して、開始するために必要な基本的なレンダーパスセットを作成します。
Default Render Pass を使用するには:
Library > Rendering Alt を押しながら右クリック Render Pass Prefabs で Default Render Pass を選択します。
Kanzi Studio は、Library > Rendering 内で、透過設定のないノードを最初にレンダリングし、次に透過設定のあるノードをレンダリングするために必要なフィルタとレンダーパスを作成します。
Object Sources でこれらの Tag Filter フィルタ:
Opaque は、Transparent タグが付いていないノードを選択します。
Transparent は、Transparent タグを持つノードを選択します。
Render Pass Prefabs の Group Render Pass である Default Render Pass の中に:
Clear Render Pass は、現在のレンダーコンテキストのバッファの一部またはすべてをクリアします。
デフォルトで、Default Render Pass の Clear Render Pass は深度バッファをクリアします。
Gather Lights Render Pass は、Default Render Pass を使用するように設定した Viewport 2D ノード内の Light ノードを収集し、それらを子の Draw Objects Render Pass レンダーパスに渡します。
Draw Objects Render Pass という名前の Draw Objects Opaque は、Opaque フィルタによって選択されたノードをレンダリングします。
Draw Objects Render Pass は、特定のノードリストをレンダリングするために Camera ノードを設定し、それらのノードをフィルタリングし、フラスタムカリングを制御することができます。Draw Objects Render Pass はデフォルトで、最も近い先祖の Gather Lights Render Pass によって提供されるライトを使用してノードをレンダリングします。
Draw Objects Render Pass という名前の Draw Objects Transparent は、Transparent フィルタによって選択されたノードをレンダリングします。
Node Tree でレンダリングしたいコンテンツを持つ Viewport 2D ノードを選択し、Properties で Render Pass Prefab プロパティを作成した Default Render Pass に設定します。
Kanzi Studio は Viewport 2D ノードを Default Render Pass を使用してレンダリングします。
(オプション) あなたの Viewport 2D ノードが透明なノードを含む場合、Node Tree でノードを選択し、Properties の Tags プロパティの横にある Tags ボタンをクリックし、Transparent を選択します。
この方法で、Default Render Pass を設定して、最初に透明なノードをレンダリングし、その後不透明なノードをレンダリングします。
(オプション) Viewport 2D ノードの背景を設定するには、レンダリングしたいコンテンツを、作成した Default Render Pass で Clear Render Pass を選択し、Properties で Clear Color 0 プロパティを追加して設定します。
注釈
デフォルトレンダーパス (Default Render Pass) をダイナミックバッチング用に調整する場合は、オペイクメッシュとトランスパレントメッシュを別々のバッチに保ち、ダイナミックバッチングされるメッシュをレンダリングする Draw Objects Render Pass レンダーパスを、対応するダイナミックバッチング用のレンダーパスに置き換えてください。
ダイナミックバッチングの使用 を参照してください。
テクスチャへのレンダリング (Rendering to texture)¶
Render to Texture Pass プリセットを使用して、コンテンツをテクスチャにレンダリングするために必要なレンダーパスを作成します。
Render to Texture Pass を使用するには:
Library > Rendering Alt を押しながら右クリック Render Pass Prefabs で Render to Texture Pass を選択します。
Kanzi Studio は Library に作成します。
Materials and Textures > Textures における Render Target Texture
Rendering > Render Pass Prefabs において、Render Target Texture リソースに自身をレンダリングする Composition Target Render Pass である Render to Texture Pass があり、その中に:
Clear Render Pass は、現在のレンダーコンテキストのバッファの一部またはすべてをクリアします。
デフォルトで、Render to Texture Pass の Clear Render Pass は、最初のカラーバッファを透明な黒色でクリアし、デプスバッファを値1でクリアします。
Gather Lights Render Pass は、Render to Texture Pass を使用するように設定した Viewport 2D ノード内の Light ノードを収集し、それらを子の Draw Objects Render Pass レンダーパスに渡します。
Draw Objects Render Pass という名前の Draw Objects は、特定のノードリストをレンダリングするために Camera ノードを設定し、それらのノードをフィルタリングし、フラスタムカリングを制御することができます。Draw Objects Render Pass はデフォルトで、最も近い先祖の Gather Lights Render Pass によって提供されるライトを使用してノードをレンダリングします。デフォルトで、Draw Objects Render Pass はデフォルトの Camera ノードを使用して Viewport 2D ノード内のすべてのノードをレンダリングします。
Node Tree で、テクスチャにレンダリングしたいコンテンツを持つ Viewport 2D ノードを選択し、Properties で Render Pass Prefab プロパティを作成した Render to Texture Pass に設定します。
Kanzi Studio は Viewport 2D ノードを Render to Texture Pass を使用してレンダリングします。
最初のステップで作成した Render Target Texture を、前のステップで選択した Viewport 2D ノードのコンテンツを表示したいノードに適用します。
例:
Node Tree で、Alt を押しながら右クリック を選択し、Image を選択します。
Node Tree で、Image ノードを選択します。Properties で、Image プロパティを Image ノードに表示したい Render Target Texture に設定します。
動的なイメージベースドライティング用のキューブマップのレンダリング¶
Image-Based Lighting Filter Pass プリセットを使用して、リアルタイムのイメージベースドライティング用の動的なキューブマップテクスチャを作成します。このプリセットは、シーンのコンテンツをレンダリングするレンダーパスツリーの一部としてのみ使用でき、Viewport 2D ノードで直接使用することはできません。
Image-Based Lighting Filter Pass は、Cubemap Render Pass を使用して環境マップをキャプチャします。キューブマップ反射の作成 を参照してください。
動的なイメージベースドライティング用のキューブマップをレンダリングするには、
スカイボックスを作成します。
Library > Materials and Textures で、Alt を押しながら右クリック Material Types を行い、CubemapSkybox を選択します。
Kanzi Studio は、Library > Materials and Textures に CubemapSkybox マテリアルタイプと CubemapSkyboxMaterial を作成し、キューブマップテクスチャをスカイボックスとして表示することをサポートします。
スカイボックスに使用する HDR イメージをインポートします。イメージをインポートする際は、環境キューブマップテクスチャのみを作成するように Kanzi Studio を設定します。
最良の結果を得るには、R16G16B16A16_SFLOAT などのハイダイナミックレンジ (HDR) ピクセルフォーマットを使用してください。
Library で、CubemapSkyboxMaterial マテリアルを選択します。Properties で、TextureCube プロパティをインポートしたキューブマップテクスチャに設定します。
Box または Sphere ノードを作成し、スカイボックスをレンダリングするために使用します。Properties で、次を設定します。
Mesh Material から CubemapSkyboxMaterial へ
ノードのサイズは、内部に表示したいコンテンツが収まるように十分に大きくしてください。
Box の場合、Width、Height、および Depth プロパティを設定します。
Sphere の場合、Radius プロパティを設定します。
Generate Mesh Inside Out を有効にする
このプロパティが有効になると、Kanzi はメッシュ内にキューブマップテクスチャをレンダリングします。
イメージベースドライティングで動的な反射を表示したいコンテンツを作成します。
Library > Materials and Textures で、Alt を押しながら右クリック Material Types を行い、PhysicallyBased を選択します。
Kanzi Studio は Library > Materials and Textures に PhysicallyBased マテリアルタイプと PhysicallyBasedMaterial を作成します。
Library > Materials and Textures > Material Types で PhysicallyBased を選択し、Ctrl D を押します。
マテリアルタイプを複製するのは、後で、環境内を移動し、その反射を動的に表示したいコンテンツに、同じマテリアルタイプのバリエーションを使用するためです。
複製したコンテンツの名前を変更します。
マテリアルタイプを PhysicallyBased Image-Based Lighting に
マテリアルを PhysicallyBased Image-Based Lighting Material に
反射を表示したいノードを作成します。
例えば、Sphere ノードを作成します。Properties で、以下を追加して設定します。
Mesh Material を PhysicallyBased Image-Based Lighting Material に
Material > Roughness Factor を 0.2 に
環境とコンテンツをレンダリングするレンダーパスツリーを作成します。
Library > Rendering で、Alt を押しながら右クリック Render Pass Prefabs を行い、Group Render Pass を選択します。
Group Render Pass に以下を作成します。
Cubemap Render Pass
Default Render Pass
Node Tree で Viewport 2D ノードを選択します。Properties で Render Pass Prefab を Group Render Pass に設定します。
Cubemap Render Pass を調整します。
Node Tree で Scene に Alt を押しながら右クリック を行い、Camera を選択して Cubemap Render Pass Camera と名付けます。
このカメラは Cubemap Render Pass でのみ使用します。
Cubemap Render Pass で以下を設定します。
Override Camera をキューブマップレンダーパスのカメラに
Resolution を 256 に
値が大きいほど、レンダリング品質が高くなります。
Pixel Format を R16G16B16A16_FLOAT に
Mipmap Mode を Linear に
Nearest ではピクセル化した結果になるため、Linear を使用します。
Cubemap Render Pass で以下を行います。
Clear Render Pass を作成し、Clear Color 0 プロパティを追加します。
Gather Lights Render Pass を作成し、その下に Draw Objects Render Pass を作成します。
Cubemap Render Pass でレンダリングするコンテンツを選択します。
Node Tree で、スカイボックスに使用する Box を選択します。Properties で Tag を CubemapContent に設定します。
Library > Rendering Alt を押しながら右クリック Object Sources で、Tag Filter を選択し、Cubemap Content と名付けます。
Properties で Included Tags を CubemapContent タグに設定します。
Draw Objects Render Pass で、Object Source プロパティを Cubemap Content タグフィルタに設定します。
Image-Based Lighting Filter Pass を作成して調整します。
Library > Rendering Alt を押しながら右クリック Render Pass Prefabs で Image-Based Lighting Filter Pass を選択します。
Kanzi Studio は Library に作成します。
Materials and Textures > Textures における以下の Cubemap Render Target Textures
拡散照明用の放射照度テクスチャとしての Environment Ambient Texture
反射照明用の反射テクスチャとしての Environment Reflection Texture
Physically-Based Rendering マテリアルを使用するプロジェクトで、生成されたキューブマップテクスチャを使用する方法については、イメージベースドライティングのキューブマップテクスチャの使用 を参照してください。
Rendering > Render Pass Prefabs に、Image-Based Lighting Filter Pass という名前の Group Render Pass があり、以下のレンダーパスが含まれています。
- Environment Ambient Kernel Pass という名前の Composition Target Render Pass は、2D ルックアップテクスチャを作成し、そこにレンダリングします。このパスは起動時に一度だけ実行されます。その結果は Environment Ambient Texture Filter Pass で使用されます。
Generate Environment Ambient Kernel Pass という名前の Blit Render Pass は、2D ルックアップテクスチャをレンダリングします。
- Environment Reflection Kernel Pass という名前の Composition Target Render Pass は、2D ルックアップテクスチャをレンダリングします。このパスは起動時に一度だけ実行されます。その結果は Environment Reflection Texture Filter Pass で使用されます。
Generate Environment Reflection Kernel Pass という名前の Blit Render Pass は、2D ルックアップテクスチャをレンダリングします。
- Environment Ambient Texture Filter Pass という名前の Cubemap Target Render Pass は、Environment Ambient Texture キューブマップテクスチャにレンダリングします。
Filter Pass という名前の Blit Render Pass は、最終的な Environment Ambient Texture をレンダリングします。
- Environment Reflection Texture Filter Pass という名前の Cubemap Target Render Pass は、Environment Reflection Texture キューブマップテクスチャにレンダリングし、ミップマップマテリアルを使用して、さまざまなラフネス値をプリフィルタリングされたミップマップとしてレンダリングします。
Blit Base Level Pass という名前の Blit Render Pass は、Environment Reflection Texture のベースミップマップレベルをレンダリングします。
Image-Based Lighting Filter Pass を Group Render Pass にドラッグし、Cubemap Render Pass と Default Render Pass の間に配置します。
Image-Based Lighting Filter Pass のインスタンスを選択し、Properties で Add Binding をクリックし、Binding Editor で以下を行います。
Property を Image-Based Lighting Render Pass の Cubemap Render Pass Result Texture プロパティに設定します。
Library > Rendering > Render Pass Prefabs で Cubemap Render Pass を選択し、Properties から Result Texture を Binding Editor にドラッグして、Expression エディタにドロップします。
Save をクリックします。
Library > Materials and Textures > Material Types で、PhysicallyBased Image-Based Lighting マテリアルタイプを選択します。Properties の Preprocessor Defines で KANZI_SHADER_USE_LIGHT_IMAGE_BASED キーを 1 に設定し、Sync with Uniforms をクリックします。
Node Tree で Scene ノードを選択します。Properties で追加して設定します。
Material > Environment Ambient Texture を Environment Ambient Render Target Texture に
Material > Environment Reflection Texture を Environment Reflection Render Target Texture に
Image-Based Lighting Filter Pass は、これらのテクスチャを作成し、動的に更新します。
動的に反射させたいコンテンツを追加します。
例:
Node Tree で、Sphere を含む Empty Node 3D を作成します。
Empty Node 3D を選択し、Properties で追加して設定します。
Tag を CubemapContent に
Render Transformation の Translation X を 3 に
これにより、Kanzi はこのノードとその子ノードを環境の一部としてレンダリングし、ノードを反射面から離れた位置に移動させます。
Sphere を選択し、Properties で Mesh Material を PhysicallyBasedMaterial に設定します。
Library > Materials and Textures > Materials で、PhysicallyBasedMaterial を選択します。Properties で設定します。
Base Color Factor を白に
Emissive Factor を白かつ高い強度に
Library > Materials and Textures > Material Types で、PhysicallyBased を選択します。Properties で KANZI_SHADER_TONEMAP_REINHARD を無効にし、Sync with Uniforms をクリックします。
これにより、トーンマッピングを無効にします。
反射の品質を変更するには、Ambient Sample Count を設定して Environment Ambient Texture を調整します。これにより、そのキューブマップテクスチャの解像度を調整します。解像度を下げると品質は低下しますが、パフォーマンスが向上する場合があります。
Image-Based Lighting Filter Pass で Reflection Sample Count Minimum と Reflection Sample Count Maximum を追加して設定します。サンプル数を増やすと品質は向上しますが、パフォーマンスは低下します。
例えば、両方のプロパティを 1024 に設定します。
以下のプロパティは Environment Reflection Texture のサンプル数を制御します。
Reflection Sample Count Minimum は、ベースレベルの次の最初のミップマップレベルのサンプル数です。このレベルは関連付けられたラフネスが低いため、必要なサンプル数が最も少なくなります。
Reflection Sample Count Progression は、Reflection Sample Count Minimum からサンプル数がどのように増加するかを制御します。ベースレベルの次の最初のミップマップレベル以降の各ミップマップレベルでは、この値に \(2^{mipmap - 1} - 1\) を掛けた分だけサンプル数が増加します。
Reflection Sample Count Maximum は、サンプル数の増加をこの値までに制限します。
例えば、最小値、増加量、最大値がそれぞれ 32、32、128 の場合、サンプル数は以下のようになります。
ベースレベルの次の最初のミップマップレベルは 32
2 番目のミップマップレベルは 64
3 番目のミップマップレベルは 128
4 番目のミップマップレベルは 128
4 番目のミップマップレベル以降、サンプル数は増加しません。
反射させるために作成したオブジェクトを移動すると、その反射も合わせて移動します。