赞
踩
人类祖先就喜欢通过画画试图把动态的人物画下来,近代发现了视觉残留(1/24秒),奠定了动画视觉实现的基础
早期尝试:跑马灯、定格动画、早期动画电影(一帧一帧画的)等
未来方向:实时渲染动画、电影(Zafari)
并且当下很火的虚拟人最核心的技术就是动画技术
虽然3d很火,但现在最赚钱的还是2d游戏,并且有很多有意思的新技术
通过把游戏的人物的动画一帧一帧记录下来,然后循环播放来实现动画的效果。(仙剑1、2)
除了人物动画,特效类也可以这么做
皮套人嘿嘿
把角色的各个部件拆成一个个的小图元,把这些图元拼在一起,然后靠这些图元的旋转、变形、仿射变换等使角色变得更加鲜活。并且需要给各种图元设置深度来表达层次关系,控制可见性。(本质就是图像变形+图层叠加)
字节出的vr眼镜宣传能支持6DoF,那什么是DoF呢?
定义:一个物体可以在多少个维度发生变换。比如平移就是三个自由度(在x,y,z方向上移动),旋转也是3个自由度(物体绕x,y,z轴旋转 )。通常动画是9DoF的(就是Transform那9个量),因此6DoF就是…………
早期动画实现方式,类似皮影戏,将角色用一系列的刚体块(mesh绑定骨骼)表示,用关节点约束。
但皮影戏一样,这些骨骼动的时候mesh会互相穿插。
预烘焙顶点动画,离线下将每个顶点的复杂物理计算结果按照时间帧保存到一张纹理上,横轴表示顶点,竖轴表示不同时间每个顶点的偏移量。一般会存两个texture,一个texture存位置,一个存法向。
另一种顶点动画,是把一系列key frame保存下来,应用是lerpkey frame去使用,通常用于人脸动画(类似BS)
骨骼驱动顶点的动画,每个顶点有不止一个骨骼驱动,可以避免mesh穿插;同时消耗也比逐顶点小
2D有时也用蒙皮骨骼动画,更加灵活效果丰富
整体上,the Animation DCC(Digital Content Creating) process 分为:
局部空间 – 以骨骼局部为参考系空间,坐标都是相对坐标
模型空间 – 以模型为参考系的空间
世界空间 – 以游戏世界中心为参考系的空间,坐标是绝对坐标
人类骨骼有几种通用标准,比如人形骨骼(Humanoid)标准,其骨骼起点一般是在胯部的RootM,其他骨骼一层层形成骨骼树,互为父子节点。一般还有一个两脚之间的根骨骼Root,方便判断移动,位置,离地高度等(下图右可见)。此外还有面部的骨骼、外骨骼(衣物、道具)等。
动物,比如四足动物是另外的标准,骨骼起点一般在尾椎的地方,Root根骨骼一般在四足中间
例如人骑在马上,人和马都有一个叫 mount 的关节。该关节是用来绑定人和马的,不仅要连接,方向也要绑死,这样人和马的运动才能保持一致
线代知识,少量记录
yaw:绕z轴 (ψ)
pitch:绕x轴 (θ)
roll:绕y轴 (φ)
首先我们旋转每个轴的顺序是固定的。例如,按x,y,z轴顺序旋转,x轴先旋转,此时如果把y轴旋转90°时,z轴会被旋转到x轴的位置,此时还需要旋转依次z轴,但是此时旋转z轴就相当于旋转x轴,相当于只转了两个维度,本来是3个自由度(可以对x,y,z轴旋转),现在变为了两个(只能对x,y轴旋转,而不能旋转z轴)
注:这里的x,y,z轴都是相对世界坐标系而言的
在二维空间,旋转某个角度可以用归一化的复数 e − i θ = c o s θ + i s i n θ e^{-iθ} = cosθ +isinθ e−iθ=cosθ+isinθ来表示,在三维空间内我们定义一个四元数q = a + bi + cj + dk,其中a为实部, bcd为虚部。见下图,计算类似矩阵运算
啊太困了有需要再仔细看吧
关节的Pose有三个维度:
Orientation(方向、朝向):一般只需要Rotation即可表达骨骼链的位置
Position:某些情况也需要用到位移,比如root骨骼表达的位置、人脸骨骼等
Scale:面部表达经常用,调整五官大小(类似2d美颜)
以上3个变换合并起来形成了仿射矩阵Affine Matrix:
蒙皮动画只保存顶点相对骨骼local space的旋转变换,也就是Affine Matrix,以及骨骼权重;通过这些参数就能确定顶点位置。
动画资产一般是十几二十帧,远小于实际游戏帧率,所以应用时需要插值(clip)
现代3A游戏动画量非常大,所以必须压缩好
四元数很多时候不需要32位浮点数的精度,所以可以将数值压缩到0-1之间然后乘以65535用16位整数去表示。
具体的,针对四位数Quaternion,利用其normalization后的特性(四元数的四个值中有一个较大,其余的都在正负
1
√
2
\frac{1}{√2}
√21之间,并且4个数的平方和为1),因此可以直接保存3个较小的值去表示大值,如下图,可以用48bit表示128bit的数据
压缩会带来误差累积问题。所以需要检测误差是不是被控制在可接受范围内。
不同骨骼对error的敏感度是不一样的,DoF那几个量的误差虽然更直观,但不符合人眼的感受,最实际可用的误差是visual error视觉误差(模型所有点用压缩前后的数据计算完之后进行比较),但完整计算的量太大,所以一般对每个关节定义2个垂直点,通过offset控制距离,如果精度敏感就设置大一些,只需对比这两个点压缩前后的error即可
误差补偿Error Compensation:在多帧误差累积后反向进行偏移来补偿。其问题就是这一帧和上一帧会很不连贯,会产生抖动问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。