Spine 3.8版本已发布

August 5th, 2019

夏天来了,随之而来的是一个全新的Spine版本!可观看上方视频或阅读下文一些重点新功能介绍。欲了解最新更新的详细概述,请参阅编辑器更新日志运行时更新日志

网格跟踪

皮肤骨骼

Spine现在可以跟踪图像,自动生成网格。要查看实际操作,可编辑一个网格并选择Trace(跟踪)。滑块可控制使用多少顶点及如何放置它们。自动跟踪比手动放置顶点要快得多。Spine使用高级算法,即使很少的顶点也能很好地工作,这对于运行时性能非常重要。

多边形纹理打包

Spine现在可以实现多边形纹理打包。在纹理打包器设置中选择时,将使用网格附件顶点尽量紧密地打包图像。这使即可在每个纹理图集页面中放入更多图像,并减小导出大小。

皮肤骨骼和约束

皮肤骨骼

这是此版本中最激动人心的功能之一! 皮肤现在可以有骨骼和约束,只在皮肤活动时才活动。当对项目使用皮肤时,这意味着每个项目可以有自己的骨骼。

新的层级树设置允许在层级树和视口中隐藏不活动的骨骼和约束,这样就可以拥有任意多的皮肤特定骨骼,而不会打乱项目。另外,在运行时不会计算不活动的皮肤骨骼和约束,所以拥有许多带骨骼和约束的皮肤不会影响性能。

皮肤骨骼和约束也可以用在其他方面!例如,皮肤可以使用约束来移动骨骼,这样骨架及其所有动画就可以被不同比例的角色重用。

将骨骼或约束拖放到皮肤上可将其添加到皮肤上。如果需要的话,Spine会自动将其他骨骼和约束添加到皮肤上。层级树显示了一个皮肤图标,表示其位于皮肤中。

如果皮肤骨骼和约束导致了不想要的结果,那么层级树会显示警告图标。例如,如果一个在皮肤外的网格被绑定到皮肤内的骨骼上。

混合和搭配项目

我们提供了一个名为mix-and-match的新示例项目,它展示了使用皮肤骨骼和约束功能为用户定制头像。

mix-and-match示例项目包含在最新的Spine启动程序中,可从许可证页面安装该启动程序。我们还为该项目设置撰写了深入指南

软IK

皮肤骨骼

IK约束现在有一个设置,在骨骼变直时会减慢速度。如果没有这个,IK骨骼有时会在目标超出范围时迅速就位。

文件夹

文件夹

现在可以使用文件夹对动画、皮肤和事件进行分组。这使得组织项目变得容易得多,并且减少了查找项目所需的滚动量。

文件夹还不需要使用长前缀以使名称唯一。例如,可以在一个文件夹中有一个皮肤,在另一个文件夹中有一个同名的皮肤。导出项目时,将使用文件夹名为每个对象创建一个唯一名称,如eyes/blueclothes/blue

标尺

标尺

Spine现在提供标尺帮助对齐和创建网格。单击标尺图标可激活该功能。在即将发布的版本中,我们将为标尺添加使用指南和其他改进。

增强PSD导出

现在,你可以将骨架姿态导出为Photoshop PSD,每个附件都有一个图层。这在动画中间绘制一个新附件版本时是很有帮助的,例如不同的透视图或运动模糊。

欢迎屏幕

欢迎屏幕

现在启动Spine将会显示我们全新的欢迎屏幕! 你可以快速地访问常用和最近的项目,或者探索Spine附带的示例项目。我们为每个示例项目创建了walkthroughs走查,说明了它们是如何装配的。

提示部分会在每次启动Spine时显示一个新提示,方便你学习新的装配技巧并提高技能。点击提示可进入我们的提示网页,在那里可一次查看所有提示,并与Spine用户分享链接。

新闻部分是我们发布一般Spine新闻的地方,更新日志列出了最新的Spine开发信息。

Spine窗口顶部的小邮件图标将通知你是否有任何新的更新日志或新闻,方便你随时了解Spine世界正在发生的事情。

新层级树设置

许多Spine工作流对在层级树和视口中看到的内容有不同需求。我们添加了一些新设置,让你更容易专注手头上的任务。

显示所有皮肤附件

显示所有皮肤附件设置显示每个皮肤占位符下有附件的所有皮肤。这可以很好地概览皮肤,并使像将附件移动到其他皮肤之类的操作更加容易。

为OS X提供视网膜支持

OS X上的Spine现在可以更好地利用视网膜显示器的像素密度。在视口中呈现字体和图像现在是在高分辨率下完成的。界面缩放设置控制如何缩放用户界面的其余部分。200%是默认值,推荐用于视网膜显示器。100%提供更清晰的图像,但在高分辨率屏幕上可能太小。100%200%以外的值会显示缩放伪影,不建议使用。

小改进

像往常一样,我们还增加了许多小改进,比如层级树视图的选择历史记录。现在可以通过按下PAGE DOWN回到前面的选择,按下PAGE UP选择后面的记录。这样就很容易在选定项之间来回跳转,而无需在层级树中滚动。

高亮变形顶点

Spine现在可用不同的颜色标记已变形的顶点,这样就很容易看出哪些顶点已经移动。按住control键,双击一个顶点可选择所有变形或未变形的顶点。此外,在动画模式下,你现在可以重置仅选定的顶点。

区域附件运动矢量

以前重影只显示网格附件的运动矢量,现在也显示区域附件的运动矢量。

多皮肤占位符

现在可以选择多个附件,并同时为它们创建皮肤占位符。这大大加快了创建和填充新皮肤的速度。

运行时改进

自3.7版以来,我们已经解决了200多个问题,包括一些bug修复和新功能。感谢所有报告问题并提供运行时改进建议的用户!有关详细的更新概述,请参阅Spine运行时更新日志3.8版提交日志

此版本包含所有运行时中一些突破性的更改:

  • .json.skel的文件格式发生了重大变化,以支持新功能并减小文件大小。要使用3.8运行时,你需要使用Spine Editor版本3.8.20及更高版本导出文件!
  • Slot#getAttachmentVertices()重命名为Slot#getDeform()以更好地传达其意图。
  • Skin#addAttachment()重命名为Skin#setAttachment().
  • 删除了VertexAttachment#applyDeform()并将其替换为VertexAttachment#deformAttachment。在此字段上设置的附件用于决定是否应将DeformTimeline应用于当前在应用时间轴的插槽上设置的附件。
  • MeshAttachment中删除了inheritDeform属性。

所有运行时支持全部新的编辑器功能,包括多边形纹理打包、皮肤骨骼和约束,以及软IK!

减少了.json.skel文件大小

虽然Spine的导出格式已经非常节省空间,我们还是投入更多努力来进一步减少其空间占用!

JSON格式解析器现在假定更多默认值,即不需要显式写入.json文件的值,这样就可减小文件大小,尤其是存在大量有许多帧的时间轴时。

二进制格式被修改为只存储字符串一次,并在可能的情况下在文件中共享字它们,例如附件名称。当使用有许多关键帧的附件时间轴时,可显著减小文件大小。在一个例子中,该改进将3.5MB的.skel文件减少到了640KB!

用于spine-ts和spine-as3的二进制格式加载器

长时间以来,我们的大多数运行时都同时支持JSON和二进制格式。然而,我们的web和ActionScript运行时只能处理JSON格式,到现在都是!

我们为spine-tsspine-as3都添加了二进制格式解析。使用这些解析器就像使用JSON解析器一样简单。我们还为spine-tsspine-as3都添加了二进制文件加载示例。

改进皮肤API

许多Spine用户创建用于混合和搭配的资产,通常用于创建自定义头像。我们新的皮肤骨骼和约束功能使其比以往更加强大。为此,我们改进了皮肤API,使在运行时创建自定义皮肤非常容易。

在我们的mix-and-match示例中,一个皮肤表示一个单一项目,比如衬衫、裤子或眼睛,皮肤由一个或多个附件组成。当用户选择应与他们的角色匹配的项时,所需要做的就是将这些项目皮肤合并到一个皮肤中:

Skin mixAndMatchSkin = new Skin("custom-girl");
mixAndMatchSkin.addSkin(skeletonData.findSkin("skin-base"));
mixAndMatchSkin.addSkin(skeletonData.findSkin("nose/short"));
mixAndMatchSkin.addSkin(skeletonData.findSkin("eyelids/semiclosed"));
mixAndMatchSkin.addSkin(skeletonData.findSkin("eyes/violet"));
mixAndMatchSkin.addSkin(skeletonData.findSkin("hair/short-red"));
mixAndMatchSkin.addSkin(skeletonData.findSkin("accessories/hat-red-yellow"));
mixAndMatchSkin.addSkin(skeletonData.findSkin("legs/pants-jeans"));
mixAndMatchSkin.addSkin(skeletonData.findSkin("clothes/hoodie-blue-and-scarf"));
skeleton.setSkin(mixAndMatchSkin);

就是这样!你可以在上面的实时代码编辑器中尝试此代码。

Skin#addSkin(Skin other)方法获取other皮肤的骨骼、约束和附件,并将其添加到此皮肤。为组成角色的所有项目皮肤执行此操作,最终得到一个可以在骨架上设置的单个皮肤。

除了Skin#addSkin(Skin other)方法之外,我们还添加了Skin#copySkin(Skin other)方法。此方法将创建所有附件的深层副本,使你可以修改纹理坐标等属性,而不会影响原始附件数据。

为了方便进行深度复制,我们还向每个附件类型添加了一个copy()方法,它将创建附件的深度副本。你可以使用此机制选择性地深度复制各个附件。对于网格附件,可以选择使用MeshAttachment#newLinkedMesh()方法:它将创建一个链接到原始网格或原始网格的父网格的链接网格。

最后,我们添加了Skin#getAttachments()方法,方便你轻松地循环访问皮肤中的所有附件。

这些新增API在所有Spine运行时中都可用!我们在所有运行时示例项目中添加了混合和搭配示例可尝试。

引擎特定改进

当然我们也一直在努力改进我们运行时的引擎特定区域!

对于虚拟引擎,我们增加了不少生活品质改进。现在可在虚拟引擎UI中集成Spine骨架。

spine-unity的一个值得注意的新增功能是支持Unity的'SpriteMaskRectMask2D。 我们还进行了大清理,删除了一些扩展API,转而使用我们新的Skin API。

对于MonoGame/XNA,我们重写了示例项目以使其更易遵循。

Spine web播放器现在也可以显示.skel文件。只需设置SpinePlayerConfig#skelUrl而非SpinePlayerConfig#jsonUrl字段!

Löve2D最近更改了其处理RGBA颜色的方式。从Löve2D 0.11开始,颜色组件范围应为0-1,之前使用的范围为0-255。spine-love2d运行时可透明地处理这两种范围类型。如前,Spine对象上指定的颜色使用范围0-1

请参见运行时更新日志,了解引擎特定更改的完整概述!

即将到来

即将发布的3.9版本将聚焦我们之前提到的秘密项目。我们迫不及待地想告诉你更多有关它的新闻!

感谢社区中报告问题、测试beta版及提供新功能建议的每一个人。你们的贡献是无价的!

祝大家快乐地创作动画! Spine团队

Spine论坛上讨论本文。