版本:Unity 6 (6000.0)
语言:English
GPU 纹理格式参考
导入纹理

Mipmaps

Mipmap 级别是具有特定分辨率的纹理版本。Mipmap 级别存在于称为 Mipmaps 的集合中。Mipmaps 包含单个纹理的逐渐缩小且分辨率更低的版本。

例如,Mipmap 可能包含纹理的四个版本,从原始纹理(Mipmap 级别 0)到 Mipmap 级别 1、Mipmap 级别 2 和 Mipmap 级别 3。

Mipmap levels
Mipmap 级别

Mipmaps 通常用于在 3D 场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是分段设计和构建您的游戏。 更多信息
请参阅 词汇表
中渲染对象,其中纹理对象与摄像机一个组件,用于创建场景中特定视点的图像。输出要么绘制到屏幕上,要么作为纹理捕获。 更多信息
请参阅 词汇表
的距离可能会有所不同。更高级别的 Mipmap 用于靠近摄像机的对象,而更低级别的 Mipmap 用于更远处的对象。

在 GPU 以小于其完整分辨率渲染纹理的情况下,Mipmaps 可以加速渲染操作并减少渲染伪像。Mipmap 实际上是原始纹理的缓存、降采样版本。GPU 可以对已经降采样的版本执行较少的运算,而不是对原始的完整分辨率纹理执行许多采样运算。

有时,Mipmaps 并没有好处。Mipmaps 会将纹理的大小增加 33%,无论是在磁盘上还是在内存中。当纹理仅以其完整分辨率渲染时,例如未缩放的UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
请参阅 词汇表
纹理,它们也不会带来任何好处。

您可以手动为纹理创建 Mipmap,也可以指示 Unity 为您生成 Mipmap。要自动生成 Mipmap,请确保原始纹理的分辨率为 2 的幂值,如 Mipmap 示例图像所示。

您可以在纹理导入设置检查器中启用或禁用纹理资源的 Mipmaps。

GPU 如何采样 Mipmap 级别

当 GPU 采样纹理时,它会根据当前像素计算机图像中最小的单位。像素大小取决于屏幕分辨率。像素照明是在每个屏幕像素处计算的。 更多信息
请参阅 词汇表
的纹理坐标 (UV) 和 GPU 计算的两个内部值(DDX 和 DDY)来确定要使用哪个 Mipmap 级别。

GPU 使用这些值来确定纹理的多少细节对摄像机可见。当前像素与其相邻像素之间更大的距离和更大的角度意味着 GPU 选择更低分辨率的 Mipmap 级别;更短的距离和更小的角度意味着 GPU 选择分辨率更高的 Mipmap 级别。

GPU 还可以使用三线性过滤将来自两个 Mipmap 级别的信息混合在一起。在采样时混合 Mipmap 级别可以使从一个 Mipmap 级别到另一个 Mipmap 级别的过渡不那么明显。为了混合 Mipmap 级别,GPU 会从一个 Mipmap 级别获取特定百分比的纹理信息,其余的则来自另一个 Mipmap 级别。

Mipmap 偏差

根据采样器设置,称为 Mipmap 偏差的设置在采样时可以执行两件事。

  • Mipmap 偏差可以更改 GPU 为样本选择更低或更高 Mipmap 级别 的阈值。当您在采样器中使用点过滤和线性过滤时,GPU 会选择特定的 Mipmap 级别。例如,GPU 可能会确定一组 UV 处的纹理使用来自 Mipmap 级别 3 的样本。使用 -2 的 Mipmap 偏差,GPU 将改为使用更高分辨率的 Mipmap 级别 1 进行采样。
  • 当从不同的 Mipmap 级别混合样本时,Mipmap 偏差可以告诉 GPU 以精确的百分比偏好一个 Mipmap 级别而不是另一个 Mipmap 级别。当您在采样器中使用三线性过滤时,GPU 会混合 Mipmap 级别。例如,GPU 的计算可能会返回 0.5 的值。0.5 值告诉 GPU 从一个 Mipmap 级别获取 50% 的所需纹理信息,其余 50% 来自下一个 Mipmap 级别。加上 0.2 的 Mipmap 偏差,0.5 的值将变为 0.7,GPU 将从第一个 Mipmap 级别获取 70% 的纹理信息,而仅从第二个 Mipmap 级别获取 30%。

GPU 具有一个全局 Mipmap 偏差,它默认将其应用于其 Mipmap 级别选择。纹理可以有自己的 Mipmap 偏差,Unity 会将其添加到全局 Mipmap 偏差或从中减去。您还可以为手动编码的着色器在 GPU 上运行的程序。 更多信息
请参阅 词汇表
中的单个纹理采样操作指定自己的 Mipmap 偏差。

要设置单个纹理的 Mipmap 偏差,请参阅Texture.mipMapBias。要在手动编码的着色器中设置纹理采样操作的 Mipmap 偏差,请使用 HLSL 函数,例如tex2dbias。要在 Shader Graph 中设置纹理采样操作的 Mipmap 偏差,请参阅采样纹理 2D 数组节点采样纹理 2D 节点

Unity 如何加载 Mipmaps

您可以使用Mipmap 流式传输控制 Unity 在运行时加载 Mipmaps 的方式。

其他资源

GPU 纹理格式参考
导入纹理