创建立方体贴图反射

Cubemap 渲染通道可用于在 3D 节点的表面上创建环境的动态反射。

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

Cubemap 渲染通道使用一个特定的 Camera 节点作为反射探针。您需要将此 Camera 节点放置在显示网格的节点的中心,您希望在这些网格的表面上反射环境。

Cubemap 渲染通道将其自身及其子渲染通道渲染到活动的合成目标,例如 Cubemap Render Target Texture 以及 Cubemap 渲染通道的 Result Texture。

要在节点表面反映环境,请将立方体贴图合成目标设置为这些节点使用的材质的立方体贴图纹理。

每个 Scene 节点可以有一个反射探针。

../../_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 中,创建一个名为 Environment 的 Tag Filter,排除 Car 标签。

      请参阅 过滤器 (Filters)。

      ../../_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 Render Target Texture 将 Cubemap 渲染通道渲染到立方体贴图纹理。

      ../../_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。

      这样,您就将 Kanzi 设置为在使用这些材质的节点中渲染 Cubemap 渲染通道的结果。

      ../../_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,以此类推。

      • 要仅渲染一次内容,请设置为 0。

    • Face Update Rate 为您希望在 Cubemap 渲染通道的 Result Texture 中每帧更新的立方体贴图面数。

      Result Texture 包含 Cubemap 渲染通道将其自身及其子渲染通道渲染到的立方体贴图纹理。

      默认情况下,Kanzi 以您使用 Update Rate 属性设置的速率更新所有六个立方体贴图面。

      例如,当您将 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

另请参阅

使用网格

渲染 (Rendering)

使用渲染通道

使用 Kanzi Studio 渲染通道预设

设置用于渲染的材质

将内容渲染到合成目标

使用材料类型

使用材料

使用环境纹理贴图

使用环境纹理

使用标签

过滤器 (Filters)