动画系统

1.动画类型

1.1 塞露露动画。以帧的方式对图片进行叠加。一连串的2d手绘产生的动画效果。

1.2 骨骼动画。又叫蒙皮动画,以骨骼运动带动蒙皮定点进行运动。对骨骼进行key帧,计算定点运动的动画方式。

1.3 定点动画。又叫定点变形动画,记录每个顶点的坐标偏移信息,定点位置通常为两个极端定点变形偏移的差值。这种方式在记录定点较多,记录变形信息量大的时候往往数据量庞大。所以通常只用在面部表情等小范围定点作用中。

动画按照制作方式又可以分为 动画片段、游戏内置电影(in-game cinematics, IGC)、非交互连续镜头(noninteractive sequence, NIS), 半互动方式 QTE(quick time event), 全动视频(full-motion video, FMV)。

通常全动视频先将动画片段预渲染为MP4、WMV等视频文件,其它方式都为游戏内实时渲染。

2.骨骼数据

struct Joint

{

Matrix4x3

const char * m_name; //骨骼名称

U8 m_iParent; //父关节索引

};

struct Skeleton

{

U32 m_jointCount; // 关节数目

Joint * m_AJoint; //关节数组

};

3.关节姿势

这里只写关节统一缩放的数据结构。

sturct JointPose

{

Quatornion m_rot; //Rotator

Vector3 m_Trans; //Location

Float32 m_scale; //Scale

};

此格式数据也称为SQT(Scale,Translation,Quaternion).

struct SkeletonPose

{

Skeleton * m_pSkeletion; // 骨骼 + 关节数量

JointPose * m_aLocalPose; //局部关节姿势

};

4.全局姿势

struct SkeletonPose

{

Skeleton * m_pSkeleton; //骨骼 + 关节

JointPose * m_aLocalPose; //局部关节姿势

Matrix44 * m_aGlobalPose; //全局关节姿势

};

5.动画数据

struct AnimationSample

{

JointPose * m_AJointPose;

};

struct AnimationClip

{

Skeleton * m_pSkeleton;

Float32 m_framesPerSecond;

U32 m_frameCount;  //非循环动画的采样数量为帧 + 1

AnimationSample * m_aSamples;

bool m_isLooping;

};

6.蒙皮

每个绑定关节的顶点都会有一个权重因子。每个顶点的权重和都为1.

struct SkinnedVertex

{

float m_position[3];

float m_normal[3];

float m_u, m_v;

U8 m_jointIndex[4]; //这里限制一个定点最多只能由4个定点甲醛平均

float m_jointWeight[3]; //记录相对每个关节的权重,最后一个通过1-得到

};

蒙皮矩阵方程 计算诀窍就在于,单个关节的定点,其位置相对关节空间坐标是不变的。所以可以先将其变换转到关节空间,然后再返回模型空间。

待续。。。

7.动画混合

动作连续性

C0 连续性(C0 Continity): 位移的连续。

C1 连续性:位移的一次导数,速度、动量的连续。

C2 连续性:位移的二次导数,加速度的连续。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值