Version: 6000.3
语言: 中文
GPU纹理格式参考
导入纹理

Mipmap

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

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

Mipmap 级别
Mipmap 级别

Mipmap 通常用于在 3D 中渲染对象场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
,其中纹理对象与相机在场景中创建特定视点图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。更多信息
请参阅术语表
.较高的 mipmap 级别用于靠近相机的对象,较低的 mipmap 级别用于较远的对象。

Mipmap 可以加快渲染作,并在 GPU 以低于其全分辨率渲染纹理的情况下减少渲染伪影。mipmap 实际上是原始纹理的缓存、下采样版本。GPU 可以在已缩减采样的版本上执行较少数量的作,而不是对原始全分辨率纹理执行许多采样作。

有时,mipmap 没有用处。Mipmap 将磁盘和内存中的纹理大小增加 33%。当纹理仅以全分辨率呈现时,它们也没有任何好处,例如未缩放的 UI 纹理。

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

你可以在纹理导入设置检查器中启用或禁用纹理资产的mipmap。

GPU 如何对 mipmap 级别进行采样

当 GPU 对纹理进行采样时,它会根据当前纹理坐标 (UV) 确定要使用的 mipmap 级别像素计算机图像中的最小单位。像素大小取决于您的屏幕分辨率。像素光照是在每个屏幕像素下计算的。更多信息
请参阅术语表
,以及 GPU 计算的两个内部值:DDX 和 DDY。DDX 和 DDY 提供有关当前像素旁边和上方像素的 UV 的信息,包括距离和角度。

GPU使用这些值来确定摄像机可见的纹理细节量。当前像素与其相邻像素之间的距离越大,角度越极端,意味着 GPU 选择分辨率较低的 mipmap 级别;较短的距离和较小的极端角度意味着 GPU 选择具有更高分辨率的 mipmap 级别。

GPU 还可以将来自两个 mipmap 级别的纹理信息与三线性筛选混合在一起。在采样时混合 Mipmap 级别可以使从一个 Mipmap 级别到另一个 Mipmap 级别的转换不那么明显。若要混合 Mipmap 级别,GPU 会从一个 Mipmap 级别获取特定百分比的纹理信息,其余部分则从另一个 mipmap 级别获取。

Mipmap 偏差

称为 mipmap bias 的设置可以在采样时根据采样器设置执行两项作:

  • mipmap 偏差可以更改 GPU 为样本选择较低或较高 mipmap 级别的阈值。在采样器中使用点和线性筛选时,GPU 会选择特定的 mipmap 级别。例如,GPU可能会决定一组UV处的纹理使用mipmap级别3的样本。如果 mipmap 偏差为 –2,GPU 将改为对样本使用更高分辨率的 mipmap 级别 1。
  • Mipmap 偏差可以告诉 GPU 在混合来自不同 mipmap 级别的样本时,按精确百分比优先于另一个 mipmap 级别。在采样器中使用三线性过滤时,GPU 会混合 mipmap 级别。例如,GPU 的计算可能会返回值 0.5。0.5 值告诉 GPU 从一个 mipmap 级别获取 50% 所需的纹理信息,并从下一个 mipmap 级别获取剩余的 50%。如果添加 0.2 的 mipmap 偏差,则 0.5 值将更改为 0.7,并且 GPU 将从第一个 mipmap 级别获取 70% 的纹理信息,而从第二个 mipmap 级别中仅获取 30%。

GPU 具有全局 mipmap 偏差,默认情况下,它会将其应用于其 mipmap 级别选择。纹理可以有自己的 mipmap 偏差,Unity 会在全局 mipmap 偏差中添加或减去该偏差。还可以在着色器在 GPU 上运行的程序。更多信息
请参阅术语表
.

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

Unity 如何加载 mipmap

您可以使用 Mipmap Streaming 控制 Unity 在运行时加载 mipmap 的方式。

其他资源

GPU纹理格式参考
导入纹理