线性插值与矢量线性插值动画_游戏引擎养成《十六》 骨骼动画

1a6a2417d2fee961f66a31f04d84e389.png

# 开篇

渲染篇准备写一个被问的比较多的骨骼动画作为小结。

游戏动画发展趋势:

  1. Animated Texture (2d)
  2. Rigid hierarchical animation (3d ↓)
  3. Per-vertex animation
  4. Morph target animation
  5. Skinned animation

前两种表现完全不能满足现代游戏需求,第三种

Per-vertex animation

三维上动画最暴力的是逐顶点动画,蛮力的记录并还原每个顶点的逐帧位置,这是一种数据密集型技术。不适合游戏这种软实时。

6c3933dce9fdad87176213a98e6bbd88.png
Per-vertex animation

优化变体就是 Morph target animation,通过制作相对少量的extreme pose,在运行中对两个pose进行混合、线性插值来驱动动画。

Morph target animation 通常用于面部动画.

# 蒙皮动画 Skinned animation

因为是CPU软渲的,我就不过多写原理,讲原理资料的有很多,我主要参考的是OpenGEX官方指导的手册的算法。看代码比看文字会清楚很多。

可以视为针对逐顶点动画的一种有损数据压缩方案。
(Skeleton animation又称骨架动画,是一种计算机动画技术,它将三维模型分为两部分:用于绘制模型的 蒙皮(Skin),以及用于控制动作的骨架。跟传统逐格动画相异,骨骼动画利用建立好的骨架套用到一张或多张图片,使之动作,比起一般一张一张绘出动作省了很多时间与精力,且能更生动的动作。

下图是骨骼动画中常见的概念:

061cdf298302af9614c9104b0441238e.png

# bindpose 原理

dbf65083c28363d19d0355909a75fe1c.png

# 输入

参考OpenGex官方手册 解析数据并在渲染前通过CPU 蒙皮顶点。

扩展 OpengexParser ,在 case OGEX::kStructureGeometryObject 中加入对OGEX::kStructureSkin的解析.

case 

# Update skeletons per frame

void 

# Skin before rendering

const 

75b9f8e8759e6d1243914b23ba0b940d.gif

# update transforms

如果只是为了理解骨骼动画的基本原理,其实动画混合这部分是不需要看的。

源码如下:

mh29110/PhantomEngine​github.com
a2ed4919e6a36b46cf78edbadc05b9ef.png

Refs

  • 《 游戏引擎架构 》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值