纹理打包

Spine可以将图片打包到纹理图集或网格(精灵表单)中,以便在运行时更高效地渲染。Spine的纹理打包器是一个通用工具。虽然它可以用于你的Spine骨架,但也可以单独运行以打包你的应用程序的所有图片。

在大多数图形API(例如,OpenGL)中,绑定一个纹理会完成一些绘图,绑定另一个纹理会完成更多绘图,以此类推。绑定纹理的成本相对较高,因此理想的做法是在较大的图片上存储许多较小的图片,绑定较大的纹理一次,然后多次绘制其各个部分。Spine可以有效地将许多较小的图片打包成较大的图片,从而形成所谓的“纹理图集”。

Spine使用多种高级打包算法。打包是用许多各种大小的试探法完成的,并选择最有效的结果。

纹理图集文件

纹理图集由一个文件扩展名为“.atlas”的文本文件和一个或多个称为图集“页面图片”的图片文件组成。图集文件描述每个打包的较小图片在页面图片中的位置,称为图集“区域”。这些区域在图集文件中按名称引用。

一个纹理图集可以包含多个页面图片,从而可将应用程序的所有图片打包到单个图集中。使用多个图集的唯一原因是某些图片不需要同时加载。

打包

也可以使用命令行界面进行纹理打包。

纹理打包器可以通过两种方式运行:

导出数据时打包

导出JSON二进制时,请选中打包:

为如何查找要打包的图片文件提供了两个选项:

  • 附件 选中后,只打包附件使用的图片文件。不使用任何pack.json文件。
  • 图片文件夹 选中后,将打包每个骨架的图片路径中的图片文件。允许使用pack.json文件为每个文件夹配置打包。

为纹理图集的创建方式提供了两个选项:

  • 每个骨架图集 为每个骨架打包一个图集。每个图集都使用骨架名称命名,与相应骨架数据文件的名称一致。
  • 单个图集将所有骨架的图片打包到一个图集中。图集使用项目文件的名称命名,不带文件扩展名。

打包设置按钮用于配置纹理打包器设置。

这是同时导出骨架数据和纹理图集的便捷方式。但是,单独运行纹理打包器可以更灵活。

单独运行纹理打包器。

从主菜单中选择纹理打包器:

在纹理打包器对话框中,指定包含要打包的图片的文件夹、写入图集文件的位置以及图集的名称。

设置按钮用于配置纹理打包器设置。

设置

纹理打包器有许多设置来控制图片的打包方式。

此对话框起初可能会让人望而生畏,但许多设置可以保留为默认设置。如下为一些值得注意的设置:

  • 最大宽度和高度。这决定单个图集页面图片可以容纳多少。
  • 打包矩形或多边形。打包多边形效率更高,但速度较慢,并且需要了解项目文件的上下文。
  • 预乘Alpha。此设置应与图片在运行时的渲染方式匹配。
  • 去除空白。
  • 比例

区域

设置描述
去除空白X/Y

删除输入图片边缘周围的空白像素。删除的数量存储在图集数据中,因此可以在应用程序中绘制图片,就像它们没有被去除空白一样。

旋转

将一些图片旋转90度可以实现更有效的打包。应用程序必须特别注意正确绘制这些区域。

别名

像素对像素相同的两张图片将只打包一次。

忽略空白图片

仅为透明像素的图片将不会打包。

Alpha阈值

去掉空白时,低于此值的Alpha值将被视为零。

区域填充

设置描述
填充X/Y

打包图片之间的像素数。某些纹理滤波会平均相邻像素,因此建议填充为2以避免相邻区域相互影响。

边缘填充

填充还将应用于页面图片的边缘。

重复填充

填充将从最近区域复制像素。如果纹理滤波选择填充像素,这可能会隐藏“接缝”瑕疵。

去除空白时,重复填充仅应用于有非空白像素的边缘。打包多边形时,重复填充仅应用于覆盖整个图片的区域附件或网格附件使用的图片。

页面

设置描述
最小宽度/高度

任何页面图片的最小尺寸。

最大宽度/高度

任何页面图片的最大尺寸。如果图片不适合这种大小的页面,则会输出多个页面图片。

2的幂数

使输出页面尺寸为2的幂数。这是一些游戏工具包的要求。

能被4整除

使输出页面尺寸可以被4整除。这是某些纹理压缩算法的要求。

正方形

使宽度和高度相等。这是一些纹理压缩算法(如PVRT)的要求。

运行时

这些设置是供加载数据的应用程序在运行时选择性应用的提示。

设置描述
过滤器缩小/放大

纹理缩小和放大设置。

换行X/Y

纹理换行设置。

格式

内存中的格式。

输出

设置描述
格式

输出PNG或JPG页面。

JPG质量

JPG输出的压缩。

打包

确定图片的打包方式。

  • 网格 将图片打包成统一的网格(称为精灵表单)。
  • 矩形 使用矩形对图片进行打包。
  • 多边形 使用来自Spine项目的网格外壳尽可能紧密地打包图片。

预乘Alpha

将像素RGB值乘以Alpha值。在运行时渲染图片还必须使用预乘Alpha。建议使用它进行正确的混合

溢出

将透明像素的RGB值设置为最接近的非透明像素的RGB值。如果在运行时不使用预乘的alpha,则在为透明像素的RGB值进行采样时有助于防止纹理过滤伪像

比例

对于指定的每个比例,都会输出整个图集。

后缀

每个缩放图集的后缀。如果为空,则多个比例的文件将以相同的名称输出到每个比例的子文件夹中。

重采样

用于缩放的算法。

选项

设置描述
图集扩展

图集数据文件的文件扩展名。

组合子目录

当前文件夹和所有子文件夹被打包到相同页面上。任何包含pack.json文件的子文件夹都不会被合并。

展平路径

子文件夹将从区域文件名中剥离。图片文件名应该是唯一的。

索引

图片名称将去掉最后一个下划线之后的所有内容。参见图片索引

旧版输出

以Spine Runtimes 4.0之前的版本可以读取的格式写入图集文件。

调试

在输出页面上绘制线条以显示打包的图片边界。

快速

打包效率不会那么高,但执行速度会快得多。

限制内存

取消选中时,所有图片将同时加载到内存中,以提高打包速度。如果没有足够的内存可用,Spine可能会崩溃。

优质打印

图集文件写上了额外的空白,以便人们更容易阅读。

当前项目

选中后,当前项目中网格图片文件的网格UV将用于去除空白。

打包为数据导出的一部分时,此设置将被忽略,并且当前项目中的网格始终用于去除空白。

其他

这些设置在设置对话框中不可用,只能在JSON配置文件中指定。

设置描述
忽略

此文件夹及其所有子文件夹中的图片将不会打包。

出血迭代

应用出血的次数。默认为2。

分隔符

向文件名附加数字时使用的字符串。默认为下划线(_)。

文件夹结构

当选中导出数据时打包附件时,将不使用文件夹结构。

Spine可以一次性打包应用程序的所有图片。给定一个文件夹后,它会递归扫描图片文件。对于Spine遇到的每个图片文件夹,它都会将图片打包到一个更大的页面图片上。如果文件夹中的图片无法适应单个页面的最大尺寸,则将使用多个页面。

同一文件夹中的图片位于同一组页面上。如果所有图片都可以放在一页上,则不应使用子文件夹,因为将所有图片放在一页上是最有效的。否则,可以使用子文件夹来分隔相关图片,以最大限度地减少纹理绑定。

例如,一个应用程序可能想要将所有的“游戏”图片放在与“暂停菜单”图片不同的文件夹中,因为这两组图片是连续绘制的:绘制所有游戏图片(一个绑定),然后在上方绘制暂停菜单(另一个绑定)。如果这些图片位于一个包含多个页面的文件夹中,则每个页面可能包含游戏和暂停菜单图片的混合。这将导致需要多个纹理绑定来渲染游戏和暂停菜单,而不是每个都只有一个纹理绑定。

子文件夹对于使用相关纹理设置对图片进行分组也很有用。运行时内存格式(RGBA、RGB等)和过滤(最近、线性等)等设置是按纹理设置的。需要不同的每个纹理设置的图片需要放在不同的页面上,所以应该放在不同的子文件夹中。

要使用子文件夹进行组织,而不是控制在页面上将哪些图片组合在一起,请参阅组合子目录设置。

要避免在图集文件的区域名称中使用子文件夹路径,请参阅展平路径设置。

JSON配置

当选择了导出数据时打包附件时,将不使用pack.json文件。

每个文件夹可以包含一个pack.json文件,以指定该文件夹的设置。每个子文件夹会继承其父文件夹的所有设置。在子文件夹中进行的任何设置都会覆盖父文件夹中的设置。

通过点击纹理打包器设置对话框底部的保存按钮,可以使用Spine创建一个pack.json文件。

下面是一个包含所有可用设置的JSON示例。在大多数情况下,双引号是可选的。

{
stripWhitespaceX: true,
stripWhitespaceY: true,
rotation: true,
alias: true,
ignoreBlankImages: false,
alphaThreshold: 3,
minWidth: 16,
minHeight: 16,
maxWidth: 2048,
maxHeight: 2048,
pot: false,
multipleOfFour: false,
square: false,
outputFormat: png,
jpegQuality: 0.9,
premultiplyAlpha: true,
bleed: false,
bleedIterations: 2,
scale: [ 1 ],
scaleSuffix: [ ],
scaleResampling: [ bicubic ],
paddingX: 2,
paddingY: 2,
edgePadding: true,
duplicatePadding: false,
filterMin: Linear,
filterMag: Linear,
wrapX: ClampToEdge,
wrapY: ClampToEdge,
format: RGBA8888,
atlasExtension: .atlas,
combineSubdirectories: false,
flattenPaths: false,
useIndexes: false,
debug: false,
fast: false,
limitMemory: true,
currentProject: true,
packing: rectangles,
silent: false,
ignore: false
}

不需要指定所有设置,可以省略任何或全部设置。例如,要关闭填充和合并子文件夹,可以使用以下JSON:

{
paddingX: 0,
paddingY: 0,
combineSubdirectories: false
}

要忽略文件夹及其所有子文件夹中的所有图片:

{
ignore: true
}

纹理图集名称

纹理图集名称用于命名图集和PNG文件。例如,如果纹理图集名称是skeleton,则图集文件将被命名为skeleton.atlasskeleton.pngskeleton2.png等。

Ninepatch

Ninepatch通常不适用于Spine骨架,但可以用于其他目的。

如果图片文件名在文件扩展名前以“.9”结尾,则将其视为Ninepatch。可以手动或使用此工具创建Ninepatch图片。图片必须有1px的透明边框。上边缘和左边缘可以选择有一条连续的黑色像素行,表示分割信息,即Ninepatch的哪一部分将拉伸。下边缘和右边缘可选有一条连续的黑色像素行,表示填充信息,即应该如何插入Ninepatch上方的内容。打包此图片时,1px边框将被去除,分割和填充信息将存储在图集数据文件中。

图片索引

图片索引通常不适用于Spine骨架,但可用于其他目的。

如果一个图片文件名以下划线结尾,然后是一个数字(如Animation_23.png),则该数字被视为“索引”,并将该区域存储在图集数据文件中。存储图片名称时不带下划线和索引。这允许检索具有相同名称的图片列表,并按索引排序,以便于逐帧打包动画,而不会丢失帧的顺序。

纹理解包器

Spine提供了纹理解包实用程序,该实用程序可获取纹理图集并从其中写出单独的图片。图集中的任何旋转都将被撤消,并会在各个图片中恢复所有已剥离的空白。可以选择从各个图片中删除预乘Alpha

下一节: 导入 上一节: 导出