创建立方体贴图反射¶
使用 Cubemap Render Pass 在 3D 节点的表面上创建环境的动态反射。
Cubemap Render Pass 使用一个特定的 Camera 节点,该节点用作反射探针。您将此 Camera 节点放置在显示网格的节点中心,这些网格的表面上您希望反射环境。
Cubemap Render Pass 将自身及其子渲染通道渲染到活动合成目标,例如 Cubemap Render Target Texture 和 Cubemap Render Pass 的 Result Texture。
要在节点表面反映环境,请将立方体贴图合成目标设置为这些节点使用的材质的立方体贴图纹理。
每个 Scene 节点可以有一个反射探针。
使用 Cubemap Render Pass 创建立方体贴图反射。¶
要创建立方体贴图反射:
在您的 Kanzi Studio 项目中,在 Scene 节点中,创建:
显示您希望在其表面反射环境的网格的节点。
例如,创建一辆车,其车身、车窗、大灯和轮辋可以反射环境。
您想要反射的节点周围的环境。
例如,创建一个 Box 节点,使用立方体贴图纹理作为天空盒。请参阅 使用立方体贴图纹理作为天空盒。
对于每个您希望其表面反射环境的节点:
在 Node Tree 中,选择该节点。
在材料旁边的 Properties 中,单击
以转到该材料,并将 Material Type 属性设置为支持立方体贴图反射的材料类型。
例如,使用 VertexPhongTexturedCube 材质类型。如果您的项目不包含 VertexPhongTexturedCube 材质类型,请在 Library > Materials and Textures 按 Alt 并右键单击 Material Types 中,选择 VertexPhongTexturedCube。
要将任何 Kanzi 默认材质类型设置为支持立方体贴图反射:
在 Library 中,选择该材料类型。
在 Properties 的 Preprocessor Definitions 中,将 KANZI_SHADER_USE_REFLECTION_CUBE 设置为 1。
在 Scene 节点中渲染所有节点:
在 Library > Rendering 中,按 Alt 并右键单击 Render Pass Prefabs,选择 Group Render Pass,并将其命名为 Cubemap Reflections。
Group Render Pass 允许您收集渲染通道,以便您可以在 Viewport 2D 节点中引用单个渲染通道预设。
在 Node Tree 中,选择包含您场景的 Viewport 2D 节点。在 Properties 中,将 Render Pass Prefab 属性设置为 Cubemap Reflections 渲染通道预设。
您将 Kanzi 设置为使用 Cubemap Reflections 渲染通道预设渲染 Viewport 2D 节点。Cubemap Reflections 渲染通道预设没有任何子渲染通道,这就是 Preview 不显示任何内容的原因。
在 Cubemap Reflections 渲染通道预设中,创建渲染通道,将 Viewport 2D 节点的内容渲染到屏幕上。
例如,创建一个 Default Render Pass。
Default Render Pass 包含一组基本的渲染通道,首先渲染不透明节点,然后渲染透明节点。
使用 Cubemap Render Pass 将环境渲染到立方图合成目标:
创建一个筛选器,以选择属于环境的节点。
例如,将包含属于汽车的所有节点的节点标记为标签 Car。在 Library > Rendering > Object Sources 中,创建一个名为 Environment 的 Tag Filter,排除 Car 标签。
请参阅 过滤器 (Filters)。
在 Cubemap Reflections 渲染通道预设中,创建一个 Cubemap Render Pass。在 Cubemap Render Pass 中,创建绘制环境的渲染通道。
例如,创建:
Clear Render Pass。
此渲染过程清除深度缓冲区。
Gather Lights Render Pass。
Gather Lights Render Pass 允许您从节点列表中收集用于照亮场景中3D节点的光节点。
在 Gather Lights Render Pass 中,创建一个 Draw Objects Render Pass 并将其命名为 Draw Environment。在 Properties 中,将 Object Source 属性设置为仅选择属于环境的节点的过滤器。
您使用 Object Source 属性来告知 Draw Objects Render Pass 您希望它渲染哪些节点。
Cubemap Render Pass 将环境绘制到立方体贴图合成目标,这就是为什么您无法在 Preview 中看到结果的原因。
渲染立方体贴图反射:
在 Library 中,按 Alt 并右键单击 Materials and Textures 并选择 Cubemap Render Target Texture。
使用 Cubemap Render Target Texture 将 Cubemap Render Pass 渲染到立方体贴图纹理。
在 Properties 中,将 Width and Height 属性设置为您想要的 Cubemap Render Target Texture 的尺寸。
通过这种方式,您可以设置立方体贴图反射的精度。
在 Library > Rendering > Render Pass Prefabs 中,选择 Cubemap Render Pass。在 Properties 中,添加并将 Composition Target 属性设置为您创建的 Cubemap Render Target Texture。
在 Library > Materials and Textures > Materials 中,选择您要用于渲染立方体贴图反射的每个材质。在 Properties 中,将 TextureCube 属性设置为您创建的 Cubemap Render Target Texture。
通过这种方式,您将 Kanzi 设置为在使用这些材质的节点中渲染 Cubemap Render Pass 的结果。
(可选) 在每个材质中,设置您想要用来调整该材质外观的其他任何属性。
例如,调整 CubemapColor 属性 Lightness (L) 属性字段以设置反射的亮度。
定位立方体贴图反射:
在包含您要反射环境的节点的 Scene 节点中,创建一个 Camera 节点,并将其放置在这些节点的中心。
您使用此相机作为反射探针,它可以捕获其周围环境的全方位球面视图。
在 Library 中,选择 Cubemap Render Pass。在 Properties 中,添加 Override Camera 属性,并将其设置为您创建的 Camera 节点。
通过这种方式,您可以告诉 Cubemap Render Pass 您希望其捕获环境立方图的位置。
在 Preview 中,当您移动汽车时,汽车的车身、车窗、车灯和轮毂会反映出其周围环境的变化。
(可选) 配置 Cubemap Render Pass 以满足您的需求。
例如,您可以设置 Kanzi 更新立方体贴图反射的频率。请参阅 将立方体贴图反射的渲染分配到多个帧中。。
将立方体贴图反射的渲染分配到多个帧中。¶
要减少每帧渲染工作负载的数量,您可以设置 Kanzi 更新的频率:
Cubemap Render Pass 渲染的内容。
立方体贴图纹理中的面,Cubemap Render Pass 将其内容渲染到这些面。
要分配立方体贴图反射的渲染
在 Library > Rendering > Render Pass Prefabs 中,选择一个您用来渲染立方体贴图反射的 Cubemap Render Pass。请参阅 使用 Cubemap Render Pass 创建立方体贴图反射。。
在 Properties 中,添加并设置:
Render Pass > Update Rate 到您希望更新 Cubemap Render Pass 渲染的内容的速率:
要在每帧更新内容,请设置为 1。这是默认值。
要每隔一帧更新内容,请设置为 2;要每隔四帧更新内容,请设置为 4,以此类推。
要仅渲染一次内容,请设置为 0。
Face Update Rate 到您想在 Cubemap Render Pass 的 Result Texture 中在一帧内更新的立方体贴图面的数量。
Result Texture 包含立方体贴图纹理,Cubemap Render Pass 将自身及其子渲染通道渲染到该纹理。
默认情况下,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 帧更新第一个立方体贴图面。