草庐IT

游戏动画技术简介

三年游戏人 2023-03-28 原文

动画系统是游戏中对表现力影响最大的系统之一,经过一段时间的调研,最后通过这篇文章总结下游戏动画系统。

精灵动画系统

精灵动画系统在早年间计算机性能还比较差的时候被广泛运用,一般作为游戏的背景而存在,比如


这些人物都是一个四边形,游戏引擎会给四边形连续贴上纹理贴图来产生动感。通常为了不暴露这是个扁的四边形,会使这些四边形一直面向摄像机。比如

这类动画系统在早期游戏中盛行,因为当时的计算机性能不够,而该系统对计算机资源的消耗非常低。现在部分手游依然会保留这类动画系统,因为手机性能有限。

刚性层阶式动画

刚性层阶式动画驱动的人物都由一堆独立的刚性物体组合而成。刚性物体指的是不会发生形变(包括缩放)的物体。然后动画系统会驱动每一个刚性物体,从而实现动画效果。最经典的例子就是1997年在PS上发售的FF7。

这个系统驱动的是3D模型,而不再是四边形贴图,同时还能保持高效的性能和较低的内存使用量。缺点是不允许网格发生形变,整个人物会显得非常生硬。而且人物的关节位置会产生明显的“裂缝”。

每顶点动画

每顶点动画需要动画师为每个顶点去k动画。工作量非常巨大,产生的数据量也非常巨大,但是可以获得非常精细的动画效果,网格的三角形产生形变。通常用于制作CG中人物的表情,一般通过硬件设备来捕捉人脸信息,再转换成顶点数据。

变形目标动画(morphing animation)

由于每顶点动画需要保存大量的动画数据,不方便存储和使用。于是提出了变形目标动画,动画师只需要通过调整网格上所有顶点的信息制作出一些静态姿势(morph target)。这些静态姿势都是一些“极端”的姿势,例如生气、开心等。在游戏引擎中通过对这些静态姿势按时间进行线性插值即可得到动画。

蒙皮动画(skinened animation)

有时也被称为骨骼动画、蒙皮骨骼动画,是一种FK

为了可以得到较生动的动画效果,允许网格的三角形产生形变。同时兼顾较高的性能、较低的存储空间。蒙皮动画便出现了,现在市场上几乎所有的游戏都采用蒙皮动画作为动画解决方案。

概念

在蒙皮动画中有几个重要的概念。首先是骨骼(skeleton),骨骼由关节通过一棵树的形态组织起来。如果是一个人物模型,一般以髋部为根节点,以肢体末端为叶节点,比如手指、脚指、眼睛等。skeleton本身不需要被渲染引擎渲染出来,仅由动画系统驱动。

然后是皮肤(skin),皮肤由多边形网格组成。而网格又由顶点构成,这些顶点将会被动画师通过设置权重绑定(bind)到若干关节上。一般每个顶点最多绑定4个关节。但不是所有的关节都会被顶点绑定,这些没有被绑定的关节又称为定位器(locator),作为其它模型的挂接点存在。

蒙皮动画中存在几个重要的姿势(pose),这些姿势可以矩阵或者SQT格式来保存。首先是绑定姿势,又称为T-pose,顾名思义,是动画师在给模型顶点做绑定时用的姿势。该姿势从DCC中输出之后就固定好了,在游戏运行时不会被改变。


然后是局部姿势,它保存了当前关节在其父关节空间中的姿势。因为动画引擎直接驱动的是局部姿势,我们经常需要对局部姿势进行各种插值,所以一般不会存储为矩阵形式,而是存储为SQT形式。我们的动画片段就是由一连串的局部姿势组合起来,也就是说动画片段是一个因变量为局部姿势,自变量为时间的函数。

最后是全局姿势,它保存了关节在其模型空间或世界空间中的姿势,具体保存形式不同的引擎有不同的做法。它是在游戏运行过程中通过联合具有父子关系的局部姿势实时生成的,算是被动画引擎间接驱动。

蒙皮(skinning)

首先需要准备数据,每一个关节都保存着一个绑定姿势逆矩阵,以下简称IBP,该矩阵可以将物体从模型空间转换到当前关节空间。IBP是在3D模型从DCC输出后,利用T-Pose计算出来的。一次计算,无限次使用。

动画引擎Update之后,每一个关节都会得到一个最新的局部姿势。这个时候可以进行一些额外的插值计算、程序式动画、IK等后处理过程。因为局部姿势一般保存为SQT格式,所以需要在这时转换成矩阵。

然后我们开始计算每个关节的全局姿势矩阵,计算方法是依次连接关节本身及其所有父节点的局部姿势矩阵。

最后IBP乘上全局姿势矩阵,就得到了蒙皮矩阵。顶点乘上蒙皮矩阵后会对顶点产生什么样的影响呢?可以这么想象:顶点原本位于模型为T-Pose时的模型空间中,乘上了IBP之后进入到关节空间中;再乘上全局姿势矩阵,这时模型摆出了由动画引擎驱动的姿势,在这个姿势下从关节空间回到模型空间。

所以最终呈现的效果是,顶点被关节带到了特定位置。计算出所有关节的蒙皮矩阵之后,我们就得到了矩阵调色

然后开始正式蒙皮。每个顶点都会从矩阵调色板中取得需要绑定的关节的蒙皮矩阵,然后更具动画师设定好的权重对这些矩阵进行混合。顶点乘上混合后的矩阵,这时蒙皮就完成了。

ps:动画引擎Update时,可以通过多种方式计算出局部姿势。可以对单个动画片段进行一维线性插值实现时间性混合来得到常规的动画效果。可以对两个动画片段进行淡入/淡出计算获得圆滑过渡、冻结过渡等过渡效果。更进一步推广,可以对多个动画片段进行N维线性插值实现自定义的混合。为了充分利用资源,可以对动画片段进行分部混合或加法混合,例如人物在Idle状态时,通过加法混合给人物加入一些小动作,使得人物更真实。例如...

由于还要搬砖,没有办法一一回复私信把学习资料发给大家。我直接整理出来放在下面,觉得有帮助的话可以下载下来用于学习
链接:https://pan.baidu.com/s/1C-9TE9ES9xrySqW7PfpjyQ 提取码:cqmd

感谢各位人才的点赞收藏关注

微信搜「三年游戏人」收获一枚有情怀的游戏人,第一时间阅读最新内容,获取优质工作内推

有关游戏动画技术简介的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  3. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  4. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  5. ruby - 我需要从 facebook 游戏中抓取数据——使用 ruby - 2

    修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它​​是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为

  6. ruby-on-rails - 用于门户的 Ruby 技术 - 2

    我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它

  7. python - Ruby 或 Python 的 3d 游戏引擎? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?

  8. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  9. LVGL V8动画 - 2

    动画/*INITIALIZEANANIMATION 初始化一个动画*-----------------------*/lv_anim_ta;lv_anim_init(&a);/*MANDATORYSETTINGS 必选设置*------------------*//*Setthe"animator"function 设置“动画”功能*/lv_anim_set_exec_cb(&a,(lv_anim_exec_xcb_t)lv_obj_set_x);/*Setthe"animator"function*/lv_anim_set_var(&a,obj);/*Lengthoftheanim

  10. ruby - 使用哪种群发消息技术? - 2

    我感到有点困惑——大约24小时以来,我一直在考虑在我的项目中使用哪种组播技术。基本上,我需要的是:创建组(通过一些后端进程)任意客户端广播消息(1:N,N:N)(可能)直接消息(1:1)(重要)使用我自己的后端(例如,通过某种HTTPAPI)对客户端进行身份验证/授权能够通过后端进程(或服务器插件)踢出特定的客户端这是我要的:Ruby或Haxe中的后端相关流程JS+Haxe(Flash9)中的前端—在浏览器中,因此理想情况下通过80/443进行通信,但不一定。因此,这项技术必须能够在HaxeforFlash中轻松访问,最好是Ruby。我一直在考虑:RabbitMQ(或OpenAMQ)、

随机推荐