Spine 3.7已发布

January 4th, 2019

Spine 3.7正式发布了,为大家带来了许多新功能、改进及一些bug修复!

完整内容请见编辑器更新日志及我们的运行库更新日志。所有运行库都是最新的并且兼容3.7版本。下面是一些值得注意的新功能及其他更改。

音频支持

在3.7版本中,我们增加了对音频的支持!可在Spine编辑器中直接预览、同步和迭代图形和音频资产。

其工作原理是在层级视图中增加一个名为音频的新节点:

音频树节点

它与图片节点相似: 装配模式下指定路径中发现的所有音频文件都列在音频节点下。Spine目前支持WAV、MP3及OGG音频格式。

在给项目添加了一个音频文件后,可通过将音频文件丢到事件节点或选择该音频文件后点击新建事件按钮来创建事件,与该音频文件关联的新事件可在动画中设为关键帧。

音频事件

如你所见,事件有3个新属性:

  • 音频路径指定了与事件关联的音频文件的位置。设置好后,在动画中触发此事件的关键帧时,将播放音频文件。
  • 音量可设置播放音量。
  • 平衡可以设置立体声的左右声道音量,或者设置单声道的平移。

在设置音频事件关键帧时,可以设置与装配值不同的音量和平衡值:

音频关键帧

在此图中,为Spineboy行走动画的脚步音频事件设置了两次关键帧。在摄影表中,音频事件的持续时间由一条紫色的水平线表示。在摄影表上面,可看到新的音频视图。它与摄影表同步,显示所有活动音频事件的波形,可控制主音量和用于输出的音频设备。拖动音频视图时间轴或摄影表时间轴也会拖动音频。

我们也更新了导出系统来处理音频。在导出动画到视频时,Spine也将包含音频。

音频播放是编辑器仅有的功能。在运行时,有3个额外的事件属性可用,但Spine运行库不管理加载和播放音频。在运行时同步音频和Spine动画仍然像以前一样管理: 使用AnimationStateTrackEntry注册一个事件处理程序来触发播放你想要的每个事件的音频。

伸展、压缩和统一反向动力学

伸展IK

Spine支持一个和两个骨骼反向运动学约束,使一个或两个骨骼指向另一目标骨骼。然而这些约束以前是硬性的:即IK链中的骨骼不会自动伸展或压缩。

在Spine 3.7中,我们为IK约束增加了更多设置: Spine 3.7 IK设置

单个骨骼和两个骨骼IK约束都有伸展选项。启用时,IK链中的所有骨骼将根据需要伸展以触及目标骨骼。但是,当目标骨骼距离小于原始骨骼的长度时,不会压缩骨骼。

对于单个骨骼IK约束,压缩设置会在到目标骨骼的距离小于约束骨骼的长度时对约束骨骼进行压缩。

压缩伸展都可以设置关键帧。

对于伸展和压缩,受约束骨骼的附件和子骨骼将在该骨骼的X轴上缩放。对于单骨骼IK约束,还可启用统一设置,即可在两个轴上执行缩放。

导出界面重新设计

Spine 3.7导出

在Spine 3.7中,我们重新设计了导出对话框,并增加了大量新的导出功能。

GIF导出器现在使用一种高度复杂的量化算法来保存动画颜色,并尽量保持在GIF格式的256色约束内。不仅在每帧内仔细选择颜色,而且还会短暂跨帧,以防止动画期间闪烁。我们还在导出设置中增加了许多控件,方便用户为其特定动画找到最佳参数,以制作最佳GIF。

我们还增加了更多导出格式。APNG是一种类似GIF的动画图像格式,但支持全色和透明。所有浏览器都支持这种格式(Microsoft Internet Explorer和Microsoft Edge除外),包括在移动设备上,是GIF的一个很好的替代选择。

此外,还增加了导出Adobe Photoshop PSD格式的支持,动画的每一帧将被导出到一个单独的层。这在以不同的视角绘制额外附件时非常有用,可为VFX和其他逐帧动画应用后期特效,也可将动画作为单个文件导入其他软件。

你可能已经注意到了上图右上角的预览按钮。让我们看看点击它时会发生什么!

导出预览

预览呈现的图像与导出时完全相同,包括由压缩或其他导出设置引入的项目。

通过点击范围可选择要导出的帧子集:

导出范围

一个请求最多的功能是裁剪设置:

导出裁剪

你可以指定视区的尺寸和位置用于场景导出!

所有视频导出现在也支持导出音频。

视区像素网格缩放 (3.7.14)

我们有一些用户,例如来自Axiom Verge的名人Tom Happ将Spine用于像素艺术。我们增加了视区像素网格缩放,以支持Spine中的像素艺术工作流。 启用时,Spine将以1:1的比例呈现像素艺术,然后将生成的图像缩放到视区大小,保留了所有像素优点:

Spine 3.7像素艺术

该功能使你可以在Spine编辑器中预览由复古风格像素缩放和旋转产生的混叠及其他成品。

可以在Spine设置中启用此功能。欲了解更多有关此主题的信息,可查看此论坛帖子

合并皮肤

皮肤视图

另一个经常请求的功能是在Spine编辑器中同时查看多个皮肤。以前这只能在运行时完成。

现在我们添加了一个新的皮肤视图。在上方显示了所有可用皮肤列表,每个皮肤有一个大头针。下方是当前固定皮肤列表。从最下面的皮肤开始,所有固定的皮肤都是同时可见的。可以拖动底部列表中的固定皮肤来更改应用它们的顺序。

在皮肤视图中选择单个皮肤时,它将成为活动皮肤。在视区中只能选择和编辑活动皮肤的附件。活动皮肤总是可见的 -- 如果没有固定,将被视为最后应用。

如上图,皮肤视图对于为角色的不同装备和身体部分混撘皮肤特别实用。它还可以很好地满足你的化妆聚会欲望,因为我们总是花费很多时间来尝试新的服装搭配!

输入搜索

输入搜索

层级树视图现在有一个文本框,方便在层次结构中搜索项目。按下enter键将聚焦文本框,然后输入一个值并按enter(或F3)键可选择下一个搜索结果。使用shift + enter(或shift + F3)可选择上一个结果,按escape可清除文本框。

你也可以在弹出的层级树筛选器中选择文本搜索筛选器复选框。选中后,只有与搜索文本匹配的元素才会显示在层级树视图中。

复制皮肤和创建占位符

复制皮肤

复制皮肤现在增加了许多新的便利选项,包括自动重命名选项、使用链接网格,以及复制网格变形关键帧,在设置新皮肤时可节省大量时间。

皮肤占位符

从现有附件创建新的皮肤占位符也同样方便。此外,可为每一个现有皮肤复制该附件!

复制/粘贴顶点

复制/粘贴顶点

现在可以选择顶点,复制和粘贴它们。虽然是个小功能,但很有用,可用于网格、路径和边界框。只要选择相同数量的顶点,这些顶点甚至可以粘贴到不同的附件。

命令行改进

命令行界面

我们为命令行导出增加了更多功能!

-m--clean参数可删除Spine项目中不必要的动画关键帧。还可用于导出Spine JSON或二进制格式。你可以将其作为资产管道的一部分添加,以确保运行时文件尽可能小,或者批量清理Spine项目。

新的--import参数可将JSON、二进制或项目的骨架导入到另一个项目。如果要将现有骨架合并到单个Spine项目文件这会很方便。当与--scale参数结合使用时,还可以从命令行缩放整个项目。

可以在命令行导出文档中找到这些新参数的示例。

运行时改进

我们花了很多精力来改进Spine的运行时部分!有关完整概述和引擎/框架特定的添加和更改,请参阅Spine运行库更新日志3.7版提交日志.

一些添加和更改对所有运行时都是通用的,只有少量重大的更改,它们应该不难修复:

  • 完成事件将被发送给AnimationStateTrackEntry的侦听器,用于循环的、零持续时间的每帧动画。
  • 骨架的flipXflipY属性已被scaleXscaleY所取代。使应用变换更简单,也更强大,即使一些骨骼不继承缩放,也可缩放整个骨架。
  • MixPose已被重命名为MixBlend。除非直接使用Timeline API或自己修改了AnimationState,否则此更改不太可能影响现有代码。

所有运行时中最值得注意的增加是:

  • 相加动画混合。通常,在分开轨道上播放动画时,较低轨道的姿势会被较高轨道的覆盖。使用一个相加轨道,其姿势将被添加到较低轨道上。这可实现如混合多个面部表情那样的效果,如25%愤怒、25%悲伤及50%开心。要启用轨道相加,可调用TrackEntry#setMixBlend(MixBlend.add)。要指定混合比例,可设置TrackEntry#alpha。相关讨论可查看此论坛帖子
  • TrackEntry有一个新字段holdPrevious。可用来抵消导致使用许多轨道时一些动画部分“下降”的AnimationState的限制。有关此问题的完整讨论和我们推出的解决方案,可见此论坛帖子
  • 支持伸展和压缩IK约束,如上所述。
  • 支持音频事件。可以对EventEventData查询audioPathvolumebalance字段来实现音频播放。

自3.6版以来我们已解决了200+运行时问题,包括bug修复及功能增强。没有广大用户的帮助是无法完成的,故在此感谢所有报告问题的用户,希望大家保持这个传统!

Spine-cpp

spine-cpp

我们还没有谈及Spine运行库的最大的增加: spine-cpp! 这一切始于Stephen Gowen的一个无意的[pull请求],Stephen Gowen为c++参考运行时提供了一个很好的开端。经过一个多月的努力,我们终于完成了可供用户使用的第一个版本。

但是我们的Unreal Engine、cocos2d-x、cocos2d-objc和SFML Spine运行库都是在spine-c(我们的参考实现C89兼容版本)之上构建的。将这些运行时更改为spine-cpp并删除其spine-c的对应部分不是一个好选择,因为这可能会干扰用户。

为此,我们决定为我们勇敢的beta测试用户推出两个开发分支: `3.7-beta和3.7-beta-cpp,3.7-beta唯一增加的是SFML运行时的c++版本,在3.7-beta-cpp中,Unreal Engine和cocos2d-x运行时已切换到spine-cpp,在Spine 3.7的beta阶段为我们提供了很好的服务,许多用户探索了spine-cpp的惯用c++ api,并报告了一些问题,为最终成品做好了准备。

在发布的3.7版本中,我们已决定将基于spine-cpp的分支作为默认。但如果你是Unreal Engine或cocos2d-x用户并有一个相当大的spine-c代码库,我们也为你提供了3.7-c分支版本。

接下来,我们将继续在3.7默认分支中维护spine-cpp和spine-c,并将各运行时更改整合到3.7-c分支中,但不会将Unreal Engine和cocos2d-x运行时更改从3.7默认分支移植到3.7-c分支。对于Spine 3.8,我们会继续维护spine-c,但不会继续维护基于spine-c的Unreal Engine和cocos2d-x运行时。

Spine研讨会

Spine研讨会

今年早些时候,我们推出了自己的研讨会教学产品!由Esoteric Software资深教师主讲,提供现场和网络教学两种教学方式。

过去数月我们与学员们度过了一段美好的时光!如果你对Spine研讨会感兴趣,请前往我们的研讨会页面立即申请一个研讨会。

Spine教育机构

Spine教育机构

除了目前提供的研讨会外,为了推广使用Spine,我们还与全球教育合作伙伴联系制作了一个教授Spine课程的学校、大学及顾问目录。

我们很乐意在此目录中加入你的名字!如果你提供Spine研讨会和/或培训,请前往我们的教育机构页面提交你的课程和研讨会信息。

示例

Spine示例

我们新的示例页面上有Spine自带的各示例项目的详细描述。这是一个很棒的资源来学习各种装配技术,并让Spine的示例能派上用场。

Twitch

Twitch上的Spine流视频

我们的动画大师Erika Inzitari今年开通了Esoteric Software Twitch频道,每周都会直播她的Spine作品。她的流视频有许多Spine工作流程干货,极力推荐大家观看!这也是一个很好的机会在线向她提问及观看Spine中复杂的装配。

她的所有流视频都上传到了Esoteric Software YouTube频道方便喜欢点播视频的用户观看。每个YouTube视频的描述都有主题和链接,你可以跳转到感兴趣的部分。

Erika还发明了Twitter主题标签#skeletember,她会在九月的每一天使用这个标签发布一条装配技巧推文。请大家关注她!

后续

随着3.7版发布后,我们现在可以专注于新的曲线编辑器及其他一些功能,如分开键控X和Y移动。在运行时方面,我们将持续提升性能、修复bug及增加新游戏引擎支持(Godot和Construct在我们的优先名单中)。最后,我们还有一个秘密项目在进行,希望不久后就会发布!

由衷感谢所有报告错误、测试beta版及建议新功能的用户,没有大家的帮助就不会有这次新版本的发布!

祝大家享受动画制作的乐趣! Spine团队

Spine论坛上讨论此博文。

Spine Web Player released

December 21st, 2018

2018 is coming to a close, with Christmas and New Year's Eve looming. We at Esoteric Sofware would like to celebrate the occasion with a small gift! We are happy to announce the release of the Spine Web Player.

The Spine Web Player lets you easily show your Spine animations on your website or blog. It's a great way to show off your portfolio, share animation ideas with coworkers and friends, or simply make your site fancy.

The player comes equipped with familiar controls like pause, resume, and a scrubbable timeline, as well as Spine-specific controls that let viewers of your content switch between animations and skins, or show the meshes and bones in your skeleton.

Putting the player on your web page is easy. The above player was created with this HTML/JavaScript snippet:

<!-- Include the JavaScript and CSS files -->
<script src="https://esotericsoftware.com/files/spine-player/3.7/spine-player.js"></script>
<link rel="stylesheet" href="https://esotericsoftware.com/files/spine-player/3.7/spine-player.css">

<!-- Create a container element -->
<div id="player"></div>

<!-- Create the player with your settings and container ID -->
<script>
new spine.SpinePlayer("player", {
jsonUrl: "https://esotericsoftware.com/files/examples/raptor/export/raptor-pro.json",
atlasUrl: "https://esotericsoftware.com/files/examples/raptor/export/raptor-pma.atlas",
animation: "walk",
backgroundColor: "#666666",
});
</script>

You can actually just put this above snippet into an .html file and open it locally with your browser! For an in-depth explanation, check out our extensive Spine Web Player guide.

Note the old, less powerful Spine widget has been removed in favor of the new Spine Web Player.

Next up

This year has been crazy busy for us! You've provided us with invaluable feedback, a lot of which has already been integrated in our 3.7-beta editor and runtime releases. The 3.7 release is scheduled for the 7th of January 2019, so there is something to look forward to when you return from your well deserved holidays.

Until then, we wish you a Merry Christmas and a Happy New Year!
The Spine Team

Discuss this post on the Spine forum.

Welcome Harri!

December 3rd, 2018

Welcome to the team, Harri! Tell us a little bit about yourself and your background

I grew up with computer games in the early 90s. King's Quest VI, Street Fighter II, Doom, Lemmings, Monkey Island, Wing Commander, Ultima Underworld, Burntime, and so many more games cemented my eternal love for pixel art games.

Back in these days I was only allowed to play computer games for half an hour a day (with a later extension to an amazing 60 minutes!). This limitation made playing games even more interesting. When my daily 30 minutes were over, I wasn't sad. Instead, I felt like I felt the day before Christmas - excited that I get to play for another 30 minutes the next day!

This love for games later brought me to Counter Strike. You could create your own maps and import models created in 3D modeling software. At the time I was using Milkshape 3D. A year later I discovered Quake 3's modding capabilities, which started a never ending passion -- creating games on my own.

As a Warhammer 40,000 fan, I wanted to turn the amazing tabletop game Necromunda into a computer game. Learning C programming was required for modding, which soon led me to creating my own terrain engine. Back in these days, we would buy every book about OpenGL and download tutorials from flipcode.com and other tutorial sites onto floppy disks. We only had internet access at school, making this whole endeavour a little more involved than it is today.

All the math I learned at school suddenly became useful -- I had to program all the collision detection and response from scratch. As computers weren't as fast as today's, I had to learn about performance optimization. With programmable shader pipelines arriving on the market, I eventually learned how to program shaders (to make grass move with the wind).

Two years later, I started my university career. I was working on another terrain engine with a few friends. Naturally, the engine had turned into a completely overambitious RPG project. I was looking for ambitious programmers to join the team and got to know Mario - finally a friend with whom I could talk about graphics and game programming!

While at university, I started working part time at Joanneum Research as a C++ programmer. My initial focus was on graphics programming via OpenGL. Later I was mostly working on DirectShow and computer vision applications. I started a computer games company called Pixelcloud Games together with my friend Florian, another graphics programming enthusiast. We started by writing our own engine for a simple 2D game, which wasn't too crazy at the time.

Soon after, Unity (version 3.3 IIRC) had just become affordable. We gathered a few thousand euros and bought our first Unity licenses. Unity didn't support automatically generating colliders for 2D sprites, so I started implementing my own solution. I polished the interface and made the package "2D Collider Gen" available on the Unity Asset Store, which I still support and maintain.

Besides other Unity projects, I also created a brain-computer-interface based training simulation game for disabled people for Graz University of Technology, worked at a VR-startup for a crazy entrepreneur, and, until recently, was an engine and shader programmer at Bongfish GmbH, working on a yet to be announced game.

What brought you to Spine?

Mario approached me and asked if I would like to work on Spine. Being a practitioner of Chinese Martial Arts and hugely interested in the fundamental basics of movement and animation, and with the prospect of working on the industry standard for 2D animation for games, this was an easy question to happily answer with a resounding "Yes"!

What's your role on the Spine team?

Coming from a Unity background, I'm very happy to contribute my knowledge to the Unity runtime and C# core, improve performance through parallelization and optimization, as well as being a bugslayer and making customers on the forum happy. Apart from Unity, I will be helping out with Spine's Unreal Engine integration and the C++ core runtime as well.

Question from the audience: what is your all time favorite video game?

A very hard question! If I have to pick only one, it'd be Privateer -- the first game I played where you could fly around freely, earn money, and spend it on all kinds of weaponry to equip your spaceship.

Say "Hello" to Harri on the forum!

Welcome Erika Inzitari

June 27th, 2017

We're super excited to announce the expansion of our little team here at Esoteric Software! Erika Inzitari has joined our efforts. For this intro, we switch things up a little, interview style.

Welcome to the team, Erika! Tell us a little bit about yourself and your background

I'm a girl who happens to like Spine very much! Previously, I went to an art academy, later I enrolled in a communication design curriculum at university. But what I really like is the idea of motion and transformation! At the age of 3, I decided I wanted to do something involving animation when I grow up. Watching movies on VHS, my favorite parts would be all the moments involving magic: a mouse turning into a horse, or a monkey into an elephant, anything was possible! I also was a lucky child as my farther taught me how to use Windows when I was 4 years old. Since I didn't have many games, I'd play around with the .exe files in the system32 folder, developing an affinity for computers (and not destroying any in the process). Those were the days! This eventually led me to look into game development as well. I've since joined a few game jams and have worked with gaming companies as an animator/rigger. It's my dream to create an interactive children's story one day, and take a stab at animated films & cartoons.

What brought you to Spine?

This is actually a bit of an awkward story. I first saw Spine when my partner researched animation tools and stated that Spine was "THE BEST TOOL EVER (tm)". I watched him use it with suspicious eyes, opposing his every cheerful comment about Spine just for the sake of opposing, saying I don't like the fact that the animations were so fluid and puppet-like, and that the price was a bit too high to spend on software I didn't know and I wasn't sure was usable for me.

Sometime later, he started talking about Spine again, pushing it as the perfect tool for what I wanted to do. I bit the bullet and started watching videos about Spine, reading up on features, checking out comparisons written by other people, checking out (amazing) works of art others have achieved using Spine. Not wanting to give him the satisfaction of being right too quickly, I said, "OK, maybe I can give this a try". I started playing around with it on the side while working for a gaming company who hadn't yet adopted Spine. At my next gig, Spine was already a requirement, so I bought me that sweet sweet Spine Professional and got to work.

I invaded the Spine forums with my first questions. Not expecting a quick answer, I checked back 2 weeks later. To my surprise, my questions had been answered immediately! This made me feel so bad, I started checking the forums daily (because even with my amazing computer skills, I couldn't find the subscribe button, which I only discovered 2 years later...). Once I knew enough, I started returning the favor, answering other people's questions, since everyone was super kind. Suddenly I found myself being very passionate about the software and especially the community.

Which is when my partner started to get his revenge... He'd nag me once in a while with a well placed, "Oh, Spine again? Wasn't that that software with too fluid and puppet-like animations?". (I swear this happened again yesterday evening!).

I couldn't help but tell him I was totally wrong, and that I'm happy he proved me wrong! I fell completely in love with Spine and think it's the best software around for 2D animations in games.

What's your role on the Spine team?

As an animator and Spine connoisseur, my role is to assist people with their Spine Editor related questions. I love some good problem solving, especially if it helps others! I'll also be in charge of a workflow-oriented tutorial series I'll be in charge of. I hope you'll find it useful!

Question from the audience. What ingredients were used to summon you from your magical realm?

10grams of Rooibos, Vanilla, a couple dog hairs, pumpkin flowers, chocolates aaaand fried potatoes.

You can find Erika on the forums and on Twitter.

Older