spine 导出纹理_Spine 纹理打包Texture packing_官方文档中文版

马上注册,加入CGJOY,让你轻松玩转CGJOY。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

本帖最后由 笑虾 于 2014-10-7 20:45 编辑

欢迎入群  Spine2D骨骼动画  1群:7708065,2群:225097509

大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!总述(Overview)

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

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

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

打包(Packing)

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

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

0.jpg (36.04 KB, 下载次数: 81)

2014-10-7 20:43 上传

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

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

1.jpg (6.57 KB, 下载次数: 82)

2014-10-7 20:43 上传

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

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

2.jpg (15.88 KB, 下载次数: 94)

2014-10-7 20:43 上传设置(Settings)

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

3.jpg (64.17 KB, 下载次数: 104)

2014-10-7 20:43 上传

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

区域(Regions)

设置描述

Strip whitespace X/Y移除输入图片边缘的空白像素。移除的量储存在 Atlas 文件中,因此图片可以在你的应用程序中绘制就好像没裁剪过一样。如果使用了网格,应该取消移除空白边缘的选项。

Rotation将某些图片旋转90度能高率的打包。应用程序必须特别注意要正确绘制这些地区。

Alias如果两张图片的所有像素完全相同,那么只打包一次。

Ignore blank images完全透明的图片不打包。

Alpha threshold移除空白边缘时,Alpha 低于此值的,被视为0。

区域填充(Region padding)

设置描述

Padding X/Y打包的各图片区域之间的填充像素。某些纹理过滤会平均混合相邻像素,所以推荐区域间填充2个像素以避免相邻的区域互相影响。

Edge padding填充也将应用到图片页面的边缘。

Duplicate padding拷贝相邻的像素用于填充。如果纹理过滤选择了填充像素,此设置能消除"接缝"瑕疵。

页面(Pages)

设置描述

Min width/height输出图片的最小页面尺寸。

Max width/height输出图片的最大页面尺寸。如果图片大于此值,将分多页输出。

Power of two确保输出图片的尺寸大小为 2 的幂。某些游戏开发包有此需求。

Square确保输出的图片长宽相等。某些纹理压缩算法有此需求(如: PVRT)。

输出(Output)

设置描述

Format输出 PNG 或 JPG 图片。

JPG quality输出的 JPG 的压缩质量。

Packing`Atlas` 打包图片尽可能紧凑的在一起。`Grid` 打包图片均匀的排列在网格中。(众所周知的精灵表spritesheet)。

Premultiply alpha将 alpha 与每个 R、G 和 B 通道相乘。推荐在适合的情况下用[proper blending](http://esotericsoftware.com/forum/viewtopic.php?p=15772).

Bleed设置透明像素到最近的非透明像素的RGB值。以免在对透明像素进行 RGB 采样时造成纹理过滤的瑕疵[filtering artifacts](http://esotericsoftware.com/forum/viewtopic.php?p=13480#p13480)。

Scale为每个比例单独输出完整的 Atlas。

Suffix每个缩放比例 Atlas 的后辍。如果留空,不同尺寸将使用相同文件名,分别输出到以尺寸命名的子文件夹中。

选项(Options)

设置描述

Atlas extensionatlas 数据文件的扩展名。

Combine subdirectories将当前目录和所有子目录的图片打包在同一张图片上。忽略所有子目录中的设置文件 Pack.json。

Flatten paths目录信息将从图片文件名字中移除。图片的文件名必须唯一。

Use indexes使用图片名称无需移除任何图片索引后缀(在最后一个下划线之后的任意字符)

Fast打包速度更快,但效果不受影响。

Debug在输出的页面上,为所有图片区域绘制边框。

运行库(Runtime)

以下这些设置意在应用程序运行时,提示相关信息。

设置描述

Filter min/mag纹理过滤的缩小和放大设置。

Wrap X/Y重复贴图纹理的设置。

Format贴图纹理在内存中使用的格式。

目录结构(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文件的例子,包含了所有可用的设置。

{

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)和 合并目录(combine subdirectories)那么JSON可以写成这样:

{

paddingX: 0,

paddingY: 0,

combineSubdirectories: false

}

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

九宫格(Ninepatches)

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

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

图片索引(Image indexes)

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot自动装配源码解析

Spring Boot 自动装配原理 使用Spring Boot最方便的一点体验在于我们可以几零配置的搭建一个Spring Web项目,那么他是怎么做到不通过配置来对Bean完成注入的呢。这就要归功于Spring Boot的自动装配实现,他也是Spring Boot中各个Starter的实现基础&#…

自制 .NET Core 路由调试中间件

点击上方蓝字关注“汪宇杰博客”导语本文教大家如何在 .NET Core 应用中使用中间件输出路由信息以便调试程序。背景在 .NET Framework 的上古时代,有个叫做 RouteDebugger 的神器,可以在 MVC 或 Web API 应用中输出当前页面的路由信息,也可查…

玉柴spn码故障对照表_后处理的故障不总是尿素泵故障,也有可能是这些原因

之前说到后处理故障,解决的都是柴油机尿素泵、喷嘴的,而SCR箱同样是一个重要的部件,它的作用就是将尿素液与尾气中的氮氧化物充分混合并发生化学反应的场所,目前重卡SCR箱集SCR催化器和发动机排气消声器与一体。整体材料为不锈钢&…

SpringBoot中Bean按条件装配

Conditional条件装配 Conditional是Spring Framework提供的一个核心功能注解,这个注解的作用是提供自动装配的条件限制,一般我们在用Configuration,Bean的时候使用它。也就是我们在自定义Bean的注入的时候,我们可以通过Condition…

定义一个手表_华米Amazfit Pop评测:一款功能全面的“性价比”手表

目前的智能手表虽然品牌、型号众多,但基本可以分为二种类型:第一种为入门级智能手表,其功能单一与智能手环差不多,但胜在屏幕大、能够带来更好的观感且价格便宜;第二种为旗舰级智能手表,功能全面、硬件水准…

[Java基础]复制文件的异常处理try...catch...finally的做法

代码如下: package ErrorOperatorPack;import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;public class CopyFileDemo01 {public static void main(String[] args){}private static void method() {FileReader fr null;FileWriter fw null…

有哪些你踏入社会才明白的道理

不知不觉已经工作10多年,从一个懵懂的大学生到被社会无情毒打,终于成长一个职场老鸟。最近几天在胡思乱想,这10多年不少认知和感悟,如果10年前有人能告诉我,我会不会少走很多很多弯路?读书的时候&#xff0…

手把手教你 git revert merge

开发中git分支管理 研发流程 从develop分支切出一个新分支,根据是功能还是bug,命名为id-xxx 或 id-fixbug-*。开发者完成开发,提交分支到远程仓库。开发者发起merge请求,将新分支请求merge到develop分支,并提醒code r…

如何把自己的经历写成小说_古天乐的经历教会我们:如何在被欺骗以后改善自己的心理状态...

众所周知,这个只有太阳能黑他的男人,早年未发迹时曾干过泊车小弟等工作,后来作为模特经纪人接触娱乐圈,传闻某次模特迟到,古爷临时救场,算是正式踏入娱圈,出现在无数大牌歌星的MV里,…

从GC的SuppressFinalize方法带你深刻认识Finalize底层运行机制

如果你经常看开源项目的源码,你会发现很多Dispose方法中都有这么一句代码: GC.SuppressFinalize(this); ,看过一两次可能无所谓,看多了就来了兴趣,这篇就跟大家聊一聊。一:背景1. 在哪发现的相信现在Mysql在…

NIO工作方式浅析

java Socket 工作机制 Socket是描述计算机之前相互通信的一种抽象功能。通过基于TCP/IP的流套接字协议建立连接A机器B机器通信—建立Socket连接—通过TCP连接(端口号指定唯一应用)----IP寻址(寻找唯一主机)----最终找到唯一主机上…

bufferedimage生成的图片模糊_Kaptcha图片验证码工具

阅读文本大概需要3分钟。验证码的作用图片验证码自从诞生以来从未被抛弃,依然发出属于它所应有的光。验证码经常验证如下一些场景。1、用户登录,防止机器人登录2、论坛留言,防止恶意灌水3、短信验证码发送,防止盗刷短信Kaptcha 简…

[Java基础]对象(反)序列化流

对象序列化流: 代码如下: package ObjectOutputStreamPack;import java.io.Serializable;public class Student implements Serializable {private String name;private int age;public Student() {}public Student(String name, int age) {this.name name;this.age age;}pu…

C# 9 新特性:代码生成器、编译时反射

前言今天 .NET 官方博客宣布 C# 9 Source Generators 第一个预览版发布,这是一个用户已经喊了快 5 年特性,今天终于发布了。简介Source Generators 顾名思义代码生成器,它允许开发者在代码编译过程中获取查看用户代码并且生成新的 C# 代码参与…

I/O性能与可靠性

I/O调优 磁盘I/O优化 性能检测: 压力测试应用程序,观察系统I/O wait指标是否正常,例如有n个CPU,利息情况下I/O wait参数不超过25%,如果超过,就是这个程序的瓶颈就是在IO操作上了可以用iostat命令查看另外…

微信小程序点击按钮弹出弹窗_微信小程序实现的点击按钮 弹出底部上拉菜单功能示例...

本文实例讲述了微信小程序实现的点击按钮 弹出底部上拉菜单功能。分享给大家供大家参考,具体如下:index.wxml弹出action sheet{{item.txt}}取消提示:您选择了菜单{{menu}}index.jspage({data:{// text:"这是一个页面"actionsheethi…

.NET开源工具类库:Masuit.Tools

【开源框架】| 通用工具类库这是恰童鞋骚年的第223篇原创文章本文介绍一个我的同事【懒得勤快】(人称勤快哥,我们叫他骚哥)写的一个.NET开源工具类库项目,包含一些常用的操作类,大都是静态类,加密解密&…

[Java基础]字节,字符打印流

代码如下: package PrintWriterPack;import java.io.FileNotFoundException; import java.io.PrintWriter;public class PrintWriterDemo {public static void main(String[] args) throws FileNotFoundException {PrintWriter pw new PrintWriter("D:\\Java…