在业余时间玩一些游戏时,我偶然发现了2D / 3D生存游戏。该游戏显然是用SDL和GLUT(不要挨饿)制作的,但真正令我惊讶的是游戏中的动画。
动画非常流畅流畅。动画时没有变形,通常在手工制作的动画中会发生以下情况:删除像素,动画变得锯齿,而且根本不那么平滑。那让我思考他们如何设法完成如此高质量的动画。他们是真的是手工制作的吗(如果是的话,那一定是一个非常有才华的艺术家),是骨骼动画还是他们在使用另一种技术?
在业余时间玩一些游戏时,我偶然发现了2D / 3D生存游戏。该游戏显然是用SDL和GLUT(不要挨饿)制作的,但真正令我惊讶的是游戏中的动画。
动画非常流畅流畅。动画时没有变形,通常在手工制作的动画中会发生以下情况:删除像素,动画变得锯齿,而且根本不那么平滑。那让我思考他们如何设法完成如此高质量的动画。他们是真的是手工制作的吗(如果是的话,那一定是一个非常有才华的艺术家),是骨骼动画还是他们在使用另一种技术?
Answers:
我叫Kevin,我是Klei的程序员/设计师。我写了一些我们在《 Shank》系列中使用的动画素材,《忍者之印》和《不要饿死》。
我们的动画师在Flash中工作。我们有一个角色“ build”的概念,它是一组具有多个视图的身体部位符号。根据给定游戏的保真度,或多或少的身体部位具有或多或少的“视野”。我认为,Shank大约有30个身体部位,每个部位有1-2个视图,而Do n't Starve的Wilson则有大约12个身体部位,只有相同数量的视图。自定义JSFL脚本用于分析Flash符号时间轴,然后将相关图像烘焙为一系列高分辨率PNG文件,以及我们粘贴在XML中的一堆元数据。
给定角色构建后,动画师会在另一个文件中创建一个新的根符号,以包含该角色的大部分动画。在该时间轴中,他们从构建符号中创建角色,并在其之间来回移动,补间等,以创建单独的动画(使用帧标签划定)。导出器脚本将这些时间线导出为XML,注意每个构建块的2d转换以及显示的视图。
将所有这些信息导出到XML和PNG后,我们运行一系列Python脚本将其转换为运行时数据。一个脚本会缩小,绘制地图集并映射所有纹理,然后将它们转换为(一种或多种)压缩的,平台特定的格式。另一个脚本将XML动画数据处理为更有效的加载二进制格式。
在运行时,实际上只是显示具有正确变换和视图的正确构建符号的问题。
该系统花费了很长时间才能构建,并且随着我们从一个游戏转移到另一个游戏而对其进行了完善。我要掩盖很多细节(例如我们如何处理分层和运行时服装交换),但这只是概述。
当然,我们使用的技术可能是“ Klei Look”中最不重要的方面。最重要的部分是我们有很多非常非常好的动画师。:)
无论如何,我希望这会有所帮助。如果您还有其他关于“不要挨饿”的问题,可以在我们的论坛上停留,我通常很乐意与您聊天。
Klei通常将骨骼动画和Sprite-Changes完美结合。
他们装配骨骼,将精灵应用到骨骼,然后在动画帧调用它们时交换精灵。
确切的“方式”(工作流程/工具/等)实际上只能来自他们,但是,他们在宣传“ Shank”(预发行版)时这样说。
并且,如果您查看Shank / ShankII,忍者的印记和Do n't Starve,您会注意到该动画看起来很像Nickelodeon的作品。
我可以想象他们也正在使用场景图来使所有内容保持理智,但是同样,这更多的是基于复杂性和动画(2d / 3d)的保证,而不是保证。
我认为他们肯定使用骨骼动画。他们还使用高分辨率精灵(以防止锯齿)或使用某种形式的矢量图形。他们完全有可能将矢量图形预先渲染为高分辨率的精灵。他们绝对不使用像素艺术。:)