使用 mipmap

使用 mipmaps 从大纹理创建一组缩小的子级。Mipmaps 会将 GPU 内存使用量增加三分之一,但在不需要采样完整纹理时可以提高性能。每当缩放纹理节点时,使用 mipmaps 以提高性能。

例如,256x256 像素纹理具有 mipmap 级别,可以将纹理缩小至 128x128、64x64 等等,最小可缩小至 1x1 像素。性能得到提升是因为较小的 mipmap 级别更适合放入 GPU 中固定大小的纹理缓存。

您在第三方工具中创建 mipmap 并将其包含在 .dds 文件中时,Kanzi Studio 会提取 mipmap 级别的图像并使用它们。

避免从 .jpeg 纹理创建 mipmap,因为 .jpeg 图像格式会导致 mipmap 的质量下降。

为纹理生成 mipmap

当导入不含 mipmap 的图像时,您可以在 Kanzi Studio 中为该图像生成纹理的 mipmap。

要为纹理生成 mipmap:

  1. 在 Library > Resource Files > Images 中,选择您要为其创建 mipmap 的图像。

    避免从 .jpeg 纹理创建 mipmap,因为 .jpeg 图像格式会导致 mipmap 的质量下降。

  2. 在 Properties 中启用 Generate Mipmaps 属性。

    ../../_images/generate-mipmaps.png
  3. 在 Library > Materials and Textures > Textures 中,选择使用您要为其生成 mipmap 的图像的纹理。在 Properties 中,将 Mipmap Mode 属性设置为 Linear 或 Nearest,以启用这些 mipmap。请参阅 过滤纹理。

    ../../_images/mipmap-mode-property.png
  4. 当您导出项目的 kzb 文件并且 Kanzi Studio 询问您是否要预处理图像时,单击 Yes。如果您不在 Kanzi Studio 中预处理图像,Kanzi Engine 在目标设备上加载您的应用程序时会生成 mipmaps。这会增加您的应用程序的加载时间。

    备注

    Kanzi 无法为使用 ASTC 或 ETC 压缩的图像生成 mipmap。

    小技巧

    要手动为图像生成 mipmaps, 在 Library 中右键单击您要为其生成 mipmaps 的图像,然后选择 Preprocess images。

    ../../_images/preprocess-images.png

为合成目标创建 mipmap

当您使用 Composition Target 渲染通道或 Cubemap 渲染通道渲染 3D 内容时,可以为合成目标创建 mipmap。例如,使用此功能可以创建渲染速度快的低质量模糊效果。

此过程说明如何为 Kanzi 自动创建的合成目标创建 mipmap。要为 Render Target Texture 创建 mipmap,请参阅 为 Render Target Texture 创建 mipmap。

要为合成目标创建 mipmap:

  1. 创建将内容渲染到一个或多个合成目标所需的渲染通道。

    例如,在 Library > Rendering > Render Pass Prefabs 中创建 Compose and Blit Pass。请参阅 将内容渲染到合成目标。

    ../../_images/compose-and-blit-pass-library.png
  2. 在 Library > Rendering > Render Pass Prefabs 中,选择您要为其合成目标创建 mipmap 的 Composition Target 渲染通道或 Cubemap 渲染通道。在 Properties 中,添加 Mipmap Mode 属性,并将其设置为 Linear 或 Nearest。请参阅 过滤纹理。

    ../../_images/composition-target-mipmap-mode.png
  3. (可选) 要自定义 Kanzi 创建 mipmap 的方式,您可以为每个合成目标设置 mipmap 过滤材质。

    Kanzi Studio 附带一组可供您使用的 mipmap 过滤材质。

    要设置 mipmap 过滤材质:

    1. 将渲染通道设置为使用 mipmap 过滤材质:

      • 对于 Cubemap 渲染通道,添加 Mipmap Generation > Cubemap Mipmap Material 属性,并将其设置为您要使用的材质。

        例如,将其设置为 DefaultCubemapMipmapFilterMaterial。如果您的工程中不包含此材质,请在 Library > Materials and Textures 中,按 Alt 并右键单击 Material Types,并选择 DefaultCubemapMipmapFilter。

        ../../_images/cubemap-mipmap-material.png
      • 对于 Composition Target 渲染通道,添加并设置以下一个或多个 Mipmap Generation 属性:

        • Color Mipmap Material 0、Color Mipmap Material 1、Color Mipmap Material 2 和 Color Mipmap Material 3 用于设置颜色合成目标的 mipmap 过滤材质。

          例如,要设置 Composition Target 0 的材质,请添加 Color Mipmap Material 0 属性,并将其设置为 DefaultMipmapFilterMaterial。如果您的工程中不包含此材质,请在 Library > Materials and Textures 中,按 Alt 并右键单击 Material Types,并选择 DefaultMipmapFilter。

        • Depth Mipmap Material 设置为您要用于第一个合成目标的深度附件的材质。

          例如,将其设置为 DefaultDepthMipmapFilterMaterial。如果您的工程中不包含此材质,请在 Library > Materials and Textures 中,按 Alt 并右键单击 Material Types,并选择 DefaultDepthMipmapFilter。

        ../../_images/composition-target-mipmap-materials.png

    默认的 mipmap 过滤材质可以将以下属性用作其着色器的输入:

    • Current Mipmap Level 报告正在渲染的 mipmap 级别。

    • Mipmap Source Texture 报告包含要为其创建 mipmap 的渲染目标纹理的纹理。着色器只能从小于 Current Mipmap Level 的 mipmap 级别采样。

  4. (可选) 默认情况下,Kanzi 会在 Composition Target 渲染通道或 Cubemap 渲染通道创建合成目标时生成 mipmap。当您在另一个渲染通道中继续渲染到同一合成目标时,立即创建 mipmap 很可能会浪费 GPU 时间。为避免这种情况,请在创建合成目标的渲染通道中,添加并禁用 Composition Target 渲染通道 > Resolve Immediately 或 Cubemap 渲染通道 > Resolve Immediately 属性。

    ../../_images/resolve-immediately-disabled.png

为 Render Target Texture 创建 mipmap

您可以为使用 Composition Target 渲染通道向其渲染 3D 内容的 Render Target Texture 创建 mipmap。例如,使用此功能可以创建渲染速度快的低质量模糊效果。

要为 Render Target Texture 创建 mipmap:

  1. 在 Library > Rendering > Render Pass Prefabs 中创建一个 Render to Texture Pass。

    Render to Texture Pass 创建渲染到纹理所需的渲染通道和纹理。

    请参阅 渲染到纹理。

    ../../_images/render-to-texture-pass.png
  2. 在 Node Tree 中,选择您想要渲染到纹理的内容的 Viewport 2D 节点,并在 Properties 中将 Render Pass Prefab 属性设置为您在上一步中创建的 Render to Texture Pass。

    Kanzi 现在使用您创建的渲染通道渲染 Viewport 2D。

    ../../_images/scene-render-pass-set-to-render-to-texture-pass.png
  3. 在 Library 中选择您创建的 Render to Texture Pass,在 Properties 中点击 image0,位于 Composition Target 0 属性旁边,以转到 Render Target Texture 资源,并将 Mipmap Mode 属性设置为 Linear 或 Nearest。请参阅 过滤纹理。

    ../../_images/render-to-texture-pass-go-to-render-target-texture.png ../../_images/render-target-texture-mipmap-mode.png
  4. 在您想显示3D内容的节点中使用 Render Target Texture。请参阅 使用渲染目标纹理。

另请参阅

调整数据大小

并行加载资源

压缩纹理

过滤纹理

使用图块图集

排除应用程序性能问题

将内容渲染到合成目标

在 Kanzi 中使用 OpenGL ES 3.0+