最后更新:2026年9月21日

Image File Formats for Game Developers: DDS, TGA, PNG, and KTX Compared

游戏开发者的图像文件格式:DDS、TGA、PNG 和 KTX

在游戏开发中,纹理占据了运行时内存消耗和安装包大小中最大的单一部分。无论你是在制作独立风格的横版平台游戏,还是在 AAA 开放世界 RPG 中追求写实效果,纹理数据的存储、处理和导入方式直接决定了帧率、加载时间和硬件兼容性。

初学者常犯的错误是把游戏纹理当作网页图形来对待——认为磁盘上的轻量文件就等同于在游戏引擎中轻量的性能。但在 GPU 世界,运行时的实际情况完全不同。

在本次深入探讨中,我们将拆解现代游戏开发中最关键的四种纹理和图像文件格式:DDS、TGA、PNG 和 KTX。我们将研究它们的工作原理、在资产流水线中的位置以及何时使用它们。

黄金法则:磁盘存储 vs. 视频内存(VRAM)

在分析各个格式之前,开发者必须了解 磁盘存储压缩GPU 硬件块压缩 之间的根本区别。

1. 磁盘压缩(PNGJPEGWebP

PNG 等格式使用无损熵编码(DEFLATE)。虽然 PNG 能在 SSD 或下载服务器上节省大量空间,但现代 GPU 无法直接采样 PNG 文件。当你的游戏引擎加载 PNG 时:

  • CPU 必须将文件解压缩为系统内存中的原始、未压缩的 32 位 RGBA 像素。
  • 未压缩的位图被上传到 VRAM。
  • 一个 2048×2048 的纹理大约消耗 16 MB 的 VRAM,无论 PNG 文件在磁盘上是 1 MB 还是 3 MB。

2. GPU 块压缩(BCn、ASTC、ETC2)

专用的 GPU 格式将固定像素块(通常是 4×4 像素块)压缩为更小的位表示。图形硬件直接在 VRAM 中对这些块进行采样,无需 CPU 端解压缩:

  • 直接的 VRAM 随机访问,零运行时解压缩开销。
  • 相同的 2048×2048 纹理使用 BC7/ASTC 只消耗约 4 MB 的 VRAM(降低了 75%)。
  • Mipmaps 可以直接烘焙进容器文件中。

DDSKTX 这样的容器专门用于封装这些 GPU 原生格式,而 PNGTGA 则在管线的早期阶段承担不同的角色。

1. DDS(DirectDraw 表面)

由微软在 DirectX 7 同时推出的 DirectDraw Surface (.dds) 格式是 PC、Xbox 和主机游戏开发中无可争议的行业主力。

技术特性

  • 容器类型: 原生 GPU 纹理容器。
  • 支持的压缩: BC1 到 BC7(块压缩 / DXT 系列),未压缩的 RGBA,浮点格式(用于 HDR 的 BC6H)。
  • 关键功能: 预烘焙的 mipmap、立方体贴图、纹理数组、体积(3D)纹理。

开发者使用 DDS 的原因

DDS 本质上是图形硬件所需数据的直接内存转储。加载带有预生成 mipmap 的 DDS 纹理时,引擎完全跳过 CPU 解压缩,直接向 GPU 发出 Direct3D 或 Vulkan 的内存拷贝。这消除了流式传输和关卡加载期间的 CPU 瓶颈。

优点

  • 极快的加载时间: 运行时无需任何解压缩 CPU 周期。
  • 预烘焙的 Mipmap: 离线生成的 mipmap 允许艺术家在不同 LOD 上控制过滤、锐化和法线贴图的归一化。
  • 显存效率: 原生使用行业标准的 BC 压缩算法。

缺点

  • DirectX/Windows Bias: 历史上与 Microsoft 生态系统绑定,尽管在现代桌面引擎上得到广泛支持。
  • Lossy Compression Artifacts: 块压缩(尤其是法线贴图上的 BC1)可能会产生块状伪影,除非使用 BC5/BC7。
  • Limited Mobile Support: 移动 GPU 通常更倾向于使用 ASTC 或 ETC2,而不是桌面 BC 格式。

2. TGA (Truevision Targa)

创建于 1984 年,TGA (.tga) 是一种未压缩或采用行程长度编码 (RLE) 的光栅图形文件格式,三十多年来一直是管线中的重要支柱。

技术特性

  • Container Type: 未压缩的创作/交换位图。
  • Bit Depths: 每像素 8、16、24 和 32 位(RGB + 专用的 8 位 Alpha 通道)。
  • Compression: 无或基本的 RLE(行程长度编码)。

开发者为何使用 TGA

TGA 因其极其简洁的架构而受到技术艺术家和引擎程序员的青睐。不同于 PNG 将 Alpha 通道嵌入复杂的过滤矩阵,TGA 将颜色数据和 Alpha 通道完全分离且保持原样。

在创建自定义遮罩时(例如,将粗糙度打包到红色通道,金属度打包到绿色通道,环境遮蔽打包到蓝色通道,且将高度打包到 Alpha 通道),TGA 确保通道之间不会出现细微的算法混合或颜色渗漏。

优点

  • 原始数据保真度: 位精确保留通道数值;非常适合通道打包的 ORM(遮蔽-粗糙度-金属度)纹理。
  • 轻松解析: 内部流水线工具、自定义导出器和自动化脚本可以用极少的代码行读取和写入 TGA 文件。
  • 通用 DCC 支持: Maya、3ds Max、Blender、Substance 3D 和 Photoshop 都提供原生、无障碍的 TGA 导出。

缺点

  • 巨大的文件体积: 在 Git/Perforce 仓库中占用大量空间,并导致分布式团队的下载速度变慢。
  • 不适合运行时使用: 不能作为压缩格式直接被 GPU 使用;必须在烹饪阶段由引擎转换。

3. PNG (便携式网络图形)

PNG (.png) 是全球最为认可的无损图像格式,使用 zlib/DEFLATE 压缩将丰富的 24 位和 32 位图像打包成极小的文件。

技术特性

  • 容器类型: 无损创作与交付格式。
  • 位深度: 每通道最高 16 位(48 位 RGB,64 位 RGBA)。
  • 压缩: 无损 DEFLATE 算法。

为什么开发者使用 PNG

PNG 作为 UI 资源、精灵、宣传材料以及中间源纹理的主要分发格式。对于在 Unity、Godot 或 Unreal Engine 中制作的 2D 游戏,PNG 提供清晰的像素保真度和完美的透明遮罩。

优点

  • 紧凑的仓库占用: 与未压缩的 TGA 相比,大幅降低项目检出大小。
  • 无损色彩质量: 在高对比度边缘和矢量风格插图上没有压缩伪影。
  • 原生 Alpha 透明度: 为复杂的半透明 UI 元素和粒子图层提供干净的 8 位 Alpha 通道支持。

缺点

  • CPU 解码负担重: 在运行时解压大型 PNG 会导致帧率卡顿,并在 GPU 上传前导致内存使用激增。
  • 预乘 Alpha 陷阱: 某些图像编辑器会在完全透明的像素中丢弃 RGB 数据,这会破坏纹理漂移并导致精灵出现暗色轮廓。
  • Zero VRAM Savings: 解压后在 GPU 内部成为完整的 32 位原始内存,除非被引擎的纹理烹饪器摄取。

4. KTX(Khronos 纹理)和 KTX 2.0

由 Khronos Group 开发——该组织负责 Vulkan、OpenGL 和 glTF——KTX (.ktx)KTX 2.0 代表了跨平台 GPU 纹理的现代开放标准。

技术特性

  • Container Type: 标准化的开放 GPU 纹理容器。
  • Compression Support: 支持 Basis Universal(ETC1S 和 UASTC)、ASTC、BCn、ETC2。
  • Key Capabilities: 通用纹理转码、mipmap、立方体贴图、数组纹理、glTF 集成。

为什么开发者使用 KTX

KTX 2.0 解决了碎片化的跨平台压缩难题。传统上,开发者必须为桌面/主机提供 DDS(BCn),而为移动/平板提供 ASTC/ETC2。

使用 KTX 2.0 和 Basis Universal

  1. 您可以将纹理存储为紧凑且通用可压缩的格式。
  2. 在运行时,客户端硬件会直接将文件转码为本地 GPU 所偏好的任何块格式(例如,GeForce RTX 上的 BC7,iPhone 上的 ASTC,较旧 Android 设备上的 ETC2)。
  3. 超级压缩(Zstandard)生成的文件在磁盘上比 JPEG 更小,并能在毫秒内转码为本机 VRAM 块。

优点

  • 真正的跨平台标准: 在 Vulkan、WebGL、WebGPU 和移动设备上无缝运行。
  • Basis Universal 转码: 单一资产构建即可面向桌面、移动和浏览器,无需重复导出纹理。
  • 一流的 glTF 伴侣: 对于现代 3D 网络体验、元宇宙引擎和开放渲染管线至关重要。

缺点

  • 管线工具成熟度: 需要现代构建链(例如来自 KTX-Software 套件的 toktx);旧的专有引擎可能缺乏开箱即用的集成。
  • 转码器开销: 轻微的运行时转码延迟(但仍比完整的 PNG 软件解码快几个数量级)。

正面对比

功能 / 标准DDSTGAPNGKTX / KTX 2.0
主要使用场景PC/主机 运行时源创作与遮罩2D 精灵与源艺术跨平台与 Web 运行时
直接 GPU 采样是(本机)是(本机或转码)
VRAM 压缩是(BC1–BC7)否(未压缩)否(未压缩)是(ASTC、BCn、Basis)
预烘焙 Mipmaps
磁盘大小中等非常高极小 (Basis + Zstandard)
生态系统DirectX / 桌面引擎DCC 软件 / 源管线通用 Web 与 2D 引擎Vulkan,WebGPU,glTF

实用指南:构建理想的资产流水线

如何在商业制作流水线中组织这四种格式?以下是顶级工作室构建纹理流水线的方式:

[DCC & Authoring]               [Engine Ingestion / Cook]            [Runtime GPU Target]
Substance / Photoshop / Blender           Unreal / Unity / Custom Toolset      VRAM Memory Blocks
 
   • TGA (Clean packed masks)    ──────►  Build Engine Texture Cooker  ──────►  DDS (DirectX / Windows / Xbox)
   • PNG (UI & 2D Sprites)       ──────►  Generates Mipmaps & Block    ──────►  KTX2 (Vulkan / WebGPU / Mobile)
   • PSD / EXR (HDR & masters)   ──────►  Compression Automatically   
  1. Source Assets: 将主文件和通道打包数据以 TGAPNG 存储在项目仓库中,以确保颜色信息不被破坏。
  2. PC & Console Builds: 将源纹理烹饪为 DDS 文件,使用 BC7 处理高细节的 albedo/normal 图,使用 BC4/BC5 处理单通道和双通道遮罩。
  3. Cross-Platform, Web & Mobile Builds: 将运行时 3D 资产打包为 KTX 2.0,以在 Android、iOS 和 WebGPU 上实现通用转码,无需维护独立的美术分支。
  4. User Interfaces: 将运行时 UI 纹理保持为清晰的未压缩格式,或使用从高分辨率 PNG 源文件生成的无损引擎图集。

常见问题解答(FAQ)

Q1. 游戏引擎能直接从显存采样 PNG 吗?

A1: 否;GPU 无法解析 PNG 压缩,因此引擎必须先在内存中将 PNG 文件解压为原始 32 位位图,然后再上传到显存。

Q2. 为什么技术艺术家在遮罩打包时更倾向于使用 TGA 而不是 PNG?

A2: TGA 存储纯净的、未压缩的通道数据,不会出现颜色渗漏或在各个 RGB 和 Alpha 通道之间进行破坏性的边缘透明度过滤。

Q3. 在 DDS 容器中用于法线贴图的块压缩算法应该选哪种?

A3: 对法线贴图使用 BC5(双通道切线空间压缩),以在不出现标准 BC1 块伪影的情况下保留光滑的表面曲率。

Q4. KTX 2.0 相较于 DDS 在跨平台游戏中有哪些优势?

A4: KTX 2.0 支持 Basis Universal,这使得单个文件在启动时能够即时转码为桌面 BCn 格式或移动端 ASTC/ETC 格式。

Q5. 在 DDS 或 KTX 文件中预烘焙 mipmaps 会增加磁盘空间吗?

A5: 是的,包含完整的 mipmap 链会使文件的原始数据增加约 33%,但它消除了运行时闪烁,提升了缓存局部性,并增强了 GPU 渲染性能。

另见