C
优化图像
优化演示文稿中的图像可以显著提高应用程序的启动和运行性能,以及某些情况下的视觉质量。
动机
未优化的图像可能会以多种方式损害应用程序的性能
- 大型图像在作为纹理遍历时需要更多的内存带宽。
- PNG 和 JPG 压缩图像必须在发送到图形系统之前进行解压缩。
- 尺寸不合适的图像在启动时会导致性能下降和质量降低。
- 未经压缩的图像在发送到图形系统时耗时更长,并且占据更多的图形内存。
此外,选择合适的图像尺寸以及使用 MIP 映射(参见下文)可以防止在图像显示尺寸显著缩小时出现走样问题。
减小图像尺寸
使您的图像小,但尺寸是 4 的倍数。
您需要做的第一件事是将图像调整为尽可能小。图像越小,上传到图形系统就越快,占用的图形带宽和内存就越少。考虑图像可能显示的最大尺寸,并将图像调整为该尺寸。如果您的碳纤维将在约 32 像素/重复中贴图,请不要将其保存为 1024×1024。
但是,请注意,您的图像的水平和垂直维度必须是 4 的倍数才能存储在图形卡上。如果您以 107×29 保存图像,Qt 3D Studio 运行时会不对称地将它放大到 108×32,然后发送到图形卡。这会稍微模糊您的图像,并且还会在调整图像大小时浪费性能。
如果您正在使用 MIP 映射,图像尺寸还有进一步的限制;请参阅下文。
选择文件格式
几乎在所有情况下都首选 DDS - 带适当编码的。
Qt 3D Studio 支持三种主要的图像文件格式:JPG、PNG 和 DDS。您可以在互联网上搜索 JPG 与 PNG 的优缺点,以及在何时选择哪个。然而,它们相对于 DDS 的优势仅在于
- JPG 和 PNG 在大多数图像应用程序和外部系统中都得到了很好的支持;而 DDS 则不。
- JPG 和 PNG 通常会在磁盘上比 DDS 导致更小的图像文件大小。
相比之下,DDS 提供以下好处
- DDS 文件加载速度更快。 DDS 文件可以直接加载到图形系统,而无需先解压缩。
- 大多数 DDS 文件渲染速度更快。 几乎所有 DDS 编码方案都使用更少的内存在图形卡上,这使得它们作为纹理采样更快。
- 与better visual quality相比,DDS 文件可以在小尺寸下以更快的速度渲染。 DDS 文件可以编码 MIP 映射(预先计算的低分辨率图像,在缩小尺寸时使用)。这些基于图像大小使用双线性插值平滑过渡。
以 DDS 格式保存
对于大多数艺术家来说,创建DDS图像(通常是)最容易的方法是使用NVIDIA的Photoshop纹理工具。安装后,标准另存为...
对话框中有一个选项可以将图像保存为.dds
文件格式。您需要确保图像的尺寸是4的倍数,以便使用该对话框。
指定文件名后,您将看到一个有些令人困惑的对话框,为保存图像提供了大量选项
另存为...DDS对话框
最重要的设置是顶部的下拉列表,用于选择DDS编码,以及MIP映射部分。
选择DDS编码
编码下拉列表中有30个条目,最初看起来像是乱码。只有八个编码与Qt 3D Studio相关;无关的编码在这张图中已变为灰色
与Qt 3D Studio相关的DDS编码
您应选择满足您视觉效果需要且每像素位数(bpp)最小的编码
- DXT1 - 应用损失压缩算法,不保留任何alpha。
- DXT1a - 与DXT1类似,但也保留了2种alpha色调(完全透明或完全不透明)。
- DXT3 - 与DXT1类似,但也保留了16种显式alpha色调。
- DXT5 - 与DXT3类似,但又平滑过渡alpha。
- alpha - 无损256种alpha色调,无RGB。对于不透明度贴图很有用。
- 如果用作漫反射贴图,颜色通道全部隐式为黑色。
- 亮度 - 无损256种灰色色调,无alpha。您可以使用标准材料的漫反射颜色着色结果。
- alpha/亮度 - 结合前两种结果的编码(存储空间加倍)。
- 8.8.8.8 ARGB - 无损RGB和alpha。在使用这个4倍大的编码之前,尽量使用DXT5。
- 虽然这是所有DDS编码中最大的,但它使用的图形内存和带宽与PNG相同,但上传到图形系统更快,因为它在上传之前无需解压缩。
使用MIP映射
当您的图像可能小于原始大小,包括透视部分时,请使用MIP映射。
启用MIP映射会创建许多尺寸较小的图像副本,额外使用1/3的内存。每个mipmap是前一个mipmap尺寸的一半,使用Photoshop中的良好图像重采样缩小。这样加快了渲染速度 - 图形卡将使用较小的图像进行纹理查找的时间减半 - 并且也减少了网点效应或纹理插值等混叠伪影。
选择“生成MIP映射”单选按钮,以便在DDS图像中包含MIP映射。使用“2D预览”按钮查看它们。使用“锐化...”按钮对不同的mipmap级别应用简单效果(包括锐化或模糊)。
另一方面,如果您不需要MIP映射,请选择“无MIP映射”单选按钮,为图像节省额外的1/3内存。
请注意,MIP映射需要特定的图像尺寸才能在任何级别上正确工作,具体取决于使用哪种编码
- DXT* - 所有DXT编码都需要图像的宽度和高度都是2的某个幂次,例如32、64、128、256等,如果您想使用MIP映射。
- alpha/亮度 - alpha、亮度和alpha/亮度编码需要宽度是2的某个幂次以使用MIP映射,但高度可以是4的倍数。
- 8.8.8.8 ARGB - 这种编码要求图像尺寸必须是4的倍数,以便与MIP映射一起使用。
MIP映射和图像尺寸
原始图像需要尺寸是4的倍数,同样地,您希望显示的每个MIP映射级别也必须是4的倍数。如果不是,当显示MIP映射级别时,您将看到渲染伪影。
例如,如果您保存一个132×44像素的图像,该图像在不改变大小的情况下渲染得很好。然而,第一个MIP映射将在66×22像素处创建;由于这些值不是4的整数倍,该图像在小尺寸下看起来不正确。
因此,如果您要为图像使用MIP映射,图像尺寸必须是4×(2×number_of_mip_levels
)的倍数。如果确保您的大尺寸MIP映射图像尺寸是32的倍数,则前3个MIP映射将正确工作,允许您图像含量效地缩小至原始尺寸的1/8,并且具有吸引力。
保存Alpha通道
通常在处理有半透明区域的图像时,在编辑图像时使用Photoshop的透明图层会更简单。如果您选择支持Alpha的DDS编码,则图层中的透明区域将用于Alpha信息。
然而,在特定情况下,您需要控制完整透明像素的RGB值。具体来说,如果
- 图像的一部分将以其保存的数据量大小以上的尺寸显示,并且
- 您的图像中相邻较不透明的像素旁边有完整透明的像素
在这种情况下,完全透明像素和其相邻的相对不透明像素之间的纹理插值将混合两者的RGB值。如果您使用Photoshop的透明图层,某些透明像素的RGB值将保存为白色,因此您将在透明区域的边缘看到白色边缘。
对于此类情况,不要在Photoshop中创建半透明图层,而要创建一个完全没有透明度的图层,并将所有关注的像素的RGB值设置为。然后,在 Channels 面板中将Alpha信息保存到第4个通道。从Photoshop中选择“另存为...”时,请勾选“Alpha通道”复选框。第四个通道的信息将用于DDS Alpha。
无论您如何保存Alpha信息,如果从Photoshop重新打开包含Alpha的DDS,Alpha信息总是会显示在第四个通道中。
在特定Qt许可证下可用。
了解更多信息。