图像和纹理最佳实践¶
渲染大型纹理和图像时所需的内存带宽可能会导致应用程序的速度下降。使用以下技巧,通过创建和使用最佳图像和纹理来提高应用程序的性能:
优化应用程序性能的最简单方法是使用更小的数据量纲,以减少图像中的细节量。请参阅 调整数据大小。
Kanzi 支持自适应可伸缩纹理压缩 (ASTC)、AMD 纹理压缩 (ATC)、Ericsson 纹理压缩 (ETC)、PNG 压缩和 PowerVR 纹理压缩 (PVRTC) 用于压缩纹理中使用的图像。请参阅 压缩纹理。
当用户在具有多核处理器的环境中运行您的 Kanzi 应用程序时,Kanzi 会自动使用多个 CPU 核心将 kzb 文件中的 GPU 资源加载到 RAM 中。
Kanzi 使您能够配置应用程序要使用的核心数量。请参阅 并行加载资源。
使用 mipmaps 从大纹理创建一组缩小的子级。Mipmaps 会将 GPU 内存使用量增加三分之一,但在不需要采样完整纹理时可以提高性能。每当缩放纹理节点时,使用 mipmaps 以提高性能。
请参阅 使用 mipmap。
将纹理过滤应用于提高质量或性能。如果您事先熟悉应用程序的行为,此方法可能非常有效。请参阅 过滤纹理。
使用图块图集来提高应用程序的帧率,方法是减少应用程序在运行时必须进行的纹理切换次数。
请参阅 使用图块图集。
对于其大小并非二的幂的纹理,OpenGL ES 2 规格不需要过滤或 mipmap。为了使 Kanzi 正确渲染您的纹理,确保将:
您的目标设备支持 GL_OES_texture_npot 扩展。
纹理的大小是二的幂。
纹理的 Mipmap Mode 属性设置为 Base,Wrap Mode 属性设置为 Clamp。
在 Project > Properties 中启用 Round up Image Dimensions to Nearest Power of Two 属性。
确保将所有纹理的 Mipmap Mode 属性设置为至少 Nearest。仅对非常小的纹理(例如,4x4 像素及更小)使用 Mipmap Mode 值 Base。
将只包含扁平颜色的纹理的大小保持在 4x4 像素以下,并设置 Texture Settings 属性:
Minification Filter 到 Nearest
Magnification Filter 到 Nearest。
Mipmap Mode 到 Base
使用 Text Block 时,Kanzi 会为每种字体和字体大小组合创建一个字形缓存纹理。您可以设置字形缓存纹理的高度和宽度,以便在字形缓存纹理已满时或为了优化 Kanzi 应用程序的性能来调整字形缓存纹理的大小。
请参阅 图形缓存纹理大小。
当您的 Kanzi 应用程序使用包含无效 ICC 配置文件的 png 图像时,Kanzi 会在应用程序运行时向日志打印警告。要从所有 png 图像中移除 ICC 配置文件,请在 Project > Properties 中启用 Remove ICC Profile From PNG Images 属性。
当您启用此属性时,Kanzi 会在 kzb 文件导出期间从项目中的 png 图像中移除 ICC 配置文件。
确保将 glTF 资产中纹理或材质使用的所有图像资源启用 Ignore Embedded Color Profile 属性。
当您启用属性 Kanzi Studio 时:
从 png、jpg 或 exr 图像文件中移除 ICC 配置文件。
不对图像执行伽马校正。
当您将 glTF 或 glb 资产导入到您的 Kanzi Studio 项目时,Kanzi Studio 会自动在该资产使用的图像资源中启用 Ignore Embedded Color Profile 属性。
确保将所有使用 ASTC、ETC2、JPEG、PNG 或 PVRTC 格式的图像资源的 sRGB Content 属性设置正确:
如果图像包含 sRGB 颜色信息,请将 sRGB Content 属性设置为启用。这是默认设置。
如果您禁用包含 sRGB 颜色信息的图像的 sRGB Content 属性,Kanzi 渲染使用该图像的纹理时可能会比预期更亮。
如果图像包含非颜色信息,例如法线、粗糙度或遮挡贴图,请将 sRGB Content 属性设置为禁用。
包含非颜色信息的纹理以线性格式存储。通过禁用 sRGB Content 属性,您将 Kanzi 设置为直接将图像数据传递给着色器,而不执行颜色空间转换。
确保将所有包含透明度的图像资源的 Linear Premultiply 属性设置正确。如果您希望 Kanzi 在以下内容中预乘 alpha 通道:
线性颜色空间,将 Linear Premultiply 属性设置为启用。
这是默认值,并在 sRGB 图像中产生最少的伪影。
图像的色彩空间,通常为 sRGB,将 Linear Premultiply 属性设置为禁用。
这可以为为传统颜色工作流程创建的图像提供更好的结果。
请参阅 在第三方工具中准备图像。