《Character Animation with Direct3D》阅读笔记

Posted Tanzq*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Character Animation with Direct3D》阅读笔记相关的知识,希望对你有一定的参考价值。

前言

最近在搞动画这一块,网易Jerish大佬推荐我去看《Character Animation with Direct3D》这本书。

以下链接是我个人整理的资料:

【Character Animation with Direct3D】阅读笔记 Gitee

包含内容:

  • 《 Character Animation With Direct3D 》 书籍PDF版本(去黑底版)
  • 书籍相关源码
  • 相关知识的学习笔记
  • 没有翻译完的动捕插件参考文档。

对于书中讲的东西如果还有一些东西不太理解的话,可以去看闫令琪老师讲现代计算机图形学入门的课程GAMES101-现代计算机图形学入门-闫令琪,如果感觉线代相关知识没有太懂的话,可以看3Blue1Brown出的课程,将线性代数可视化出来了,方便理解【官方双语/合集】线性代数的本质 - 系列合集

2021年12月14日,纪念自己完全读完了第一本全英文专业相关书籍。
本来以为读会很难很难,没想到书里面讲的知识通俗易懂,英文单词也比较简单。(至少前大部分是这样的,从12章法线贴图那一块开始就有点难受了,单词难意思也难懂😭😭😭😭😭)。

关于数学方面的理解

这块是我对我对目前不知道的东西的一些理解,如果其中有哪部分出错了,请您一定要在评论区指出来!非常感谢!

向量Vector

  • 逆变换 如果说向量A是逆时针旋转90°的变换,那么A的逆就是顺时针旋转90度的变换。

对万向锁的理解

问题来源

两个轴旋转到一起了,就被称为万向节锁。

那怎么会出现这样的情况呢?
假设 Y轴为绿色, X轴为红色, Z轴为蓝色。
层级关系为: x ← y ← z Z为父级
初始状态:

对蓝色Z轴进行旋转:

再对绿色Y轴进行旋转,你就会发现有两个坐标方向重合了:

这样就会导致一个问题,缺失了一个维度,我无法进行左右旋转了!这就是万向锁问题。

如何解决

  1. 使用四元数。
  2. 在某个轴很少到90°的时候:
    改变层级关系为:z ← x ← y
    为什么呢?
    以相机为例,相机是很少会向上看或者向下看的,以这种层级关系进行旋转,他是不会出出现万向锁的情况的。

    还有类似的情况也可以按照这种更换层级关系的情况进行解决。

旋转相关定理

  • 让2D 空间中任意一个向量v 旋转θ度: v ′ = [ c o s ( θ ) − s i n ( θ ) s i n ( θ ) c o s ( θ ) ] v v^′ = \\left[ \\beginmatrix cos(θ) −sin(θ) \\\\ sin(θ) cos(θ) \\endmatrix \\right] v v=[cos(θ)sin(θ)sin(θ)cos(θ)]v
  • 2D 旋转公式(复数积型) 𝑣 ′ = 𝑧 𝑣 = ( c o s ( θ ) + 𝑖 s i n ( θ ) ) 𝑣 𝑣^′ = 𝑧𝑣 = (cos(θ)+𝑖 sin(θ))𝑣 v=zv=(cos(θ)+isin(θ))v
  • 2D 旋转公式(指数型) 𝑣 ′ = 𝑒 𝑖 θ 𝑣 𝑣^′ = 𝑒^𝑖θ 𝑣 v=eiθv
  • 3D 旋转公式(向量型,正交情况),当 v ⊥ v_⊥ v 正交于旋转轴 u u u 时,旋转 θ θ θ角度之后的 v ⊥ ′ v^′_⊥ v 为: v ⊥ ′ = c o s ( θ ) v ⊥ + s i n ( θ ) ( u × v ⊥ ) v^′_⊥ =cos(θ)v_⊥ +sin(θ)(u ×v_⊥) v=cos(θ)v+sin(θ)(u×v)
  • 3D 旋转公式(向量型,一般情况,也叫做 「 R o d r i g u e s ’ R o t a t i o n F o r m u l a 」 「Rodrigues’ Rotation Formula」 RodriguesRotationFormula)3D 空间中任意一个v 沿着单位向量u 旋转θ角度之后的v′ 为: v ′ = c o s ( θ ) v + ( 1 − c o s ( θ ) ) ( u ⋅ v ) u + s i n ( θ ) ( u × v ) v^′ =cos(θ)v +(1 −cos(θ))(u ·v)u +sin(θ)(u ×v) v=cos(θ)v+(1cos(θ))(uv)u+sin(θ)(u×v)

四元数

与复数类似,四元数是对于基 1 , 𝑖 , 𝑗 , 𝑘 \\1, 𝑖, 𝑗, 𝑘\\ 1,i,j,k的线性组合,可以写成向量的形式: q = [ a b c d ] q= \\left[ \\beginmatrix a \\\\ b\\\\ c\\\\ d \\endmatrix \\right] q=abcd

也可以将实部与虚部分开,用一个三维向量来表示虚部: 𝑞 = [ 𝑠 , v ] . ( v = [ x y z ] , 𝑠 , 𝑥 , 𝑦 , 𝑧 ∈ R ) 𝑞 =[𝑠,\\mathbfv]. (\\mathbfv = \\left[ \\beginmatrix x\\\\ y\\\\ z \\endmatrix \\right], 𝑠, 𝑥, 𝑦, 𝑧 ∈ R) q=[s,v].(v=xyz,s,x,y,zR)

  • 当实部为零时: v = [ 0 , v ] v =[0, \\mathbfv] v=[0,v] 我们称 v v v为一个纯四元数。
    如果有两个纯四元数 v = [ 0 , v ] v=[0, \\mathbfv] v=[0,v], u = [ 0 , u ] u =[0, \\mathbfu] u=[0,u],就会有: v u = [ − v ⋅ u , v × u ] vu =[−\\mathbfv·\\mathbfu, \\mathbfv×\\mathbfu] vu=[vu,v×u]

小知识点

  • UV 坐标 : UV(明确的 U-VEEZ)是二维纹理坐标,带有多边形和细分曲面网格的顶点组件信息。

  • 欧拉公式 : 𝑒 𝑖 θ = c o s ( θ ) + 𝑖 s i n ( θ ) 𝑒^𝑖θ = cos(θ) + 𝑖 sin(θ) eiθ=cos(θ)+isin(θ)

  • 放射变换: 有旋转、伸缩、平移的变换称为仿射变换。

  • D3DXMATRIX

    D3DXMATRIX( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14,
                FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24,
                FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34,
                FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 );

我目前是这么理解的,不知道有没有错。。。。

法线贴图

左边是没有进行法线贴图后的效果,右边是进行了法线贴图后的效果
(这里借用知乎大佬的两张图。。。)

有三种方式的法线贴图:

  1. 法线处于世界坐标系中,那么就称他为世界空间法线贴图(world space normal map)
  2. 法线处于物体的局部坐标系中,那么就称为物体空间法线贴图(object space normal map)
  3. 法线处于切线的坐标系中,那么就称为切线空间法线贴图(object space normal map)

法线空间坐标系:

优点缺点
world space normal map直接使用,效率高物体是固定的,如果没有保持原来的变换,贴图会失效。
object space normal map可以旋转、平移不能直接使用,一张贴图只能对应特定的一个模型,模型不能变形
object space normal map可以旋转、平移、变形相对来说比较麻烦

内容概述

这里只是大概的讲一下,具体的细节可以到书中查看。

第一章 角色动画简介

这章讲述了一下角色动画的发展历程以及相关的观点。

第二章 Direct3D入门

书本是采用自上而下的方式讲解的,所以这章作者先将一个大的框架展示出来了,并让一个角色显示在了我们面前。

第三章 网格体蒙皮

这章对骨骼结构进行了进一步的讲解,使用链表将整个骨骼进行连接形成骨架,知道了骨架的基本层次结构,(学了数据结构这章的内容不会很难懂),讲解了软硬件蒙皮的优缺点以及对静态网格体的渲染。

第四章 骨骼动画

这章可以了解到骨骼动画的一些基础知识,学习到如何加载动画数据并将其应用到蒙皮网格并且让多个动画动起来。

第五章 高级骨骼动画技术

这章可以进一步学习关于骨骼动画的知识,学习引擎是如何将几个动画融合在一起的、动画集的存储以及压缩、动画的回调(就是虚幻引擎中的动画通知)、动捕的一些相关知识。

第六章 物理学入门

这一章讲的就是物理学的一些基础知识,比如刚体、碰撞检测、四元数、粒子系统、弹簧模拟等。

第七章 模拟布娃娃系统

这章就讲解了如何去模拟布娃娃系统(如动图所示):

第八章 变形动画

这章对变形动画进行了一个讲解,也会学习到如何将变形动画与骨骼动画进行融合。

第九章 面部表情动画

这章可以学习到眼睛的转动和各种面部表情的制作(也就是捏脸系统原理)。

第十章 制作角色交流

这章可以学习到如何让角色嘴型与语音相匹配的一些知识。

第十一章 逆运动学(IK)

这章可以学习到IK知识的原理以及运用。

第十二章 皱眉贴图

这章讲述了如何在角色脸部进行变形,体现凹凸感,是角色更加真实。

第十三章 模拟人群

这章讲述了如何去模拟人群,运用什么样的规则才能让角色之间没有相互碰撞,又可以聚集、碰到障碍物做出反应。

第十四章 角色贴花

这章讲述了如何制作类似子弹设计到角色身体上有伤痕的效果、如何精准定位贴图位置。

第十五章 头发动画

这章讲述了如何去模拟头发,如何让头发动画很真实。

第十六章 所有的东西放在一起

这章就是标题所示,将所有的东西都放在一起,进行一个整合。在文章后面还讲了一个工作室的案例以及采访。

以上是关于《Character Animation with Direct3D》阅读笔记的主要内容,如果未能解决你的问题,请参考以下文章

《Character Animation with Direct3D》阅读笔记

《Character Animation with Direct3D》阅读笔记

javascript Animation_with_single_Imgs

Animation with MotionLayout

Animation with MotionLayout

Animation with MotionLayout