最后更新:2026年9月21日

游戏开发者的图像文件格式:DDS、TGA、PNG 和 KTX
在游戏开发中,纹理占据了运行时内存消耗和安装包大小中最大的单一部分。无论你是在制作独立风格的横版平台游戏,还是在 AAA 开放世界 RPG 中追求写实效果,纹理数据的存储、处理和导入方式直接决定了帧率、加载时间和硬件兼容性。
初学者常犯的错误是把游戏纹理当作网页图形来对待——认为磁盘上的轻量文件就等同于在游戏引擎中轻量的性能。但在 GPU 世界,运行时的实际情况完全不同。
在本次深入探讨中,我们将拆解现代游戏开发中最关键的四种纹理和图像文件格式:DDS、TGA、PNG 和 KTX。我们将研究它们的工作原理、在资产流水线中的位置以及何时使用它们。
黄金法则:磁盘存储 vs. 视频内存(VRAM)
在分析各个格式之前,开发者必须了解 磁盘存储压缩 与 GPU 硬件块压缩 之间的根本区别。
1. 磁盘压缩(PNG、JPEG、WebP)
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 可以直接烘焙进容器文件中。
像 DDS 和 KTX 这样的容器专门用于封装这些 GPU 原生格式,而 PNG 和 TGA 则在管线的早期阶段承担不同的角色。
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:
- 您可以将纹理存储为紧凑且通用可压缩的格式。
- 在运行时,客户端硬件会直接将文件转码为本地 GPU 所偏好的任何块格式(例如,GeForce RTX 上的 BC7,iPhone 上的 ASTC,较旧 Android 设备上的 ETC2)。
- 超级压缩(Zstandard)生成的文件在磁盘上比 JPEG 更小,并能在毫秒内转码为本机 VRAM 块。
优点
- 真正的跨平台标准: 在 Vulkan、WebGL、WebGPU 和移动设备上无缝运行。
- Basis Universal 转码: 单一资产构建即可面向桌面、移动和浏览器,无需重复导出纹理。
- 一流的 glTF 伴侣: 对于现代 3D 网络体验、元宇宙引擎和开放渲染管线至关重要。
缺点
- 管线工具成熟度: 需要现代构建链(例如来自 KTX-Software 套件的
toktx);旧的专有引擎可能缺乏开箱即用的集成。 - 转码器开销: 轻微的运行时转码延迟(但仍比完整的 PNG 软件解码快几个数量级)。
正面对比
| 功能 / 标准 | DDS | TGA | PNG | KTX / 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
- Source Assets: 将主文件和通道打包数据以 TGA 或 PNG 存储在项目仓库中,以确保颜色信息不被破坏。
- PC & Console Builds: 将源纹理烹饪为 DDS 文件,使用 BC7 处理高细节的 albedo/normal 图,使用 BC4/BC5 处理单通道和双通道遮罩。
- Cross-Platform, Web & Mobile Builds: 将运行时 3D 资产打包为 KTX 2.0,以在 Android、iOS 和 WebGPU 上实现通用转码,无需维护独立的美术分支。
- 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 渲染性能。