キューブマップ反射の作成

Cubemap レンダーパスを使用して、3D ノードの表面に周囲環境の動的な反射を作成します。

../../_images/cubemap-render-pass.svg

Cubemap レンダーパスは、リフレクションプローブとして機能する特定の Camera ノードを使用します。この Camera ノードは、表面に周囲環境を反射させたいメッシュを表示するノード群の中心に配置します。

Cubemap レンダーパスは、自身とその子レンダーパスを、Cubemap Render Target Texture や Cubemap レンダーパスの Result Texture などのアクティブなコンポジションターゲットにレンダリングします。

ノードの表面に環境を反映させるには、これらのノードが使用するマテリアルのキューブマップテクスチャとしてキューブマップコンポジションターゲットを設定します。

各 Scene ノードには、1つのリフレクションプローブを持つことができます。

../../_images/preview-cubemap-reflections.gif

Cubemap レンダーパスを使用したキューブマップリフレクションの作成

キューブマップ反射を作成するには:

  1. Kanzi Studio プロジェクトの Scene ノードで、以下を作成します。

    • 環境を反映させたいメッシュを表示するノード。

      例えば、ボディ、窓、ヘッドライト、リムが環境を反映する車を作成します。

    • 反映させたいノードを取り巻く環境。

      例えば、Box ノードを作成し、キューブマップテクスチャをスカイボックスとして使用します。キューブマップテクスチャをスカイボックスとして使用する を参照してください。

    ../../_images/cubemap-reflections-scene-graph.png ../../_images/cubemap-reflections-start.png
  2. 環境を反映させたい各ノードについて:

    1. Node Tree で、そのノードを選択します。

    2. マテリアルの隣にある Properties で、image0 をクリックしてそのマテリアルに移動し、Material Type プロパティをキューブマップ反射をサポートするマテリアルタイプに設定します。

    例えば、VertexPhongTexturedCube マテリアルタイプを使用します。プロジェクトに VertexPhongTexturedCube マテリアルタイプが含まれていない場合は、Library > Materials and Textures Alt を押しながら右クリック Material Types で、VertexPhongTexturedCube を選択します。

    Kanzi のデフォルトのマテリアルタイプをキューブマップ反射をサポートするように設定するには:

    1. Library で、そのマテリアルタイプを選択します。

    2. Properties の Preprocessor Definitions で、KANZI_SHADER_USE_REFLECTION_CUBE を 1 に設定します。

    ../../_images/carbody-in-project.png ../../_images/navigate-to-carmainbody-material.png ../../_images/carmainbody-material-type.png ../../_images/kanzi_shader_use_reflection_cube-enabled.png
  3. Scene ノード内のすべてのノードをレンダリングします。

    1. Library > Rendering で Alt を押しながら右クリック Render Pass Prefabs を選択し、Group レンダーパスを選択して、Cubemap Reflections と名付けます。

      Group レンダーパスを使用するとレンダーパスをまとめることができるため、Viewport 2D ノードで単一のレンダーパスプレハブを参照できます。

      ../../_images/create-group-render-pass.png ../../_images/cubemap-reflections-in-library.png
    2. Node Tree で、シーンを含む Viewport 2D ノードを選択します。Properties で、Render Pass Prefab プロパティを Cubemap Reflections レンダーパスプレハブに設定します。

      Kanzi を設定して、Cubemap Reflections レンダーパスプレハブを使用して Viewport 2D ノードをレンダリングします。Cubemap Reflections レンダーパスプレハブには子レンダーパスがないため、Preview にはコンテンツが表示されません。

      ../../_images/cubemap-reflections-viewport-2d-in-project.png ../../_images/viewport-2d-use-cubemap-reflections-render-pass-prefab.png
    3. Cubemap Reflections レンダーパスプレハブ内で、Viewport 2D ノードのコンテンツを画面にレンダリングするレンダーパスを作成します。

      たとえば、Default レンダーパスを作成します。

      Default レンダーパスには、最初に不透明ノードをレンダリングし、次に透明ノードをレンダリングする基本的な一連のレンダーパスが含まれています。

      ../../_images/default-render-pass-in-cubemap-reflections.png ../../_images/cubemap-reflections-start.png
  4. Cubemap レンダーパスを使用して、周囲環境をキューブマップのコンポジションターゲットにレンダリングします。

    1. 環境に属するノードを選択するフィルタを作成します。

      例えば、Car タグを使用して、車に属するすべてのノードを含むノードにタグを付けます。Library > Rendering > Object Sources で、Car タグを除外する Tag Filter という名前の Environment を作成します。

      フィルタ を参照してください。

      ../../_images/carroot-in-project.png ../../_images/carroot-tags.png ../../_images/environment-tag-filter-in-library.png ../../_images/environment-tag-filter-properties.png
    2. Cubemap Reflections レンダーパスプレハブで、Cubemap レンダーパスを作成します。その Cubemap レンダーパス内に、周囲環境を描画するレンダーパスを作成します。

      たとえば、作成します:

      1. Clear レンダーパス。

        このレンダーパスは、深度バッファをクリアします。

      2. Gather Lights レンダーパス。

        Gather Lights レンダーパスを使用すると、シーン内の 3D ノードを照らすためのライトノードをノードのリストから収集できます。

      3. Gather Lights レンダーパスの中に Draw Objects レンダーパスを作成して Draw Environment という名前を付けます。Properties で、Object Source プロパティを、環境に属するノードのみを選択するフィルタに設定します。

        Object Source プロパティを使用して、Draw Objects レンダーパスにレンダリングするノードを指定します。

      Cubemap レンダーパスは環境をキューブマップのコンポジションターゲットに描画するため、Preview では結果を確認できません。

      ../../_images/cubemap-render-pass-in-library.png ../../_images/draw-environment-properties.png
  5. キューブマップの反射をレンダリングします。

    1. Library で、Alt を押しながら右クリック Materials and Textures を選択し、Cubemap Render Target Texture を選択します。

      Cubemap レンダーパスをキューブマップテクスチャにレンダリングするには、Cubemap Render Target Texture を使用します。

      ../../_images/library-create-cubemap-render-target-texture.png
    2. Properties で、Width and Height プロパティを Cubemap Render Target Texture に望む寸法に設定します。

      この方法で、キューブマップ反射の精度を設定します。

      ../../_images/properties-cubemap-render-target-texture-dimensions.png
    3. Library > Rendering > Render Pass Prefabs で、Cubemap レンダーパスを選択します。Properties で、Composition Target プロパティを追加し、作成した Cubemap Render Target Texture に設定します。

      ../../_images/cubemap-render-pass-in-library.png ../../_images/properties-cubemap-render-pass-composition-target.png
    4. Library > Materials and Textures > Materials で、キューブマップの反射をレンダリングしたい各マテリアルを選択します。Properties で、TextureCube プロパティを作成した Cubemap Render Target Texture に設定します。

      これにより、これらのマテリアルを使用するノードに Cubemap レンダーパスの結果をレンダリングするように Kanzi を設定します。

      ../../_images/library-cubemap-reflection-materials.png ../../_images/properties-texture-cube.png
    5. (オプション) 各マテリアルで、そのマテリアルの外観を調整するために使用したい他のプロパティを設定します。

      例えば、反射の明るさを設定するために、CubemapColor プロパティ Lightness (L) プロパティフィールドを調整します。

      ../../_images/cubemap-reflections-preview-before-positioning.png
  6. キューブマップの反射を配置する:

    1. 環境を反映させたいノードを含む Scene ノード内に、Camera ノードを作成し、それらのノードの中心に配置します。

      このカメラを反射プローブとして使用し、周囲の球面ビューをすべての方向でキャプチャします。

      ../../_images/cubemap-render-pass-camera.png ../../_images/reflection-probe-camera-in-preview.png
    2. Library で、Cubemap レンダーパスを選択します。Properties で、Override Camera プロパティを追加し、作成した Camera ノードに設定します。

      これにより、環境のキューブマップをキャプチャする位置を Cubemap レンダーパスに指定します。

      Preview では、車を移動すると、車のボディ、窓、ヘッドライト、リムが周囲の変化を反映します。

      ../../_images/cubemap-render-pass-in-library.png ../../_images/cubemap-render-pass-properties.png ../../_images/preview-cubemap-reflections.gif
  7. (オプション) 必要に応じて Cubemap レンダーパスを設定します。

    例えば、Kanzi がキューブマップの反射を更新する速度を設定できます。キューブマップ反射のレンダリングを複数のフレームに分散する を参照してください。

キューブマップ反射のレンダリングを複数のフレームに分散する

フレームごとのレンダリング作業量を減らすために、Kanzi の更新頻度を設定できます。

  • Cubemap レンダーパスがレンダリングするコンテンツ。

  • Cubemap レンダーパスがコンテンツをレンダリングする先のキューブマップテクスチャの面。

キューブマップ反射のレンダリングを分散するために

  1. Library > Rendering > Render Pass Prefabs で、キューブマップ反射のレンダリングに使用する Cubemap レンダーパスを選択します。Cubemap レンダーパスを使用したキューブマップリフレクションの作成 を参照してください。

    ../../_images/cubemap-render-pass-in-library.png
  2. Properties に追加して設定します。

    • Render Pass > Update Rate を、Cubemap レンダーパスがレンダリングするコンテンツを更新するレートに設定します:

      • コンテンツを毎フレーム更新するには、1に設定します。これがデフォルトの値です。

      • コンテンツを隔フレームで更新するには、2に設定し、4フレームごとに更新するには、4に設定します。

      • コンテンツを一度だけレンダリングするには、0に設定します。

    • Face Update Rate を、Cubemap レンダーパスの Result Texture で1フレームに更新したいキューブマップの面の数に設定します。

      Result Texture には、Cubemap レンダーパスが自身とその子レンダーパスをレンダリングする先のキューブマップテクスチャが含まれます。

      デフォルトで、Kanzi は Update Rate プロパティで設定した速度で6つのキューブマップ面すべてを更新します。

      例えば、Face Update Rate を3に設定し、Update Rate を2に設定すると、Kanzi はこのレートでキューブマップの面を更新します。

      フレーム (Frame)

      キューブマップの面 (Cubemap faces)

      n

      +x、-x、+y

      n + 1

      -

      n + 2

      -y, +z, -z

      n + 3

      -

      n + 4

      +x、-x、+y

      n + 5

      -

      n + 6

      -y, +z, -z

      n + 7

      -

    • Render Pass > Update Rate Offset をレンダリングレートをオフセットしたいフレーム数に設定します。

      この方法により、複数のレンダーパスのレンダリングを異なるフレームに分散させることができます。

      例えば、Update Rate Offset を 1 に設定すると、Kanzi はフレーム n + 1 で最初のキューブマップフェイスを更新します。

    ../../_images/properties-cubemap-render-pass-update-rate.png

関連項目

メッシュの使用

レンダリング

レンダーパスを使用すること

Kanzi Studio レンダーパスプリセットを使用する

レンダリングのためのマテリアル設定

コンポジションターゲットへのコンテンツのレンダリング

マテリアルタイプの使用

マテリアルを使用する (Using materials)

キューブマップテクスチャ (Cube-map Texture) を使用する

環境テクスチャを使用する

タグの使用

フィルタ