绑定 Render Pass 节点属性

以下步骤介绍如何在渲染通道节点上绑定属性,使一个属性的值驱动另一个属性。

有关 Prism 图的介绍,请参阅 Prism 图。

资源属性绑定

资源属性绑定是在两个相同类型的资源属性之间直接绘制的一条线。要创建该绑定,请从一个节点上的源属性拖动到另一个节点上的目标属性。

示例:将 Build Acceleration Structure 连接到 Draw Objects 以实现光线追踪阴影

此示例将现有的光线追踪阴影场景重建为 Prism 图。原始场景使用手动设置的渲染通道来生成顶层加速结构,并将其传递给使用该结构的绘制通道。Prism 图则以两个资源属性之间的绑定连线来表达相同的依赖关系。

要将 Build Acceleration Structure 连接到 Draw Objects 以实现光线追踪阴影:

  1. 在 Kanzi Studio 的 Quick Start 窗口中,点击 Projects 并选择 Examples 选项卡。如果尚未下载 Raytracing 示例,请点击其旁边的 下载。

    Kanzi Studio 会将该示例下载到 <KanziWorkspace>/Examples/Raytracing 目录。

  2. 将 <KanziWorkspace>/Examples/Raytracing 文件夹复制到新位置,以保持原始工程不变。

  3. 从工程副本中打开 Raytracing.proj.kzm,并确认 Preview 中可以看到光线追踪阴影。

    在对 Prism 图进行任何更改之前 Raytracing 示例的预览,场景中显示光线追踪阴影。
  4. 在 Library 中,转到 Rendering > Prism Graphs。右键点击 Prism Graphs 并选择 Create > Empty Prism Graph。将其命名为 Raytracing Prism Graph。

    在 Library 的 Prism Graphs 文件夹中右键点击后出现的上下文菜单,其中 Create > Empty Prism Graph 已高亮显示。
  5. 选择渲染该场景的 Viewport 2D。在 Properties 面板中,将 Render Pass Prefab 设置为新的 Prism 图。在图完成之前,该视口将停止渲染。

    Viewport 2D 的 Properties 面板,其中 Render Pass Prefab 下拉菜单已打开,并已选择 Raytracing Prism Graph。
  6. 在 Library 中双击 Prism 图将其打开。Prism 编辑器会打开该图,显示仅包含 Output 节点的初始空状态。

    Library 中 Rendering > Prism Graphs 下的 Raytracing Prism Graph,正在被双击。 为 Raytracing Prism Graph 打开的 Prism 编辑器,显示仅包含 Output 节点的初始空状态。
  7. 添加主要渲染节点。在图中右键点击并添加:

    • Gather Lights 渲染通道节点。

    • Draw Objects 渲染通道节点。

    将 Gather Lights 连接到 Draw Objects,并将 Draw Objects 连接到 Output 节点。

    Preview 现在会在场景光照下渲染场景对象,但光线追踪阴影尚不可见。接下来的步骤将添加并绑定 Draw Objects 渲染这些阴影所需的加速结构。

    预览显示了带有对象和光照但没有光线追踪阴影的场景渲染效果,旁边是包含 Gather Lights、Draw Objects 和 Output 节点的 Prism 图。
  8. 在 绘图对象 (Draw Objects) 节点上,点击 add-properties-window 打开 Add Properties 窗口。在搜索框中输入 topLevelAS,在 Material Properties 下找到该属性。

    Draw Objects 节点的 Add Properties 窗口,搜索框中输入了“topLevelAS”,Available Properties 窗格中 Material Properties 下的 topLevelAS 属性处于高亮状态。

    双击 topLevelAS 添加该属性。该属性从 Available Properties 移至 Existing Properties。

    添加 topLevelAS 之后的 Add Properties 窗口,右侧的 Existing Properties 窗格中显示了该属性。

    关闭 Add Properties 窗口。

  9. 在图中右键点击,添加一个 Build Acceleration Structure 渲染通道节点。该节点没有帧缓冲区插槽,因为它生成的是加速结构而不是渲染图像。不要将它连接到其他节点。它通过下一步中添加的绑定线连接到其使用者。

  10. 从 Build Acceleration Structure 节点上的 OutputAccelerationStructure 属性拖出一条绑定线,放到 绘图对象 (Draw Objects) 节点上的 topLevelAS 属性上。

    这样会在这两个属性之间创建资源属性绑定。该绑定将 OutputAccelerationStructure 的值复制到 topLevelAS 中,使绘制通道使用构建通道生成的加速结构。

    动画演示从 Build Acceleration Structure 节点的 OutputAccelerationStructure 属性拖出绑定线,放到 Draw Objects 节点的 topLevelAS 属性上。
  11. 确认 Preview 再次渲染出光线追踪阴影。该绑定将 Build Acceleration Structure 生成的加速结构提供给 绘图对象 (Draw Objects)。

    预览显示了由 Prism 驱动重建后的光线追踪阴影,旁边是已完成的 Prism 图,其中有一条从 Build Acceleration Structure 连到 Draw Objects.topLevelAS 的绑定线。

示例:使用 Decode 将离屏帧缓冲区绑定到位块传送渲染通道 (Blit Render Pass)

此示例使用 Decode 适配器节点创建资源属性绑定。

某些 Prism 节点通过 Decode 适配器节点公开可绑定的资源属性。要将非 Render Pass 节点的离屏帧缓冲区输出绑定到另一个资源属性,需要使用 Decode。Decode 将帧缓冲区的附件呈现为命名的纹理属性(ResultTexture0、ResultDepthTexture),Render Pass 节点的属性可以绑定到这些属性。

使用 Decode 将离屏帧缓冲区绑定到位块传送渲染通道 (Blit Render Pass):

  1. 在工程中,右键点击 Scene 并选择 Create > Box,向场景添加一个 Box,使图中有可渲染的内容。

  2. 在 Library 中,转到 Rendering > Prism Graphs。右键点击 Prism Graphs 并选择 Create > Empty Prism Graph。将其命名为 Decode Bridge Prism Graph。

  3. 选择渲染该场景的 Viewport 2D。在 Properties 面板中,将 Render Pass Prefab 设置为新建的 Prism 图。

  4. 在 Library 中双击该 Prism 图将其打开。

  5. 添加用于渲染帧缓冲区的节点。在图中右键点击并添加:

    • Offscreen Framebuffer 节点。

    • Clear 节点。

    • Draw 节点。

    将 Offscreen Framebuffer 连接到 Clear,将 Clear 连接到 Draw。

  6. 继续添加 Render Pass 节点。添加:

    • Decode 适配器节点,它将上游帧缓冲区的内容公开为命名的纹理属性。

    • Blit Render Pass 节点。

    将 Draw 连接到 Decode。然后将 Blit 连接到 Output 节点。Decode 没有输出插槽,因此无法通过节点插槽连接到 Blit。从 Decode 到 Blit 的连接将在下一步中通过绑定线建立。

    添加任何绑定之前的 Prism 图,左侧是 Offscreen Framebuffer、Clear、Draw 和 Decode 节点,右侧是 Blit Render Pass 和 Output 节点。
  7. 在 Blit 节点上,点击 add-properties-window 打开 Add Properties 窗口。在搜索框中输入 Texture 0,然后双击该属性将其添加。关闭 Add Properties 窗口。

  8. 从 Decode 节点上的 ResultTexture0 属性拖出一条绑定线,放到 Blit 节点上的 Texture 0 属性上。

    这样会创建资源属性绑定:ResultTexture0 的值被复制到 Texture 0 中,使 Blit Render Pass 使用上游节点渲染到离屏帧缓冲区中的纹理。

    动画演示从 Decode 节点的 ResultTexture0 属性拖出绑定线,放到 Blit 节点的 Texture 0 属性上。
  9. 确认 Preview 渲染出经由 Blit 渲染通道合成的方框。上游节点将方框渲染到离屏帧缓冲区中;Decode 将该帧缓冲区公开为 ResultTexture0;绑定将该纹理 (Texture) 传递给 Blit,后者将其合成到 Output。

    预览显示通过 Decode 桥接到 Blit Render Pass 渲染的盒子。

小技巧

在此示例中,直接从 Draw 节点的输出连接器拖动到 Blit 上的 Texture 0 属性,即可一步插入 Decode 节点并创建绑定。

文本属性绑定

文本属性绑定通过绑定表达式驱动非资源属性。非资源属性是数字、布尔值、颜色或向量等值。如果您希望属性值来自 Kanzi 绑定表达式,而不是在编辑器中直接设置的值,请使用文本绑定。与直接设置的值不同,绑定表达式可以包含算术运算、函数调用以及对其他属性的引用。有关表达式语法,请参阅 Bindings expressions 参考。

示例:通过绑定表达式设置 Prism 图形的背景颜色

本示例沿用前面示例中的 Raytracing 示例工程。它构建一个小型 Prism 图形,先将屏幕清除为由绑定表达式计算出的颜色,然后在其上绘制场景。您可以使用相同的方式,通过绑定表达式驱动 Render Pass 节点上的任何非资源属性。

通过绑定表达式设置 Prism 图形的背景颜色:

  1. 如果尚未打开,请从您的 Raytracing 示例副本中打开 Raytracing.proj.kzm。请参阅 示例:将 Build Acceleration Structure 连接到 Draw Objects 以实现光线追踪阴影 中的步骤 1 至 3。

  2. 在 Library 中,转到 Rendering > Prism Graphs。右键点击 Prism Graphs,然后选择 Create > Empty Prism Graph。将其命名为 Background Color Prism Graph。

  3. 选择渲染场景的 Viewport 2D。在 Properties 面板中,将 Render Pass Prefab 设置为新图形。在图形完成之前,视口会停止渲染。

  4. 在 Library 中双击该 Prism 图将其打开。

  5. 在图形中右键点击,添加一个 Clear 基础节点和一个 Draw Objects Render Pass 节点。将 Clear 连接到 Draw Objects,并将 Draw Objects 连接到 Output 节点。

  6. 在 Clear 节点上,点击 add-properties-window 打开 Add Properties 窗口。在搜索框中输入 Clear Color 0。在 Available Properties 下,双击 Clear Color 0 将其添加。关闭 Add Properties 窗口。

    Preview 现在以默认的黑色清除颜色渲染场景。

  7. 在 Clear 节点的 Prism 属性窗格中,右键点击 Clear Color 0 行,然后选择 Edit binding…。

    Kanzi Studio 会在浮动窗口中打开绑定编辑器,并以 Clear Color 0 作为绑定目标。

    Prism 属性窗格中 Clear Color 0 行的右键上下文菜单,其中 Edit binding 条目处于高亮状态。
  8. 在绑定编辑器的表达式字段中输入:

    Color4(0.1, 0.1, 0.3, 1.0)
    

    点击 Save。编辑器随即关闭。Preview 显示深蓝色背景下的场景。Clear Color 0 行在标签上显示绑定指示符,并以表达式的只读预览取代值编辑器。

    绑定后 Prism 属性窗格中 Clear Color 0 行的动画,显示标签上的绑定指示符以及取代值编辑器的表达式预览 Color4(0.1, 0.1, 0.3, 1.0)。
  9. 再次打开绑定编辑器,并将表达式替换为对当前表达式进行缩放的表达式:

    Color4(0.1, 0.1, 0.3, 1.0) * 2
    

    保存。背景变得更亮。该行的预览更新为显示新表达式。

    预览窗口显示更亮的蓝色背景,旁边是带有表达式预览 Color4(0.1, 0.1, 0.3, 1.0) * 2 的 Clear Color 0 行。

要移除绑定并恢复可直接编辑的值,请右键点击该行并选择 Clear binding。

如果无法解析表达式,内联预览会变为红色。重新打开 Edit binding… 以更正表达式。

小技巧

您还可以从一个 Prism 属性行的显示名称拖动到另一个非资源属性行上来创建文本绑定。绑定编辑器打开时会预先填入引用源行属性的表达式。

从一个 Blit Render Pass 节点的 Blend Mode 行拖动到另一个 Blit Render Pass 节点的 Blend Mode 行的动画,绑定编辑器打开时预先填入了引用源行属性的表达式。

另请参阅

Prism 图

创建 Prism 图

向 Prism 渲染图形添加阴影

使用 Prism 图创建泛光效果