第 2 步 - 渲染反射

在上一步中,您标记了项目中的节点。在此步骤中,您首先创建两个标签过滤器:一个用于选择您要创建反射的节点,另一个用于选择您用于反射的 Instantiator 节点。然后,您使用渲染通道来渲染节点并在反射中设置剔除。

要渲染反射:

  1. 创建选择原点和反射节点的过滤器:

    1. 在 Library > Rendering 按 Alt 并右键单击 Object Sources 中,选择 Tag Filter,将其命名为 Origin,并在 Properties 中将 Included Tags 属性设置为 Origin。

      此过滤器选择包含您正在为其创建反射的节点的 Content 节点。

      ../../_images/create-tag-filter2.png ../../_images/add-included-tag-origin.png ../../_images/origin-tag-filter.png
    2. 在 Library > Rendering > Object Sources 中创建另一个 Tag Filter,将其命名为 Reflection,并在 Properties 中将 Included Tags 属性设置为 Reflection。

      此过滤器选择您用于创建反射的 Reflection 节点。

      ../../_images/reflection-tag-filter-in-library.png ../../_images/reflection-tag-filter.png
  2. 创建您用于渲染原点节点及其反射的渲染通道:

    1. 在 Library > Rendering 按 Alt 并右键单击 Render Pass Prefabs 中,选择 Group Render Pass,并将其命名为 Render Reflections。

      Group Render Pass 允许您收集渲染通道,以便您可以在 Viewport 2D 节点中引用单个渲染通道预设。

      ../../_images/create-group-render-pass3.png ../../_images/group-render-pass.png
    2. 在 Node Tree 中选择 Viewport 2D 节点,并在 Properties 中将 Render Pass Prefab 属性设置为 Render Reflections。

      Kanzi 现在使用 Render Reflections 渲染通道渲染 Viewport 2D 节点。Render Reflections 渲染通道尚未绘制任何内容,这就是 Preview 不显示任何内容的原因。

      ../../_images/viewport-2d-in-project2.png ../../_images/select-scene-render-pass.png
    3. 在 Render Reflections 中的 Library 创建一个 Clear Render Pass 渲染通道。

      此渲染过程清除深度缓冲区。

      ../../_images/clear-render-pass1.png
    4. 渲染原点节点:

      1. 在 Render Reflections 中的 Library 创建一个 Node List Render Pass 并将其命名为 Filter Origin。

        Node List Render Pass 允许您过滤并保存要使用其他渲染通道渲染的节点列表。

        ../../_images/filter-origin.png
      2. 在 Properties 中添加 Filter 属性,并将其设置为 Object Sources/Origin。

        使用 Filter Origin 渲染通道来收集由 Origin 标签过滤器选择的 Content 节点。

        ../../_images/filter-origin-properties.png
      3. 在 Filter Origin 渲染通道中的 Library 中创建一个 Gather Lights Render Pass 渲染通道。

        您使用此渲染通道从 Filter Origin 渲染通道收集的原始节点中收集 Light 节点。

        ../../_images/gather-lights-render-pass.png
      4. 在 Filter Origin > Gather Lights Render Pass 中的 Library 中创建一个 Draw Objects Render Pass 渲染通道。

        此渲染通道使用默认的 Camera 节点在 Viewport 2D 节点中进行渲染,该节点使用 Render Reflections 渲染通道预设,所有原始节点。

        ../../_images/draw-origin-in-library.png ../../_images/preview-origin-only.png
    5. 渲染反射:

      1. 在 Library 中复制 Filter Origin 渲染通道,将其重命名为 Filter Reflection,并在 Properties 中将 Filter 属性设置为 Object Sources/Reflection。

        您使用此渲染通道来渲染由 Reflection 标签过滤器选择的 Instantiator 节点 Reflection。

        ../../_images/filter-reflection.png ../../_images/object-source-reflection.png
      2. 在 Library 中,将 Filter Reflection 渲染通道拖到 Filter Origin 渲染通道上方。

        通过这种方式,您将 Render Reflections 渲染通道设置为在渲染原始节点之前渲染反射。您这样做是为了首先渲染反射,然后将它们与反射平面混合,反射平面是原始节点之一。

        ../../_images/render-passes-and-tag-filters.png ../../_images/step-2-with-reflections.png
      3. 在 Filter Reflection > Gather Lights Render Pass 中的 Library 创建一个 Pipeline State Render Pass,将其命名为 Cull Reflection,并将 Draw Objects Render Pass 渲染通道拖到 Cull Reflection 渲染通道。

        使用 Cull Reflection 渲染通道来设置反射的剔除。

        ../../_images/cull-reflection.png ../../_images/reflection-in-library-final.png
      4. 在 Library 中选择 Cull Reflection 渲染通道,在 Properties 中添加 Cull Mode 属性,并将其设置为 Front。

        您将 Cull Reflection 渲染通道设置为仅渲染法线指向远离 Camera 节点的多边形。

        默认情况下,Kanzi 仅渲染法线指向 Camera 节点的多边形。

        ../../_images/reflection-cull-mode-front.png ../../_images/end-of-step-2-no-material-adjustment.png
  3. (可选) 在 Node Tree 中选择 Reflection Plane 节点,并在 Properties 中调整 Ambient Color 和 Blend Intensity 属性,直到获得所需的反射平面。

    例如,要让反射平面与背景混合,调整 Ambient Color 属性。

    ../../_images/reflection-plane.png ../../_images/reflection-plane-material-ambient-property.png ../../_images/end-of-step-21.png

接下来该做什么?

在本教程中,您学习了如何在 Kanzi Studio 中创建反射。现在您可以:

另请参阅

要详细了解如何在您的 Kanzi 应用程序中使用过滤器,请参阅 过滤器 (Filters)。

要了解有关 Kanzi 中渲染通道的更多信息,请参阅 渲染 (Rendering)。

要详细了解关于材质和材质类型的信息,请参阅 材质类型和材质。