Skip to content

第 4.1 章:纹理 (.paa, .edds, .tga)

首页 | 纹理 | 下一章:3D 模型 >>


简介

DayZ 中你看到的每一个表面——武器皮肤、服装、地形、UI 图标——都由纹理文件定义。引擎在运行时使用一种名为 PAA 的专有压缩格式,但在开发过程中你需要使用多种源格式,这些格式在构建过程中会被转换。理解这些格式、将它们绑定到材质的命名约定以及引擎执行的分辨率规则,是为 DayZ 模组创建视觉内容的基础。

本章涵盖你将遇到的每种纹理格式、告诉引擎如何解读每个纹理的后缀命名系统、分辨率和 Alpha 通道要求,以及格式之间的实际转换工作流程。


目录


纹理格式概述

DayZ 在开发管线的不同阶段使用四种纹理格式:

格式扩展名角色Alpha 支持使用场景
PAA.paa运行时游戏格式(压缩)最终构建,打包在 PBO 中
EDDS.edds编辑器/中间 DDS 变体Object Builder 预览,自动转换
TGA.tga未压缩的源艺术素材美术师工作空间,Photoshop/GIMP 导出
PNG.png便携源格式UI 纹理,外部工具

一般工作流程为:源文件 (TGA/PNG) --> DayZ Tools 转换 --> PAA(游戏就绪)


PAA 格式

PAA(PAcked Arma)是 Enfusion 引擎在运行时使用的原生压缩纹理格式。每个装入 PBO 的纹理必须是 PAA 格式(或在二进制化过程中被转换为 PAA)。

特征

  • 压缩: 根据 Alpha 通道的存在和质量设置,内部使用 DXT1、DXT5 或 ARGB8888 压缩。
  • 含 Mipmap: PAA 文件包含完整的 Mipmap 链,在转换时自动生成。这对渲染性能至关重要——引擎根据距离选择合适的 Mip 级别。
  • 二的幂次方尺寸: 引擎要求 PAA 纹理的尺寸为 2 的幂次方(256、512、1024、2048、4096)。
  • 运行时只读: 引擎直接从 PBO 加载 PAA 文件。你永远不会编辑 PAA 文件——你编辑源文件并重新转换。

内部压缩类型

类型Alpha质量使用场景
DXT1无(1 位)好,6:1 比率不透明纹理,地形
DXT5完整 8 位好,4:1 比率具有平滑 Alpha 的纹理(玻璃、植被)
ARGB4444完整 4 位中等UI 纹理,小图标
ARGB8888完整 8 位无损调试,最高质量(文件较大)
AI88灰度 + Alpha法线贴图,灰度遮罩

何时会看到 PAA 文件

  • 在解包的原版游戏数据中(dta/ 和插件 PBO)
  • 作为 TexView2 转换的输出
  • 作为 Binarize 处理源纹理的输出
  • 在你的模组最终 PBO 构建后

EDDS 格式

EDDS 是一种中间纹理格式,主要由 DayZ 的 Object Builder 和编辑器工具使用。它本质上是标准 DirectDraw Surface (DDS) 格式的变体,带有引擎特定的元数据。

特征

  • 预览格式: Object Builder 可以直接显示 EDDS 纹理,使其在模型创建过程中非常有用。
  • 自动转换为 PAA: 当你运行 Binarize 或 AddonBuilder(不使用 -packonly)时,源树中的 EDDS 文件会自动转换为 PAA。
  • 比 PAA 大: EDDS 文件未针对分发进行优化——它们是为编辑器便利而存在的。
  • DayZ-Samples 格式: Bohemia 提供的官方 DayZ-Samples 大量使用 EDDS 纹理。

EDDS 工作流程

美术师创建 TGA/PNG 源文件
    --> Photoshop DDS 插件导出 EDDS 用于预览
        --> Object Builder 在模型上显示 EDDS
            --> Binarize 将 EDDS 转换为 PAA 用于 PBO

提示: 如果你愿意,可以完全跳过 EDDS。使用 TexView2 将源纹理直接转换为 PAA,并在材质中引用 PAA 路径。EDDS 是一种便利手段,不是必需的。


TGA 格式

TGA(Truevision TGA / Targa)是 DayZ 纹理工作的传统未压缩源格式。许多原版 DayZ 纹理最初是以 TGA 文件编写的。

特征

  • 未压缩: 无质量损失,完整色彩深度(24 位或带 Alpha 的 32 位)。
  • 文件较大: 带 Alpha 的 2048x2048 TGA 大约为 16 MB。
  • Alpha 在专用通道中: TGA 支持适当的 8 位 Alpha 通道(32 位 TGA),可直接映射到 PAA 中的透明度。
  • TexView2 兼容: TexView2 可以直接打开 TGA 文件并将其转换为 PAA。

何时使用 TGA

  • 作为你从头创作的纹理的主源文件。
  • 从 Substance Painter 或 Photoshop 导出用于 DayZ 时。
  • 当 DayZ-Samples 文档或社区教程指定 TGA 作为源格式时。

TGA 导出设置

为 DayZ 转换导出 TGA 时:

  • 位深度: 32 位(如果需要 Alpha)或 24 位(不透明纹理)
  • 压缩: 无(未压缩)
  • 方向: 左下角原点(标准 TGA 方向)
  • 分辨率: 必须是 2 的幂次方(参见分辨率要求

PNG 格式

PNG(Portable Network Graphics)得到广泛支持,可作为替代源格式使用,特别适用于 UI 纹理。

特征

  • 无损压缩: 比 TGA 小但保留完整质量。
  • 完整 Alpha 通道: 32 位 PNG 支持 8 位 Alpha。
  • TexView2 兼容: TexView2 可以打开并将 PNG 转换为 PAA。
  • UI 友好: 许多模组中的 UI 图像集和图标使用 PNG 作为源格式。

何时使用 PNG

  • UI 纹理和图标: PNG 是图像集和 HUD 元素的实用选择。
  • 简单重新纹理: 当你只需要颜色/漫反射贴图而没有复杂 Alpha 时。
  • 跨工具工作流程: PNG 在图像编辑器、网页工具和脚本中得到普遍支持。

注意: PNG 不是 Bohemia 的官方源格式——他们偏好 TGA。但是,转换工具可以无问题地处理 PNG,许多模组制作者都成功使用它。


纹理命名约定

DayZ 使用严格的后缀系统来标识每个纹理的角色。引擎和材质通过文件名引用纹理,后缀告诉引擎和其他模组制作者纹理包含什么类型的数据。

必需后缀

后缀全称用途典型格式
_coColor / Diffuse表面的基础颜色(反照率)RGB,可选 Alpha
_nohqNormal Map (High Quality)表面细节法线,定义凹凸和凹槽RGB(切线空间法线)
_smdiSpecular / Metallic / Detail Index控制光泽度和金属属性RGB 通道编码单独的数据
_caColor with AlphaAlpha 通道携带有意义数据(透明度、遮罩)的颜色纹理RGBA
_asAmbient Shadow环境光遮蔽 / 阴影烘焙灰度
_mcMacro在远距离可见的大尺度颜色变化RGB
_liLight / Emissive自发光贴图(发光部分)RGB
_noNormal Map (Standard)较低质量的法线贴图变体RGB
_mcaMacro with Alpha带 Alpha 通道的宏观纹理RGBA
_deDetail用于近距离表面变化的平铺细节纹理RGB

命名约定实践

单个物品通常有多个纹理,共享一个基础名称:

data/
  my_rifle_co.paa          <-- 基础颜色(你看到的)
  my_rifle_nohq.paa        <-- 法线贴图(表面凹凸)
  my_rifle_smdi.paa         <-- 高光/金属(光泽度)
  my_rifle_as.paa           <-- 环境阴影(烘焙 AO)
  my_rifle_ca.paa           <-- 带 Alpha 的颜色(如果需要透明度)

_smdi 通道

高光/金属/细节纹理将三个数据流打包到一张 RGB 图像中:

通道数据范围效果
R金属度0-2550 = 非金属,255 = 全金属
G粗糙度(反向高光)0-2550 = 粗糙/哑光,255 = 光滑/光泽
B细节索引 / AO0-255细节平铺或环境光遮蔽

_nohq 通道

DayZ 中的法线贴图使用切线空间编码:

通道数据
RX 轴法线(左右)
GY 轴法线(上下)
BZ 轴法线(朝向观察者)
A高光功率(可选,取决于材质)

分辨率要求

Enfusion 引擎要求所有纹理具有 二的幂次方尺寸。宽度和高度必须各自独立地为 2 的幂次方,但不必相等(非正方形纹理是有效的)。

有效尺寸

尺寸典型用途
64x64微型图标,UI 元素
128x128小图标,物品栏缩略图
256x256UI 面板,小物品纹理
512x512标准物品纹理,服装
1024x1024武器,精细服装,车辆零件
2048x2048高细节武器,角色模型
4096x4096地形纹理,大型车辆纹理

非正方形纹理

非正方形的二的幂次方纹理是有效的:

256x512    -- 有效(两者都是 2 的幂次方)
512x1024   -- 有效
1024x2048  -- 有效
300x512    -- 无效(300 不是 2 的幂次方)

分辨率指南

  • 武器: 主体 2048x2048,配件 1024x1024。
  • 服装: 根据表面积覆盖范围选择 1024x1024 或 2048x2048。
  • UI 图标: 物品栏图标 128x128 或 256x256,HUD 元素 64x64。
  • 地形: 卫星地图 4096x4096,材质贴片 512x512 或 1024x1024。
  • 法线贴图: 与对应颜色纹理相同的分辨率。
  • SMDI 贴图: 与对应颜色纹理相同的分辨率。

警告: 如果纹理的尺寸不是二的幂次方,引擎将拒绝加载它或显示品红色错误纹理。TexView2 在转换时会显示警告。


Alpha 通道支持

纹理中的 Alpha 通道承载颜色之外的附加数据。其解读方式取决于纹理后缀和材质着色器。

Alpha 通道角色

后缀Alpha 解读
_co通常未使用;如果存在,可能为简单材质定义透明度
_ca透明度遮罩(0 = 完全透明,255 = 完全不透明)
_nohq高光功率贴图(越高 = 越锐利的高光)
_smdi通常未使用
_li自发光强度遮罩

创建带 Alpha 的纹理

在你的图像编辑器(Photoshop、GIMP、Krita)中:

  1. 正常创建 RGB 内容。
  2. 添加 Alpha 通道。
  3. 在需要完全不透明/效果的地方涂白色(255),在不需要的地方涂黑色(0)。
  4. 导出为 32 位 TGA 或 PNG。
  5. 使用 TexView2 转换为 PAA——它会自动检测 Alpha 通道。

在 TexView2 中验证 Alpha

在 TexView2 中打开 PAA 并使用通道显示按钮:

  • RGBA -- 显示最终合成效果
  • RGB -- 仅显示颜色
  • A -- 仅显示 Alpha 通道(白色 = 不透明,黑色 = 透明)

格式之间的转换

TexView2(主要工具)

TexView2 包含在 DayZ Tools 中,是标准的纹理转换工具。

打开文件:

  1. 从 DayZ Tools 或直接从 DayZ Tools\Bin\TexView2\TexView2.exe 启动 TexView2。
  2. 打开你的源文件(TGA、PNG 或 EDDS)。
  3. 验证图像是否正确并检查尺寸。

转换为 PAA:

  1. 在 TexView2 中打开源纹理。
  2. 进入 File --> Save As
  3. 选择 PAA 作为输出格式。
  4. 选择压缩类型:
    • DXT1 用于不透明纹理(不需要 Alpha)
    • DXT5 用于具有 Alpha 透明度的纹理
    • ARGB4444 用于文件大小重要的小型 UI 纹理
  5. 点击 Save

通过命令行批量转换:

bash
# 将单个 TGA 转换为 PAA
"P:\DayZ Tools\Bin\TexView2\TexView2.exe" -i "source.tga" -o "output.paa"

# TexView2 会根据 Alpha 通道的存在自动选择压缩方式

Binarize(自动化)

当 Binarize 处理你的模组源目录时,它会自动将所有识别的纹理格式(TGA、PNG、EDDS)转换为 PAA。这作为 AddonBuilder 管线的一部分发生。

Binarize 转换流程:

source/mod_name/data/texture_co.tga
    --> Binarize 检测到 TGA
        --> 自动选择压缩方式转换为 PAA
            --> 输出:build/mod_name/data/texture_co.paa

手动转换表

来源目标工具备注
TGA --> PAATexView2标准工作流程
PNG --> PAATexView2与 TGA 完全相同
EDDS --> PAATexView2 或 Binarize构建时自动完成
PAA --> TGATexView2(另存为 TGA)用于编辑现有纹理
PAA --> PNGTexView2(另存为 PNG)用于提取为便携格式
PSD --> TGA/PNGPhotoshop/GIMP从编辑器导出,然后转换

纹理质量与压缩

压缩类型选择

场景推荐压缩原因
不透明漫反射 (_co)DXT1最佳比率,无需 Alpha
透明漫反射 (_ca)DXT5完整 Alpha 支持
法线贴图 (_nohq)DXT5Alpha 通道携带高光功率
高光贴图 (_smdi)DXT1通常不透明,仅 RGB 通道
UI 纹理ARGB4444 或 DXT5小尺寸,清晰边缘
自发光贴图 (_li)DXT1 或 DXT5如果 Alpha 携带强度则用 DXT5

质量 vs. 文件大小

格式          2048x2048 大约大小
-----------------------------------------
ARGB8888      16.0 MB    (未压缩)
DXT5           5.3 MB    (4:1 压缩)
DXT1           2.7 MB    (6:1 压缩)
ARGB4444       8.0 MB    (2:1 压缩)

游戏内质量设置

玩家可以在 DayZ 的视频设置中调整纹理质量。当质量降低时,引擎会选择较低的 Mip 级别,因此你的纹理在较低设置下会逐渐变得模糊。这是自动的——你不需要创建单独的质量级别。


实际示例

武器纹理集

典型的武器模组包含以下纹理文件:

MyWeapons/data/weapons/m4a1/
  my_weapon_co.paa           <-- 2048x2048,DXT1,基础颜色
  my_weapon_nohq.paa         <-- 2048x2048,DXT5,法线贴图
  my_weapon_smdi.paa          <-- 2048x2048,DXT1,高光/金属
  my_weapon_as.paa            <-- 1024x1024,DXT1,环境阴影

材质文件(.rvmat)引用这些纹理并将它们分配给着色器阶段。

UI 纹理(图像集源)

MyFramework/data/gui/icons/
  my_icons_co.paa           <-- 512x512,ARGB4444,精灵图集

UI 纹理通常被打包到单个图集(图像集)中,并在布局文件中按名称引用。ARGB4444 压缩在 UI 中很常见,因为它在保持文件大小小的同时保留清晰的边缘。

地形纹理

terrain/
  grass_green_co.paa         <-- 1024x1024,DXT1,平铺颜色
  grass_green_nohq.paa       <-- 1024x1024,DXT5,平铺法线
  grass_green_smdi.paa        <-- 1024x1024,DXT1,平铺高光
  grass_green_mc.paa          <-- 512x512,DXT1,宏观变化
  grass_green_de.paa          <-- 512x512,DXT1,细节平铺

地形纹理在地表上平铺。_mc 宏观纹理添加大尺度颜色变化以防止重复。


常见错误

1. 非二的幂次方尺寸

症状: 游戏中纹理显示为品红色,TexView2 显示警告。 修复: 在转换前将源文件调整为最接近的 2 的幂次方。

2. 缺少后缀

症状: 材质找不到纹理,或者渲染不正确。 修复: 始终在文件名中包含正确的后缀(_co_nohq 等)。

3. Alpha 使用了错误的压缩

症状: 透明度看起来块状或二值化(开/关没有渐变)。 修复: 对需要平滑 Alpha 渐变的纹理使用 DXT5 而不是 DXT1。

4. 忘记 Mipmap

症状: 纹理近处看起来正常,但远处闪烁/闪亮。 修复: TexView2 生成的 PAA 文件自动包含 Mipmap。如果你使用非标准工具,请确保启用了 Mipmap 生成。

5. 法线贴图格式不正确

症状: 模型上的光照看起来反转或平坦。 修复: 确保你的法线贴图为切线空间格式,使用 DirectX 风格的 Y 轴约定(绿色通道:上 = 较亮)。某些工具导出 OpenGL 风格(Y 反转)——你需要反转绿色通道。

6. 转换后路径不匹配

症状: 模型或材质显示品红色,因为它引用了 .tga 路径,但 PBO 包含的是 .paa修复: 材质应引用最终的 .paa 路径。Binarize 自动处理路径重映射,但如果你使用 -packonly(不进行二进制化)打包,你必须确保路径完全匹配。


最佳实践

  1. 将源文件纳入版本控制。 将 TGA/PNG 主文件与模组一起存储。PAA 文件是生成的输出——源文件才是重要的。

  2. 根据重要性匹配分辨率。 玩家盯着看几个小时的步枪值得 2048x2048。架子后面的一罐豆子可以使用 512x512。

  3. 始终提供法线贴图。 即使是平坦的法线贴图(128, 128, 255 纯色填充)也比没有好——缺少法线贴图会导致材质错误。

  4. 命名要一致。 一个基础名称,多个后缀:myitem_co.paamyitem_nohq.paamyitem_smdi.paa。永远不要混用命名方案。

  5. 构建前在 TexView2 中预览。 打开你的 PAA 输出并验证它是否正确。单独检查每个通道。

  6. 默认使用 DXT1,只在需要 Alpha 时使用 DXT5。 DXT1 的文件大小是 DXT5 的一半,对于不透明纹理看起来完全相同。

  7. 在低质量设置下测试。 在超高画质下看起来很棒的东西在低画质下可能无法辨认,因为引擎会激进地降低 Mip 级别。


导航

上一章上级下一章
第 3 部分:GUI 系统第 4 部分:文件格式与 DayZ Tools4.2 3D 模型

Released under CC BY-SA 4.0 | Code examples under MIT License