廊坊新闻网-主流媒体,廊坊城市门户

Nate谈Spine 4.2版本物理系统的开发进展

2023-08-18 10:14:13 来源:哔哩哔哩

当然,我很乐意唠几句!希望不会太无聊。 博客文章往往需要花很多精力来润色,而我们几乎总是在争分夺秒地发布新版本(最近更是如此)。虽然我们看起来沉默,但要知道我们一直在幕后工作!我们也试图在不过于分散精力的情况下在论坛上保持活跃。

对于版本发布之间的长时间沉默我很抱歉。我们尽量避免这种情况,但有时会冒出一系列的事情(错误),所以还是发生了。


【资料图】

我们会推出测试版,这是我们向大家寻求反馈的方式,为的是确保非测试版足够稳定,可用于生产。测试版一旦准备就绪会立即开始。我们很乐意尽早推出测试版,但有时我们无法做到,尤其是对于较大的功能更新。

测试版本的主要挑战是,不管我们发布什么功能,都应该要在后续版本中继续正常工作。例如,我们不希望你在测试版中完成了工作,然后因为变化过大,无法在新版本中打开你的项目。

根据我们的工作内容,有些是很容易做到的,比如假设我们正在添加UI功能或更改工具的工作方式。如果我们要做的改动比较大,会影响到项目中的存储方式,那么我们就需要非常有把握才会在测试版中发布它们。如果我们在发布后又必须修改,那么我们就需要做更多的工作,将旧版本的项目数据转换成被新版本所兼容(可能的话)。要是不可能,我们会认为这是一场灾难。

对于版本,其实我们很早就有了关于物理系统的想法,甚至在之前我们就有了原型。最后我们觉得是时候了,我们做了更严肃的原型,并且看起来很有希望。我们在编辑器中适当集成了物理功能,这对于幕后工作来说是一项重大努力,因为这与Spine以前的工作方式截然不同。

在之前,Spine是完全确定性的:对于时间轴上的任何时间点,动画的姿势都是相同的。有了物理系统后,这一点就不复存在了。在物理系统中,姿势取决于先前的帧发生了什么。这使得Spine编辑器中的某些操作变得更加复杂,但我们还是完成了,而且很不错。有两种模式:

物理系统始终进行着计算,即使停止播放动画。物理系统计算出的姿势会受到动画的播放、循环以及骨骼的移动等的影响。

物理系统从第0帧开始确定性的计算。在时间轴上的任何给定时间,你总是能获得相同的姿势,尽管该姿势取决于先前的帧。

一个有趣的方面是,这在运行时是一个重要的考虑因素。当你播放动画时,你的骨骼会随着物理效果产生动画,但你也可以把骨骼在游戏世界空间中的移动告诉物理系统,这样物理系统就可以做出反应。

举个例子,你有一件披风和一个原地跑步动画。在运行时,你让骨骼在游戏世界中移动。你需要将这一移动告诉物理系统,这样披风的物理效果就能做出适当的响应,而不仅仅是对跑步动画中的移动做出响应。

你还要能够在运行时重置物理效果。例如,当角色开始一个新的关卡时,你不希望他们的披风物理效果随着上一关的任何动作继续摆动。

这些意味着从版本开始,你需要考虑对运行时API进行一些更改。

回到阻碍测试版发布的原因——我们已经为非确定性进行了必要的修改。接着,我们从原型中引入了我们想要的物理系统工作方式,并创建了配置它的UI等。这一切都很成功,并即将在测试版中发布。这个物理系统有一个节点和弹簧机制。你可以做一些有趣的事情,比如这样设置:

当动画播放时,你会看到非常逼真的布料模拟效果:

抱歉,我找不到那个动画的GIF了。不过我找到了一些其他的。为了给这篇文章增添点趣味,这里有一些更有趣的GIF。两个节点和一个弹簧:

更多节点:

更多弹簧:

碰撞:

节点可以附加到骨骼上,将其固定在适当的位置,或者通过骨骼驱动节点的位置:

当然,你也可以疯狂一点,这与上面编辑器截图中的布料设置类似,但没有重力:

节点和弹簧可以驱动骨骼,影响平移、旋转和缩放:

下一张是在编辑器中反复播放的动画,它显示了两种物理模式。当“模拟(Simulate)”未激活时,动画重复播放时姿势会重置。当模拟激活时,即使动画重复播放,姿势也会持续更新。

显示影响骨骼旋转和缩放的节点和弹簧:

不管怎么说,这一切都很酷。不过我们最终决定,这实际上并不是我们前进的方向。它对某些事情很有用,但并不是我们想要的一切。对于其他用例,它很难控制。尽管离发布已经很近了,我们还是决定重新设计,看看能否做得更好。我们想出了一种更适合用例的新方法,制作了原型,并从编辑器中删除了很多内容。这花了很长时间,而且对自己的工作 "嗤之以鼻 "会让人有点难过,但最终的结果会更好。理想情况下,我们应该早点做这些改动,这样就不会那么痛苦了。我们尝试过,但如果不把它真的做出来,我们也不可能知道,而这需要付出很多。从痛苦中诞生的会更加美丽。

这就是我们现在的情况。我们已经在编辑器中重新使用了新内容,但还不完全,所以还不能发布。不过它正在稳步靠近!

至于我们是如何开发出Spine的,我很久以前写过一篇博文——哇,已经10年了。这篇文章涵盖了早期使用的一些技术:

/blog/building-spine

有点好笑的是,我十几岁的时候还在用QBasic制作火柴人。我有一个非常垃圾的编辑器,你可以在其中移动火柴人的点。它将点存储为姿势,游戏通过点位置之间的插值来播放动画,这与Spine的工作原理非常相似。直到大约20年后,我在制作游戏时发现对Spine的需求,我才重新审视它。

关键词: