# 开篇
渲染篇准备写一个被问的比较多的骨骼动画作为小结。
游戏动画发展趋势:
- Animated Texture (2d)
- Rigid hierarchical animation (3d ↓)
- Per-vertex animation
- Morph target animation
- Skinned animation
前两种表现完全不能满足现代游戏需求,第三种
Per-vertex animation
三维上动画最暴力的是逐顶点动画,蛮力的记录并还原每个顶点的逐帧位置,这是一种数据密集型技术。不适合游戏这种软实时。
优化变体就是 Morph target animation,通过制作相对少量的extreme pose,在运行中对两个pose进行混合、线性插值来驱动动画。
Morph target animation 通常用于面部动画.
# 蒙皮动画 Skinned animation
因为是CPU软渲的,我就不过多写原理,讲原理资料的有很多,我主要参考的是OpenGEX官方指导的手册的算法。看代码比看文字会清楚很多。
可以视为针对逐顶点动画的一种有损数据压缩方案。
(Skeleton animation又称骨架动画,是一种计算机动画技术,它将三维模型分为两部分:用于绘制模型的 蒙皮(Skin),以及用于控制动作的骨架。跟传统逐格动画相异,骨骼动画利用建立好的骨架套用到一张或多张图片,使之动作,比起一般一张一张绘出动作省了很多时间与精力,且能更生动的动作。
下图是骨骼动画中常见的概念:
# bindpose 原理
# 输入
参考OpenGex官方手册 解析数据并在渲染前通过CPU 蒙皮顶点。
扩展 OpengexParser ,在 case OGEX::kStructureGeometryObject 中加入对OGEX::kStructureSkin的解析.
case
# Update skeletons per frame
void
# Skin before rendering
const
# update transforms
如果只是为了理解骨骼动画的基本原理,其实动画混合这部分是不需要看的。
源码如下:
mh29110/PhantomEnginegithub.comRefs
- 《 游戏引擎架构 》