博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
骨骼动画编辑器Spine的纹理打包器(texture packer)
阅读量:5104 次
发布时间:2019-06-13

本文共 3326 字,大约阅读时间需要 11 分钟。

总述(Overview)

Spine 能帮你把分散的图片打包成一张完整的纹理贴图集或精灵表(spritesheet)以便在运行时更有效率的渲染。Spine 的纹理打包器(texture packer)是一个通用工具。它即可以用于为 Spine 的骨骼打包纹理,也可以单独运行为你打包应用程序所需的所有图片资源。

 

大多数图形API(如: OpenGL)的工作原理是这样的,绑定一张纹理,然后渲染,完成之后再绑定一张再渲染,如此往复直到全部完成。绑定纹理相对来说需要消耗大量的系统资源,所以理想的情况是把一堆小图储存为一张大图,然后就可以一次绑定,再将各区域分多次渲染。Spine 能有效的将大量小图打包成大图,每张小图的定位信息储存在一个采样文件中,它们可以通过名称在程序中引用。

 

Spine使用了多种先进打包算法。对各种尺寸进行海量尝试,然后选择最优打包方案。

 

打包(Packing)

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

1) 当导出 “JSON” 或 “二进制” 动画数据时,勾选`CreateAtlas`:

022849jhm.gif

这个方法可以便捷的同时导出动画数据和打包纹理,但是每套骨架会各自分别打包输出图片,并且忽略目录结构[directory structure](#Directory-structure)和JSON文件[JSONfiles](#JSON-Configuration)。要将多套骨架的图片信息打包在一起,请使用下面的方法运行打包器。

 

2) 在主菜单中选择`Texture Packer:

022850xca.gif

然后指定图片路径进行打包:

输入目录:(Input directory),输出目录:(Output directory),贴图集名称:(Atals name)

022851cYQ.gif

 

设置(Settings)

有许多参数用于控制如何打包图片:

1425022119803861.gif

一眼看上去可能让人望而生畏,但大多数情况下用默认设置就可以了。需要特别注意的地方有: 1) 最大长/宽值(Max width/height), 2) 是否勾选了预乘alpha(premultiplied alpha), 3) 是否勾选了去除白边。 **如果使用了网络,那应该取消去除白边(Strip whitespace X/Y)。

QQ截图20150227153438.jpg

QQ截图20150227153509.jpg

QQ截图20150227153532.jpg

注:proper blending()、filtering artifacts()

 

目录结构(Directory structure)

Spine 能为应用程序一次性打包所有图片。给定一个目录,它就会递归扫描其下的图片文件。将当前目录和所有子目录中 Spine 找到的图片文件拼成一张更大的纹理贴图,称作”页”。如果图片大小超过了一页的最大尺寸,将会分成多页。

 

同一个目录下的图片会打包在同一页上。如果一页能放下所有图片,那就不需要分目录存放,因为每个应用程序只绑定一张纹理。否则,把图片分类放在不同的子文件夹下,可以最大限度地减少纹理绑定次数。

 

例如:应用程序可希望把所有的 “game” 图片和 “pause menu” 图片分别放在不同的文件夹里,这样连续绘制这两张图片只要:先绑定 “game” 并绘制(绑定一次),完成后再绑定 “pause menu” 再绘制(再绑定一次)。如果这些文件都放在同一个目录下,将会被混合打包在多个页面中,每个页面中都有 “game” 和 “pause menu” 图片。这样一来,在绘制 “game” 和 “pause menu” 时都需要执行多次绑定纹理的操作,而无法像之前那样各绑定一次就能完成绘制。

 

按文件夹分类图片,还能将纹理设置相关的图片组织在一起。比如每张图运行时的内存格式(RGBA, RGB, 等等),过滤(nearest, linear, 等等)。图片需要不同的纹理设置,就要分为不同的页面打包,这时应该将图片用文件夹分开放置。

 

用文件夹来组织,还是用 Spine 将所有子目录打包到一起,请看 `Combine subdirectories` 设置。

为了避免子目录的路径出现在 atlas 文件的图片名称中,请看 `Flatten paths` 设置。

 

JSON 结构(JSON Configuration)

每个文件夹可以包含一个 “pack.json” 文件用于具体指定此文件夹下图片的打包设置。每个子文件夹继承其父级的设置。子文件夹中的设置会覆盖父级的设置。

 

下面是一个 JSON 文件的例子,包含了所有可用的设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
    
pot: 
true
,
    
paddingX: 2,
    
paddingY: 2,
    
bleed: 
true
,
    
edgePadding: 
true
,
    
duplicatePadding: 
false
,
    
rotation: 
false
,
    
minWidth: 16,
    
minHeight: 16,
    
maxWidth: 1024,
    
maxHeight: 1024,
    
square: 
false
,
    
stripWhitespaceX: 
false
,
    
stripWhitespaceY: 
false
,
    
alphaThreshold: 0,
    
filterMin: Nearest,
    
filterMag: Nearest,
    
wrapX: ClampToEdge,
    
wrapY: ClampToEdge,
    
format: RGBA8888,
    
alias: 
true
,
    
outputFormat: png,
    
jpegQuality: 0.9,
    
ignoreBlankImages: 
true
,
    
fast: 
false
,
    
debug: 
false
,
    
combineSubdirectories: 
false
,
    
flattenPaths: 
false
,
    
premultiplyAlpha: 
false
,
    
useIndexes: 
true
,
    
grid: 
false
,
    
scale: [ 1 ],
    
scaleSuffix: [ 
"" 
]
}

注意这是 libgdx 的 “minimal” JSON格式,因此双引号通常是可选的。

 

不是所有的设置都需要指定,可以省略部分或全部。例如:取消填充(padding)和合并目录(combinesubdirectories)那么 JSON 可以写成这样:

1
2
3
4
5
{
    
paddingX: 0,
    
paddingY: 0,
    
combineSubdirectories: 
false
}

在设置 [Settings](#Settings)对话框有一个保存JSON `Save JSON` 按钮能保存当前设置。此文件会命名为 `pack.json` 将它放要输入图片的文件夹下就成了此目录的设置文件,用不着手动创建设置文件。

 

九宫格(Ninepatches)

九宫格一般不用于 Spine 骨骼,但有其它的用途。

不算扩展名,如果一个图片文件的名称以”.9″结尾,那么它将被识别为九宫格。可以手动创建九宫格图片,也可以使用这个工具[]。图片必须有 1px 的透明边框。左上边缘可以有一条连续的黑线用于定义切割信息,九宫格中哪部分将会伸展。在右下边缘可以有一条连续的黑线用来定义填充信息,内容如何在九宫格中填充。图片打包时,1px的透明边框会被移除,切割和填充信息会储存在 atlas 数据文件里。

 

图片索引(Image indexes)

图片索引一般不用于 Spine 骨骼,但有其它的用途。

如果一个图片文件名以下划线加数字结尾(例如: `animation_23.png`),这个数字将被识别为索引,图片的索引会储存在 atlas 文件中。储存图片文件名时不包含下划线和索引。这样便可以通过索引在一个列表中检索这些图片。这样能更方便的打包精灵动画避免搞乱帧的顺序。

 

来源网址:

转载于:https://www.cnblogs.com/eastnwood/p/4303851.html

你可能感兴趣的文章
matlab层次分析法运行结果,层次分析法--matlab实现
查看>>
matlab 实验6 高层绘图操作,MATLAB实验报告6高层绘图.doc
查看>>
matlab里面gtophat什么意思,MATLAB图象处理函数
查看>>
mysql 配置数据库目录,一、Mysql安装目录数据库目录:/var/lib/mysql/配置文件:/usr/share/mysql(mysql.server命令及配置文件)相关命...
查看>>
matlab knn 离群点检测,基于KNN离群点检测和随机森林的多层入侵检测方法
查看>>
relatekw.php,relatekw.php
查看>>
php面向过程删除数据库数据类型,(进阶篇)PHP连接数据库,实现最基本的增删改查(面向过程)...
查看>>
php表很长会坏,PHP – 多个uasort函数会破坏排序
查看>>
oracle 删除指定分区表,oracle 分区表定期删除分区
查看>>
oracle中创建脚本文件怎么打开,创建脚本文件 (OracleToSQL)
查看>>
advisors oracle,Oracle Support Lifecycle Advisors
查看>>
oracle rman定时备份,RMAN定时全备份脚本
查看>>
oracle删除添加数据文件,Oracle教程 误添加数据文件删除方法
查看>>
linux文件取消只读fstab,Linux 去除fstab文件只读属性
查看>>
linux内核时钟源,深入分析Linux内核源码-系统时钟
查看>>
linux svn编译安装,Linux下编译安装SVN
查看>>
Linux服务器cpu性能模式,linux cpu开启性能模式
查看>>
linux用户空间寄存器,除了写一个驱动,还有什么办法在linux用户空间访问寄存器?...
查看>>
Linux恐慌信息详解,调试linux内核恐慌
查看>>
linux c替换字符,Linux C字符串替换函数实例详解
查看>>