<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>DDS 与 TGA 对比 on File Format Blog</title>
    <link>https://blog.fileformat.com/zh/tag/dds-%E4%B8%8E-tga-%E5%AF%B9%E6%AF%94/</link>
    <description>Recent content in DDS 与 TGA 对比 on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Mon, 21 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/zh/tag/dds-%E4%B8%8E-tga-%E5%AF%B9%E6%AF%94/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>游戏开发者的图像文件格式 DDS、TGA、PNG 与 KTX</title>
      <link>https://blog.fileformat.com/zh/image/image-file-formats-for-gamevdevelopers-dds-tga-png-and-ktx/</link>
      <pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/zh/image/image-file-formats-for-gamevdevelopers-dds-tga-png-and-ktx/</guid>
      <description>了解 DDS、TGA、PNG 与 KTX 之间的差异。学习 GPU 压缩、显存占用以及管线工作流如何影响游戏性能。</description>
      <content:encoded><![CDATA[<p><strong>最后更新</strong>：2026年9月21日</p>
<figure class="align-center ">
    <img loading="lazy" src="images/image-file-formats-for-gamevdevelopers-dds-tga-png-and-ktx.png#center"
         alt="Image File Formats for Game Developers: DDS, TGA, PNG, and KTX Compared"/> 
</figure>

<h2 id="游戏开发者的图像文件格式ddstgapng-和-ktx">游戏开发者的图像文件格式：DDS、TGA、PNG 和 KTX</h2>
<p>在游戏开发中，纹理占据了运行时内存消耗和安装包大小中最大的单一部分。无论你是在制作独立风格的横版平台游戏，还是在 AAA 开放世界 RPG 中追求写实效果，纹理数据的存储、处理和导入方式直接决定了帧率、加载时间和硬件兼容性。</p>
<p>初学者常犯的错误是把游戏纹理当作网页图形来对待——认为磁盘上的轻量文件就等同于在游戏引擎中轻量的性能。但在 GPU 世界，运行时的实际情况完全不同。</p>
<p>在本次深入探讨中，我们将拆解现代游戏开发中最关键的四种纹理和图像文件格式：<strong>DDS、TGA、PNG 和 KTX</strong>。我们将研究它们的工作原理、在资产流水线中的位置以及何时使用它们。</p>
<h2 id="黄金法则磁盘存储-vs-视频内存vram">黄金法则：磁盘存储 vs. 视频内存（VRAM）</h2>
<p>在分析各个格式之前，开发者必须了解 <strong>磁盘存储压缩</strong> 与 <strong>GPU 硬件块压缩</strong> 之间的根本区别。</p>
<h3 id="1-磁盘压缩png12jpeg9webp10">1. 磁盘压缩（<a href="https://docs.fileformat.com/image/png/">PNG</a>、<a href="https://docs.fileformat.com/image/jpeg/">JPEG</a>、<a href="https://docs.fileformat.com/image/webp/">WebP</a>）</h3>
<p>PNG 等格式使用无损熵编码（DEFLATE）。虽然 PNG 能在 SSD 或下载服务器上节省大量空间，但现代 GPU <strong>无法直接采样 PNG 文件</strong>。当你的游戏引擎加载 PNG 时：</p>
<ul>
<li>CPU 必须将文件解压缩为系统内存中的原始、未压缩的 32 位 RGBA 像素。</li>
<li>未压缩的位图被上传到 VRAM。</li>
<li>一个 2048×2048 的纹理大约消耗 <strong>16 MB 的 VRAM</strong>，无论 PNG 文件在磁盘上是 1 MB 还是 3 MB。</li>
</ul>
<h3 id="2-gpu-块压缩bcnastcetc2">2. GPU 块压缩（BCn、ASTC、ETC2）</h3>
<p>专用的 GPU 格式将固定像素块（通常是 4×4 像素块）压缩为更小的位表示。图形硬件直接在 VRAM 中对这些块进行采样，无需 CPU 端解压缩：</p>
<ul>
<li>直接的 VRAM 随机访问，零运行时解压缩开销。</li>
<li>相同的 2048×2048 纹理使用 BC7/ASTC 只消耗约 <strong>4 MB 的 VRAM</strong>（降低了 75%）。</li>
<li>Mipmaps 可以直接烘焙进容器文件中。</li>
</ul>
<p>像 <strong>DDS</strong> 和 <strong>KTX</strong> 这样的容器专门用于封装这些 GPU 原生格式，而 <strong>PNG</strong> 和 <strong>TGA</strong> 则在管线的早期阶段承担不同的角色。</p>
<h2 id="1-dds14directdraw-表面">1. <a href="https://docs.fileformat.com/image/dds/">DDS</a>（DirectDraw 表面）</h2>
<p>由微软在 DirectX 7 同时推出的 <strong>DirectDraw Surface (.dds)</strong> 格式是 PC、Xbox 和主机游戏开发中无可争议的行业主力。</p>
<h3 id="技术特性">技术特性</h3>
<ul>
<li><strong>容器类型:</strong> 原生 GPU 纹理容器。</li>
<li><strong>支持的压缩:</strong> BC1 到 BC7（块压缩 / DXT 系列），未压缩的 RGBA，浮点格式（用于 HDR 的 BC6H）。</li>
<li><strong>关键功能:</strong> 预烘焙的 mipmap、立方体贴图、纹理数组、体积（3D）纹理。</li>
</ul>
<h3 id="开发者使用-dds-的原因">开发者使用 DDS 的原因</h3>
<p>DDS 本质上是图形硬件所需数据的直接内存转储。加载带有预生成 mipmap 的 DDS 纹理时，引擎完全跳过 CPU 解压缩，直接向 GPU 发出 Direct3D 或 Vulkan 的内存拷贝。这消除了流式传输和关卡加载期间的 CPU 瓶颈。</p>
<h3 id="优点">优点</h3>
<ul>
<li><strong>极快的加载时间:</strong> 运行时无需任何解压缩 CPU 周期。</li>
<li><strong>预烘焙的 Mipmap:</strong> 离线生成的 mipmap 允许艺术家在不同 LOD 上控制过滤、锐化和法线贴图的归一化。</li>
<li><strong>显存效率:</strong> 原生使用行业标准的 BC 压缩算法。</li>
</ul>
<h3 id="缺点">缺点</h3>
<ul>
<li><strong>DirectX/Windows Bias:</strong> 历史上与 Microsoft 生态系统绑定，尽管在现代桌面引擎上得到广泛支持。</li>
<li><strong>Lossy Compression Artifacts:</strong> 块压缩（尤其是法线贴图上的 BC1）可能会产生块状伪影，除非使用 BC5/BC7。</li>
<li><strong>Limited Mobile Support:</strong> 移动 GPU 通常更倾向于使用 ASTC 或 ETC2，而不是桌面 BC 格式。</li>
</ul>
<h2 id="2-tga16-truevision-targa">2. <a href="https://docs.fileformat.com/image/tga/">TGA</a> (Truevision Targa)</h2>
<p>创建于 1984 年，<strong>TGA (.tga)</strong> 是一种未压缩或采用行程长度编码 (RLE) 的光栅图形文件格式，三十多年来一直是管线中的重要支柱。</p>
<h3 id="技术特性-1">技术特性</h3>
<ul>
<li><strong>Container Type:</strong> 未压缩的创作/交换位图。</li>
<li><strong>Bit Depths:</strong> 每像素 8、16、24 和 32 位（RGB + 专用的 8 位 Alpha 通道）。</li>
<li><strong>Compression:</strong> 无或基本的 RLE（行程长度编码）。</li>
</ul>
<h3 id="开发者为何使用-tga">开发者为何使用 TGA</h3>
<p>TGA 因其极其简洁的架构而受到技术艺术家和引擎程序员的青睐。不同于 PNG 将 Alpha 通道嵌入复杂的过滤矩阵，TGA 将颜色数据和 Alpha 通道完全分离且保持原样。</p>
<p>在创建自定义遮罩时（例如，将粗糙度打包到红色通道，金属度打包到绿色通道，环境遮蔽打包到蓝色通道，且将高度打包到 Alpha 通道），TGA 确保通道之间不会出现细微的算法混合或颜色渗漏。</p>
<h3 id="优点-1">优点</h3>
<ul>
<li><strong>原始数据保真度:</strong> 位精确保留通道数值；非常适合通道打包的 ORM（遮蔽-粗糙度-金属度）纹理。</li>
<li><strong>轻松解析:</strong> 内部流水线工具、自定义导出器和自动化脚本可以用极少的代码行读取和写入 TGA 文件。</li>
<li><strong>通用 DCC 支持:</strong> Maya、3ds Max、Blender、Substance 3D 和 Photoshop 都提供原生、无障碍的 TGA 导出。</li>
</ul>
<h3 id="缺点-1">缺点</h3>
<ul>
<li><strong>巨大的文件体积:</strong> 在 Git/Perforce 仓库中占用大量空间，并导致分布式团队的下载速度变慢。</li>
<li><strong>不适合运行时使用:</strong> 不能作为压缩格式直接被 GPU 使用；必须在烹饪阶段由引擎转换。</li>
</ul>
<h2 id="3-png12-便携式网络图形">3. <a href="https://docs.fileformat.com/image/png/">PNG</a> (便携式网络图形)</h2>
<p><strong>PNG (.png)</strong> 是全球最为认可的无损图像格式，使用 zlib/DEFLATE 压缩将丰富的 24 位和 32 位图像打包成极小的文件。</p>
<h3 id="技术特性-2">技术特性</h3>
<ul>
<li><strong>容器类型:</strong> 无损创作与交付格式。</li>
<li><strong>位深度:</strong> 每通道最高 16 位（48 位 RGB，64 位 RGBA）。</li>
<li><strong>压缩:</strong> 无损 DEFLATE 算法。</li>
</ul>
<h3 id="为什么开发者使用-png">为什么开发者使用 PNG</h3>
<p>PNG 作为 UI 资源、精灵、宣传材料以及中间源纹理的主要分发格式。对于在 Unity、Godot 或 Unreal Engine 中制作的 2D 游戏，PNG 提供清晰的像素保真度和完美的透明遮罩。</p>
<h3 id="优点-2">优点</h3>
<ul>
<li><strong>紧凑的仓库占用:</strong> 与未压缩的 TGA 相比，大幅降低项目检出大小。</li>
<li><strong>无损色彩质量:</strong> 在高对比度边缘和矢量风格插图上没有压缩伪影。</li>
<li><strong>原生 Alpha 透明度:</strong> 为复杂的半透明 UI 元素和粒子图层提供干净的 8 位 Alpha 通道支持。</li>
</ul>
<h3 id="缺点-2">缺点</h3>
<ul>
<li><strong>CPU 解码负担重:</strong> 在运行时解压大型 PNG 会导致帧率卡顿，并在 GPU 上传前导致内存使用激增。</li>
<li><strong>预乘 Alpha 陷阱:</strong> 某些图像编辑器会在完全透明的像素中丢弃 RGB 数据，这会破坏纹理漂移并导致精灵出现暗色轮廓。</li>
<li><strong>Zero VRAM Savings:</strong> 解压后在 GPU 内部成为完整的 32 位原始内存，除非被引擎的纹理烹饪器摄取。</li>
</ul>
<h2 id="4-ktxkhronos-纹理和-ktx-20">4. KTX（Khronos 纹理）和 KTX 2.0</h2>
<p>由 Khronos Group 开发——该组织负责 Vulkan、OpenGL 和 glTF——<strong>KTX (.ktx)</strong> 和 <strong>KTX 2.0</strong> 代表了跨平台 GPU 纹理的现代开放标准。</p>
<h3 id="技术特性-3">技术特性</h3>
<ul>
<li><strong>Container Type:</strong> 标准化的开放 GPU 纹理容器。</li>
<li><strong>Compression Support:</strong> 支持 Basis Universal（ETC1S 和 UASTC）、ASTC、BCn、ETC2。</li>
<li><strong>Key Capabilities:</strong> 通用纹理转码、mipmap、立方体贴图、数组纹理、glTF 集成。</li>
</ul>
<h3 id="为什么开发者使用-ktx">为什么开发者使用 KTX</h3>
<p>KTX 2.0 解决了碎片化的跨平台压缩难题。传统上，开发者必须为桌面/主机提供 DDS（BCn），而为移动/平板提供 ASTC/ETC2。</p>
<p>使用 KTX 2.0 和 <strong>Basis Universal</strong>：</p>
<ol>
<li>您可以将纹理存储为紧凑且通用可压缩的格式。</li>
<li>在运行时，客户端硬件会直接将文件转码为本地 GPU 所偏好的任何块格式（例如，GeForce RTX 上的 BC7，iPhone 上的 ASTC，较旧 Android 设备上的 ETC2）。</li>
<li>超级压缩（Zstandard）生成的文件在磁盘上比 JPEG 更小，并能在毫秒内转码为本机 VRAM 块。</li>
</ol>
<h3 id="优点-3">优点</h3>
<ul>
<li><strong>真正的跨平台标准：</strong> 在 Vulkan、WebGL、WebGPU 和移动设备上无缝运行。</li>
<li><strong>Basis Universal 转码：</strong> 单一资产构建即可面向桌面、移动和浏览器，无需重复导出纹理。</li>
<li><strong>一流的 glTF 伴侣：</strong> 对于现代 3D 网络体验、元宇宙引擎和开放渲染管线至关重要。</li>
</ul>
<h3 id="缺点-3">缺点</h3>
<ul>
<li><strong>管线工具成熟度：</strong> 需要现代构建链（例如来自 KTX-Software 套件的 <code>toktx</code>）；旧的专有引擎可能缺乏开箱即用的集成。</li>
<li><strong>转码器开销：</strong> 轻微的运行时转码延迟（但仍比完整的 PNG 软件解码快几个数量级）。</li>
</ul>
<h2 id="正面对比">正面对比</h2>
<table>
<thead>
<tr>
<th style="text-align:left">功能 / 标准</th>
<th style="text-align:left"><a href="https://docs.fileformat.com/image/dds/">DDS</a></th>
<th style="text-align:left"><a href="https://docs.fileformat.com/image/tga/">TGA</a></th>
<th style="text-align:left"><a href="https://docs.fileformat.com/image/png/">PNG</a></th>
<th style="text-align:left">KTX / KTX 2.0</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>主要使用场景</strong></td>
<td style="text-align:left">PC/主机 运行时</td>
<td style="text-align:left">源创作与遮罩</td>
<td style="text-align:left">2D 精灵与源艺术</td>
<td style="text-align:left">跨平台与 Web 运行时</td>
</tr>
<tr>
<td style="text-align:left"><strong>直接 GPU 采样</strong></td>
<td style="text-align:left">是（本机）</td>
<td style="text-align:left">否</td>
<td style="text-align:left">否</td>
<td style="text-align:left">是（本机或转码）</td>
</tr>
<tr>
<td style="text-align:left"><strong>VRAM 压缩</strong></td>
<td style="text-align:left">是（BC1–BC7）</td>
<td style="text-align:left">否（未压缩）</td>
<td style="text-align:left">否（未压缩）</td>
<td style="text-align:left">是（ASTC、BCn、Basis）</td>
</tr>
<tr>
<td style="text-align:left"><strong>预烘焙 Mipmaps</strong></td>
<td style="text-align:left">是</td>
<td style="text-align:left">否</td>
<td style="text-align:left">否</td>
<td style="text-align:left">是</td>
</tr>
<tr>
<td style="text-align:left"><strong>磁盘大小</strong></td>
<td style="text-align:left">中等</td>
<td style="text-align:left">非常高</td>
<td style="text-align:left">小</td>
<td style="text-align:left">极小 (Basis + Zstandard)</td>
</tr>
<tr>
<td style="text-align:left"><strong>生态系统</strong></td>
<td style="text-align:left">DirectX / 桌面引擎</td>
<td style="text-align:left">DCC 软件 / 源管线</td>
<td style="text-align:left">通用 Web 与 2D 引擎</td>
<td style="text-align:left">Vulkan，WebGPU，glTF</td>
</tr>
</tbody>
</table>
<h2 id="实用指南构建理想的资产流水线">实用指南：构建理想的资产流水线</h2>
<p>如何在商业制作流水线中组织这四种格式？以下是顶级工作室构建纹理流水线的方式：</p>
<pre tabindex="0"><code>[DCC &amp; 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 &amp; 2D Sprites)       ──────►  Generates Mipmaps &amp; Block    ──────►  KTX2 (Vulkan / WebGPU / Mobile)
   • PSD / EXR (HDR &amp; masters)   ──────►  Compression Automatically   
</code></pre><ol>
<li><strong>Source Assets:</strong> 将主文件和通道打包数据以 <strong>TGA</strong> 或 <strong>PNG</strong> 存储在项目仓库中，以确保颜色信息不被破坏。</li>
<li><strong>PC &amp; Console Builds:</strong> 将源纹理烹饪为 <strong>DDS</strong> 文件，使用 BC7 处理高细节的 albedo/normal 图，使用 BC4/BC5 处理单通道和双通道遮罩。</li>
<li><strong>Cross-Platform, Web &amp; Mobile Builds:</strong> 将运行时 3D 资产打包为 <strong>KTX 2.0</strong>，以在 Android、iOS 和 WebGPU 上实现通用转码，无需维护独立的美术分支。</li>
<li><strong>User Interfaces:</strong> 将运行时 UI 纹理保持为清晰的未压缩格式，或使用从高分辨率 <strong>PNG</strong> 源文件生成的无损引擎图集。</li>
</ol>
<h2 id="常见问题解答faq">常见问题解答（FAQ）</h2>
<h3 id="q1-游戏引擎能直接从显存采样-png-吗">Q1. 游戏引擎能直接从显存采样 PNG 吗？</h3>
<p><strong>A1:</strong> 否；GPU 无法解析 PNG 压缩，因此引擎必须先在内存中将 PNG 文件解压为原始 32 位位图，然后再上传到显存。</p>
<h3 id="q2-为什么技术艺术家在遮罩打包时更倾向于使用-tga-而不是-png">Q2. 为什么技术艺术家在遮罩打包时更倾向于使用 TGA 而不是 PNG？</h3>
<p><strong>A2:</strong> TGA 存储纯净的、未压缩的通道数据，不会出现颜色渗漏或在各个 RGB 和 Alpha 通道之间进行破坏性的边缘透明度过滤。</p>
<h3 id="q3-在-dds-容器中用于法线贴图的块压缩算法应该选哪种">Q3. 在 DDS 容器中用于法线贴图的块压缩算法应该选哪种？</h3>
<p><strong>A3:</strong> 对法线贴图使用 <strong>BC5</strong>（双通道切线空间压缩），以在不出现标准 BC1 块伪影的情况下保留光滑的表面曲率。</p>
<h3 id="q4-ktx-20-相较于-dds-在跨平台游戏中有哪些优势">Q4. KTX 2.0 相较于 DDS 在跨平台游戏中有哪些优势？</h3>
<p><strong>A4:</strong> KTX 2.0 支持 Basis Universal，这使得单个文件在启动时能够即时转码为桌面 BCn 格式或移动端 ASTC/ETC 格式。</p>
<h3 id="q5-在-dds-或-ktx-文件中预烘焙-mipmaps-会增加磁盘空间吗">Q5. 在 DDS 或 KTX 文件中预烘焙 mipmaps 会增加磁盘空间吗？</h3>
<p><strong>A5:</strong> 是的，包含完整的 mipmap 链会使文件的原始数据增加约 33%，但它消除了运行时闪烁，提升了缓存局部性，并增强了 GPU 渲染性能。</p>
<h2 id="另见">另见</h2>
<ul>
<li><a href="https://blog.fileformat.com/en/image/webp-vs-avif-vs-jpeg-xl-which-image-format-should-developers-choose-in-2026/">WebP vs AVIF vs JPEG XL：2026 年开发者最佳图像格式</a></li>
<li><a href="https://blog.fileformat.com/image/difference-between-bmp-and-png/">BMP 与 PNG 的区别</a></li>
<li><a href="https://blog.fileformat.com/2021/08/19/apng-vs-bmp-which-image-file-format-is-better/">APNG vs BMP：哪种图像文件格式更好？</a></li>
<li><a href="https://blog.fileformat.com/2021/08/25/raster-vs-vector-images-a-brief-comparison/">光栅图像 vs 矢量图像：简要比较</a></li>
</ul>
<!-- raw HTML omitted -->
]]></content:encoded>
    </item>
    
  </channel>
</rss>
