纹理打包
Spine可以将图片打包到纹理图集或网格(精灵表单)中,以便在运行时更高效地渲染。Spine的纹理打包器是一个通用工具。虽然它可以用于你的Spine骨架,但也可以单独运行以打包你的应用程序的所有图片。
在大多数图形API(例如,OpenGL)中,绑定一个纹理会完成一些绘图,绑定另一个纹理会完成更多绘图,以此类推。绑定纹理的成本相对较高,因此理想的做法是在较大的图片上存储许多较小的图片,绑定较大的纹理一次,然后多次绘制其各个部分。Spine可以有效地将许多较小的图片打包成较大的图片,从而形成所谓的“纹理图集”。
Spine使用多种高级打包算法。打包是用许多各种大小的试探法完成的,并选择最有效的结果。
纹理图集文件
纹理图集由一个文件扩展名为“.atlas”的文本文件和一个或多个称为图集“页面图片”的图片文件组成。图集文件描述每个打包的较小图片在页面图片中的位置,称为图集“区域”。这些区域在图集文件中按名称引用。
一个纹理图集可以包含多个页面图片,从而可将应用程序的所有图片打包到单个图集中。使用多个图集的唯一原因是某些图片不需要同时加载。
打包
也可以使用命令行界面进行纹理打包。
纹理打包器可以通过两种方式运行:
导出数据时打包
为如何查找要打包的图片文件提供了两个选项:
为纹理图集的创建方式提供了两个选项:
每个骨架图集
为每个骨架打包一个图集。每个图集都使用骨架名称命名,与相应骨架数据文件的名称一致。单个图集
将所有骨架的图片打包到一个图集中。图集使用项目文件的名称命名,不带文件扩展名。
打包设置
按钮用于配置纹理打包器设置。
这是同时导出骨架数据和纹理图集的便捷方式。但是,单独运行纹理打包器可以更灵活。
单独运行纹理打包器。
从主菜单中选择纹理打包器
:
在纹理打包器对话框中,指定包含要打包的图片的文件夹、写入图集文件的位置以及图集的名称。
设置
按钮用于配置纹理打包器设置。
设置
纹理打包器有许多设置来控制图片的打包方式。
此对话框起初可能会让人望而生畏,但许多设置可以保留为默认设置。如下为一些值得注意的设置:
- 最大宽度和高度。这决定单个图集页面图片可以容纳多少。
- 打包矩形或多边形。打包多边形效率更高,但速度较慢,并且需要了解项目文件的上下文。
- 预乘Alpha。此设置应与图片在运行时的渲染方式匹配。
- 去除空白。
- 比例
区域
设置 | 描述 |
---|---|
去除空白X/Y | 删除输入图片边缘周围的空白像素。删除的数量存储在图集数据中,因此可以在应用程序中绘制图片,就像它们没有被去除空白一样。 |
旋转 | 将一些图片旋转90度可以实现更有效的打包。应用程序必须特别注意正确绘制这些区域。 |
别名 | 像素对像素相同的两张图片将只打包一次。 |
忽略空白图片 | 仅为透明像素的图片将不会打包。 |
Alpha阈值 | 去掉空白时,低于此值的Alpha值将被视为零。 |
区域填充
设置 | 描述 |
---|---|
填充X/Y | 打包图片之间的像素数。某些纹理滤波会平均相邻像素,因此建议填充为2以避免相邻区域相互影响。 |
边缘填充 | 填充还将应用于页面图片的边缘。 |
重复填充 | 填充将从最近区域复制像素。如果纹理滤波选择填充像素,这可能会隐藏“接缝”瑕疵。 去除空白时,重复填充仅应用于有非空白像素的边缘。打包多边形时,重复填充仅应用于覆盖整个图片的区域附件或网格附件使用的图片。 |
页面
设置 | 描述 |
---|---|
最小宽度/高度 | 任何页面图片的最小尺寸。 |
最大宽度/高度 | 任何页面图片的最大尺寸。如果图片不适合这种大小的页面,则会输出多个页面图片。 |
2的幂数 | 使输出页面尺寸为2的幂数。这是一些游戏工具包的要求。 |
能被4整除 | 使输出页面尺寸可以被4整除。这是某些纹理压缩算法的要求。 |
正方形 | 使宽度和高度相等。这是一些纹理压缩算法(如PVRT)的要求。 |
运行时
这些设置是供加载数据的应用程序在运行时选择性应用的提示。
设置 | 描述 |
---|---|
过滤器缩小/放大 | 纹理缩小和放大设置。 |
换行X/Y | 纹理换行设置。 |
格式 | 内存中的格式。 |
输出
设置 | 描述 |
---|---|
格式 | 输出PNG或JPG页面。 |
JPG质量 | JPG输出的压缩。 |
打包 | 确定图片的打包方式。
|
预乘Alpha | 将像素RGB值乘以Alpha值。在运行时渲染图片还必须使用预乘Alpha。建议使用它进行正确的混合。 |
溢出 | 将透明像素的RGB值设置为最接近的非透明像素的RGB值。如果在运行时不使用预乘的alpha,则在为透明像素的RGB值进行采样时有助于防止纹理过滤伪像 |
比例 | 对于指定的每个比例,都会输出整个图集。 |
后缀 | 每个缩放图集的后缀。如果为空,则多个比例的文件将以相同的名称输出到每个比例的子文件夹中。 |
重采样 | 用于缩放的算法。 |
选项
设置 | 描述 |
---|---|
图集扩展 | 图集数据文件的文件扩展名。 |
组合子目录 | 当前文件夹和所有子文件夹被打包到相同页面上。任何包含 |
展平路径 | 子文件夹将从区域文件名中剥离。图片文件名应该是唯一的。 |
索引 | 图片名称将去掉最后一个下划线之后的所有内容。参见图片索引。 |
旧版输出 | 以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.atlas
、skeleton.png
、skeleton2.png
等。
Ninepatch
Ninepatch通常不适用于Spine骨架,但可以用于其他目的。
如果图片文件名在文件扩展名前以“.9”结尾,则将其视为Ninepatch。可以手动或使用此工具创建Ninepatch图片。图片必须有1px的透明边框。上边缘和左边缘可以选择有一条连续的黑色像素行,表示分割信息,即Ninepatch的哪一部分将拉伸。下边缘和右边缘可选有一条连续的黑色像素行,表示填充信息,即应该如何插入Ninepatch上方的内容。打包此图片时,1px边框将被去除,分割和填充信息将存储在图集数据文件中。
图片索引
图片索引通常不适用于Spine骨架,但可用于其他目的。
如果一个图片文件名以下划线结尾,然后是一个数字(如Animation_23.png
),则该数字被视为“索引”,并将该区域存储在图集数据文件中。存储图片名称时不带下划线和索引。这允许检索具有相同名称的图片列表,并按索引排序,以便于逐帧打包动画,而不会丢失帧的顺序。
纹理解包器
Spine提供了纹理解包实用程序,该实用程序可获取纹理图集并从其中写出单独的图片。图集中的任何旋转都将被撤消,并会在各个图片中恢复所有已剥离的空白。
也可以使用命令行界面进行纹理解包。
输入 Atlas
文件和 Output folder
的路径,输出文件夹是存储解压缩图像的文件夹路径。如果图集使用预乘法打包,请选中 Unpremultiply alpha
。如果地图集文件有“pma:true”,则将使用该复选框。