「不能逃避……不能逃避……」
「不能逃避。」
「不能逃避!」
「真嗣,不可以逃避!」
文档中标了 QA 的都是来自幻灯片的问题,答案仅供参考。
课程主要内容:
媒体类型:
图形图像:
广义的说,凡是能够在人的视觉系统中形成视觉印象的客观对象都称为图形。
特别地,图形指是指由点、线、面、体等几何要素和明暗、灰度(亮度)、色彩等非几何要素构成的,从现实世界中抽象出来的带有灰度、色彩及形状的图或形。
艺术形式:诗歌、雕塑、戏剧、音乐、舞蹈、绘画、建筑、电影、电视、动画。
关于动画:
随着20世纪电视、计算机以及数字科技成果带给动画制作以及传播途径的革命性变革,动画的定义也更广泛:
动画片是动画的一种,也是电影的一种。影片按制作方式一般分成三种:
又将木偶片与动画片统称为“卡通片”。
按照动画制作技术分类动画片,有:
其中,传统2D手绘动画有多种风格,如外国的迪斯尼、中国的水墨、剪纸动画等,其造型、绘制和动态各有其自己的艺术风格。其制作流程如下:
前期策划
从形成创意、组织摄制组到正式绘制之前的所有工作均属于前期策划阶段。在这一阶段,由制作负责人召集电视台、制作厂家、发行公司和剧本作者作充分的沟通。
聊聊分镜头设计。分镜头本,也称为分镜头台本,是将剧本以可供拍摄的镜头来表达的一种方法。一般由导演及助手对剧本进行二次创作,按影视表现手法把剧本分成连续的镜头,每个镜头依次标号,写出内容和处理手法。
分镜头本:
聊聊角色造型设计。如果作品是改编自漫画,则人物造型已由原作者设计好,造型设计只要在原造型的基础上进行省略和修饰即可;如果作品是原创的,则需根据剧本描述的角色性格、特征进行角色的造型设计,造型设计不但要符合动画片的动作要求,而且要符合动画片整体美术风格,有强烈的个性特点,能给观众留下深刻印象。
造型设计的任务包括:
角色造型设计关系到影片制作过程中保持角色形象的一致性,对于角色性格塑造的准确性,动作描绘的合理性都具有指导性作用。一部分画片的人物造型一经确定,角色在任何场合下的活动与表演都要保持其特征与形象的统一。
动画中的每个角色都以几个角度画在一张纸上,叫做标准页,供其他动画师参考。
聊聊动作风格设计。根据角色视觉设计、剧本提供的人物性格设计角色的主要动作姿态(包括口型)或习惯性动作,以便建立起统一的人物个性动态感觉以及影片的动作风格。此时需要考虑到整体美术风格的限制。对于重要的场面,还需要单独进行设计,例如大调度镜头以及武打等场面。
聊聊美术风格设计。美术风格主要指整体视觉效果及其给观众造成的心理感受,美术风格设计主要包括综合运用色彩、明暗、透视、线条等手段。在日本动画的制作当中,通常专门设有作画监督一职,就是为了负责协调影片的整体美术风格。
聊聊场景和道具设计。场景设计是根据剧本内容和导演构思创作的动画片场景设计稿(线稿)。包括影片中各个主场景色彩气氛图、平面坐标图、立体鸟瞰图及景物结构分解图。
它是提供给导演镜头调度、运动主体调度、视点、视距、视角的选择以及画面构图、景物透视关系、光影变化、空间想象的依据,同时也是镜头设计稿和背景绘制的直接参考,起到保证叙事合理性和情境动作准确性的作用。
聊聊声音和音效设计。声音和音效设计指根据影片要求确定主题音乐的风格(欢快、舒缓或者其他)、根据情节需要拟定背景音乐的风格(例如20世纪30年代的故事需要该年代的歌曲或音乐)、音效统筹、角色声音形象(根据人物特点考虑每个角色的说话方式和音色)、重要分场情节的声音形象处理的设计及构思等等。
中期创作
中期创作的主要工作是根据前期的设想完成素材的创作。素材主要有三类:
为了指导这些素材的制作,并作统筹安排,需要先完成镜头设计稿,并确定分场美术气氛。
聊聊镜头设计稿。镜头设计稿是分镜头的台本的进一步细化和具体化。镜头设计稿在后续的动画制作过程中要为原画、背景绘制、音乐音效甚至后期制作提供依据,其重要性不容忽视。镜头设计稿包括画框的定位、镜头的运动要求、背景的具体设计图、角色的动作要求、角色与背景的透视和比例关系等。
聊聊分场美术气氛。美术师为每一个环境绘制的美术气氛设计图,该图为背景设计、原画光影处理、拍摄合成工作提供参考。
聊聊角色原画。原画(keys)是指示角色动作的关键画面,通过原画就应能让观众理解角色的动作。 中间画(Inbetweens)是插补在原画之间的画,作用是丰富动作的细节、让动作更流畅。
原画和中间画的划分并非必需,只是为了便于动画制作的分工合作。在动画制作过程中,首先由原画人员按照导演的意图、根据镜头设计稿的要求,设计每个镜头的关键动作,给动画人员画出运动的要点、标出中间加几张动画,同时填写拍摄表(Exposure Sheet,也称律表)。其余的工作就由助手(包括修形和动画人员)按照指示完成,这样工作室的工作人员就可以各司其职,协同工作。
按照原画指示,绘制中间画,完成角色动画中间画对动作的表现有影响,张数比较少时,动作会转换得比较快;张数多,就会显得平稳、柔顺。进行动检,即检查原画和中间画的完成质量。
聊聊描上。描上是描线和上色的合称。传统二维动画需要用透明的赛璐珞片(即胶片的塑料底)来拍摄,这就需要将绘制在白纸上的铅笔画稿转描到赛璐珞片上并上色。
描线:描线时,将每一幅铅笔画稿用同样规格的透明片套在定位尺上,然后根据画稿在透明片上描绘线条。手工描线是一件非常细致而且技术要求很高的工作,所描的线条要求清晰、准确、均匀。
上色:上色,就是在描好线条的透明片背面,用不透明的特殊水溶性颜料,一块一块地涂上颜色。手工上色也是一项繁杂的技术工作,要求也是只能涂在线条范围之内,不能出线、漏缝,颜色还必须涂得厚薄均匀。
聊聊背景绘制。背景人员按照场景设计稿,根据美术设计提供的分场美术气氛图,逐个镜头绘制出角色活动的背景画面。背景绘制接近绘画,需要工作人员有良好的水彩和水粉功底。
聊聊音乐、音效和角色配音。因为动画无法做同期配音,所以要么前期配音,要么后期配音。美式动画的角色配音通常为前期配音,前期配音须以对位法准确地将动作配合声音演出。日式多为后期配音,配乐即片中的音乐部分,也有事前事后之别,音效则通常都是后期配。无论是采用何种配音,这一阶段需要根据镜头设计稿制作好所有的声音素材。
后期制作
素材都创作好以后,就进入后期制作阶段。后期制作的主要工作是将各种素材合成为一部合格的影片,并作必要的包装。
聊聊拍摄和剪辑。动画片的拍摄和一般电影不同,其特点是逐格拍摄。摄影师按照拍摄表(律表)的指示,一格一格将印在赛璐珞片上的图形拍摄下来。为了保障拍摄的准确性,设置了特殊的动画拍摄台,台面上装有定位尺(安放动画画面)和移动轨道(安放背景画面)。机架四周放置照明灯具。摄影机被固定在机架上,拍摄时可以上下移动。另外动画拍摄台可进行多层拍摄和吊台拍摄,还有透光拍摄及各种各样的特技拍摄。
经过拍摄并且冲洗好的胶片,只有画面没有声音,而且有些画面的顺序还需调整,有些画面可能被删去,所以将此时的胶片称为“毛片”。对“毛片”画面的调整称为剪辑,剪辑人员先要会同导演按照分镜头本的次序进行全片的剪接工作,经过初剪,去掉多余的画格,把分散的胶片按符号顺序连接起来。然后再根据导演的要求反复精剪,力求使画面连接顺畅,节奏鲜明,达到最理想的效果。动画剪辑与一般电影的剪辑也有很大不同,因为动画的拍摄非常耗时耗力,所以剪辑方案一般在前期分镜头本设计时就已经具体化,像电影中那样拍摄大量镜头,然后后期大规模剪辑改动是不可能的。剪辑好的影片称为“A拷贝毛片”,此时还只有画面,没有声音,也没有字幕。
聊聊声音混录。所有创作好的声音素材,包括配音、音乐和音效首先被灌制到一条录音带上,完成声音合成。初步合成好的录音带经过反复试听,微调使之达到理想的效果,之后就可以转换成光学声带(声片)。声片、字幕片和A拷贝毛片一同翻制到一条正片上,这个过程称为“套片”,套片完成就得到了“B拷贝毛片”或称“正式拷贝”。至此整个动画制作流程就顺利完成了。
计算机辅助制作二维动画,可以参与:角色动作原画、角色中间画 / 动画、背景绘制、描上、音乐音效和角色配音,以及数字合成、非线性编辑。
辅助三维动画创作,则参与:角色建模、角色装配、角色动画;场景道具建模、场景设置;灯光、材质渲染,以及音乐音效和角色配音,数字合成和非线性编辑。
按绘制效果分,动画可分为真实感和非真实感。
真实感3D动画,在造型、绘制(渲染)以及动态上都是真实的。非真实感3D动画,在造型、绘制(渲染)和动态上有不同组合,如:夸张造型,真实渲染,夸张动态。
按应用分,动画可分为:
元宇宙( Metaverse )可以笼统的理解为一个平行于现实世界的虚拟世界,现实中人们可以做到的事,都可以在元宇宙中实现。
元宇宙( Metaverse )需要各项技术的支撑,可以将元宇宙产业链分为七个各层次。
光栅图形:像素组成的点阵图像。
图形光栅化可以得到数字图像:
所谓“用等距矩形网格采样”得到数字图像,指将连续的图像空间划分为一个个等大小的矩形区域,并在每个矩形区域内选择一个代表该区域的像素值,从而将连续的图像转换为离散的数字表示。
对幅度等间隔量化(Uniform Quantization)是一种常用的信号处理技术,用于将连续的信号或数据离散化为一组有限的离散值。
在信号处理中,幅度等间隔量化是指将连续的信号幅度范围划分为若干个等间隔的区间,并将每个区间映射到一个离散的值。这个过程可以看作是将连续的信号“量化”为离散的数值表示。
关于视觉暂留原理:
常见帧率:电影播放 24fps;电视 25fps。因此需降低制作成本,可采取的操作:一拍二(即两帧重复同一画面);一拍三(日本动画)
计算机三维动画制作流程:
按技术原理分,动画可分为:
参数曲线曲面建模技术有:
Bezier 曲面是一种基于 Bezier 曲线的参数曲面建模技术。它使用控制点来定义曲面的形状,通过调整控制点的位置和权重,可以创建平滑的曲面。Bezier 曲面具有良好的局部控制性,可以精确地控制曲面的形状。然而,它的全局控制性相对较差,对整体形状的修改需要调整多个控制点。
B 样条曲面是一种基于 B 样条曲线的参数曲面建模技术。它使用控制点和节点向量来定义曲面的形状。B 样条曲面具有良好的局部和全局控制性,可以灵活地调整曲面的形状。通过调整控制点的位置和权重,以及调整节点向量的位置和间距,可以实现对曲面形状的精确控制。
NURBS(Non-Uniform Rational B-Spline)曲面是一种基于有理 B 样条曲线的参数曲面建模技术。它在 B 样条曲面的基础上引入了有理权重,可以更好地处理曲面形状的变化和控制。NURBS 曲面具有良好的局部和全局控制性,可以创建复杂的曲面形状,并且支持精确的数学表示。
Coons 曲面是一种基于曲线边界插值的参数曲面建模技术。它使用曲线边界和内部网格来定义曲面的形状。Coons 曲面通过插值曲线边界上的点和内部网格上的点来生成曲面。它具有良好的局部控制性和插值性质,可以创建平滑的曲面,特别适用于创建具有特定边界形状的曲面。
细分曲面建模技术有:
Catmull-Clark 方法是一种常用的细分曲面建模技术。它通过对曲面进行逐步细分,生成更加平滑的曲面。该方法使用控制网格来定义曲面的形状,并通过计算每个控制点的平均值和插值来生成细分后的曲面。
Doo-Sabin 方法是一种基于控制多边形的细分曲面建模技术。它将曲面细分为一组小的多边形,并通过计算每个多边形的中心点和插值来生成细分后的曲面。
Loop 方法是一种基于控制网格的细分曲面建模技术。它通过对控制网格进行逐步细分,生成更加平滑的曲面。该方法使用控制点和连接边来定义曲面的形状,并通过计算每个控制点的加权平均值和插值来生成细分后的曲面。
蝴蝶法(Butterfly Subdivision)是一种基于控制网格的细分曲面建模技术。它通过对控制网格进行逐步细分,生成更加平滑的曲面。蝴蝶法使用控制点和连接边来定义曲面的形状,并通过计算每个控制点的加权平均值和插值来生成细分后的曲面。
主要是:
相信都会判断左/右手系就不说了
至于世界坐标、屏幕坐标什么的 GAMES101 都学过了,看一眼就行(
基础的都会,不写了
缩放的公式:
Q:给定一个多边形的顶点序列,如何判断其是逆时针还是顺时针?判断其法线方向?如何计算其面积?
A:要判断一个多边形的顶点序列是逆时针还是顺时针,可以使用叉积的方法。假设多边形的顶点序列为 ,其中 表示第 个顶点。
计算叉积:
遍历多边形的每一条边,计算当前边和下一条边的叉积。
判断方向:
如果叉积均大于零,则多边形的顶点序列是逆时针方向;如果叉积均小于零,则多边形的顶点序列是顺时针方向。
要计算多边形的法线方向,如果多边形是在平面上的,那么直接拿两条不共线的边做个叉积就可以了。
要计算多边形的面积,可以使用以下公式:
其中 表示向量的叉积运算, 表示第 个顶点, 表示第 个顶点, 表示多边形的边数。
这是因为,叉积的结果的模是两个向量围成的平行四边形的有向面积,而多边形的面积可以看作是由多个三角形组成的,因此可以通过计算多个三角形的有向面积之和来计算多边形的面积。
叉积的行列式写法如下:
矩阵运算主要用来描述两个坐标系统之间的关系。通过定义一种运算而将一个坐标系中的矢量转换到另一个坐标系。
对角矩阵:对角线上的元素不为零,其余元素为零的矩阵。
单位矩阵:对角线上的元素为 1,其余元素为零的矩阵。
在使用别人的公式或源代码时,一定要弄清楚用的是行向量还是列向量。不然,结果是不一样的。
线代的基础知识,不写了(
矩阵的逆:对于一个 阶方阵 ,如果存在一个 阶方阵 ,使得 ,则称 是可逆的, 是 的逆矩阵,记作 。其中 表示单位矩阵。
正交矩阵:如果一个矩阵 满足 ,则称 是正交矩阵。
正交矩阵的几何意义:正交矩阵的行(列)向量是单位向量,且两两正交。给出一个正交矩阵 ,则 的行(列)向量构成了一个正交基。
也许是重点(
绕轴旋转:
绕轴旋转:
绕轴旋转:
缩放(以原点为中心):
到这里应该就够了。
方位(Orientation):描述物体的朝向
方向(Direction):和方位并不完全一样。向量有方向,没有方位;当一个向量指向特定方向时,可以让向量自转,但向量(或者说它的方向)却不会发生任何变化,因为向量只有“大小”,而没有“厚度”和“宽度”。然而,当一个物体朝向特定方向时,让它和上面的向量一样自转,就会发现物体的方位改变了。
方位是通过相对已知方位的旋转来描述的。旋转的量称为角位移。即,在数学上描述方位就等价于描述角位移。
方位的表示方法:
描述坐标系中方位的一种方法就是列出这个坐标系的基向量,这些基向量使用其他坐标系来描述。
用这些基向量构成一个矩阵,然后就能用矩阵形式来描述方位;换句话说,能用一个旋转矩阵来描述这两个坐标系之间的相对方位。这个旋转矩阵用于把一个坐标系中的向量转换到另外一个坐标系中。
方位是使用矩阵来描述的,矩阵表示的是旋转后的基向量。其是通过描述一个坐标系到另一个坐标系的旋转来确定一个方位。
优点:
缺点:
所谓病态矩阵,是指矩阵的条件数很大,即矩阵的行列式的绝对值很小,这样的矩阵在计算机中很难精确表示,因此在计算机中很容易产生误差。
基本思想:让一开始与“标准”方位对齐,然后按一定顺序分别沿三个坐标轴方向进行旋转,最后达到想要的物体方位。
欧拉角是一种描述方位的方法,它使用三个角度来描述一个坐标系相对于另一个坐标系的方位。这三个角度分别称为滚转角(Roll)、俯仰角(Pitch)和偏航角(Yaw)。
旋转步骤如下:
欧拉证明了一个旋转序列等价于单个旋转。(当然,我觉得矩阵表示也是)
An example: 绕旋转轴顺序 x-y-z,如 ,则有
优点:
缺点:
先说说第一条缺点。如一个角度上加上 360 度的倍数时,就出现形式最简单的别名问题,即,值虽然变了,但方位未变。所以要限制欧拉角范围。
万向锁问题:当俯仰角为 90 度时,绕轴和绕轴的旋转轴重合,此时绕轴旋转的角度就会影响绕轴旋转的角度,反之亦然。这种情况称为万向锁问题。所以,一旦选择俯仰角为 90 度,就要限制绕轴的旋转角度为 0 度,或者限制绕轴的旋转角度为 0 度。
再说说第二条缺点。无限制地使用欧拉角,会导致出现插值问题。比如,选择角度和,它们实际上只差了,但是插值时,会多绕很多圈。
轴-角表示是一种描述方位的方法,它使用一个向量和一个角度来描述一个坐标系相对于另一个坐标系的方位。这个向量表示旋转轴,角度表示旋转角度。
这一部分我觉得了解即可。
四元数是一种描述方位的方法,它使用一个四元组来描述一个坐标系相对于另一个坐标系的方位。四元数的四个元素分别表示旋转轴的三个分量和旋转角度的余弦值。
比如,可以这样写:,或者。
所谓单位四元数,就是四元数的模为 1 的四元数。
从复数角度理解四元数:
复数可以表示为,其中称为实部,称为虚部。
将复数表现在一个二维平面上,实部在轴上,虚部在轴上,可以看作是一个向量。这样,复数就可以表达平面中的旋转。
四元数可以看作是复数的扩展,它可以表达三维空间中的旋转。
优点:
缺点:
首先我觉得不会考四元数的具体运算
四元数运算法则:
四元数加法:
四元数标量乘法:
四元数点乘:。它满足分配率,但不满足交换率。也就是说,,而。
四元数的模:
有,实际上两个单位四元数的乘积也是单位四元数。
四元数的乘法(叉积):
四元数的逆:。有。
共轭四元数:
它表示的是相反的角位移。
所以,四元数和的乘积为:
也就是说,在只使用单位四元数时,四元数的逆等于四元数的共轭。
很多标准的复数性质都可用到四元数上,因此四元数旋转 3D 向量非常好用。
用轴-角表示方位时,不容易组合一系列旋转,但是却可以转换成四元数,从而方便得到组合旋转。
不过,虽然四元数能被解释成角位移的轴-角表示,但是、却不能直接存储在四元数的四个数中,而是:
将一个 3D 空间中的点拓展到四元数空间中,可以得到:
这样,轴-角表示的旋转就可以用四元数表示为:
这样,原本的向量,它绕着轴旋转角,就可以表示为:
我觉得这一部分就更不会考了
四元数插值的目的是,给定两个四元数 和 ,以及一个参数 ,计算出一个新的四元数 ,使得 既接近 ,又接近 。
四元数插值的一种方法是线性插值。给定两个四元数 和 ,以及一个参数 ,线性插值的结果为:
线性插值的结果是一个四元数,它的模不一定为 1,因此需要将其归一化,得到一个单位四元数。
线性插值的缺点是,它不能保证插值结果的方位是最短路径。即,如果 和 之间的角度大于 度,那么线性插值的结果可能不是最短路径。
四元数插值的另一种方法是球面线性插值。给定两个四元数 和 ,以及一个参数 ,球面线性插值的结果为:
其中, 表示 和 之间的角度。
同样的,球面线性插值的结果是一个四元数,它的模不一定为 1,因此需要将其归一化,得到一个单位四元数。
球面线性插值的优点是,它可以保证插值结果的方位是最短路径。即,如果 和 之间的角度大于 度,那么球面线性插值的结果一定是最短路径。
我觉得这一部分也是了解即可
颜色模型包括:
RGB 颜色模型通常用于彩色阴极射线管等彩色光栅图形显示设备中,它采用三维直角坐标系,红、绿、蓝为原色,各个原色混合在一起可以产生复合色,
需要注意的一点是,RGB 颜色模型所覆盖的颜色域取决于显示设备荧光点的颜色特性,是与硬件相关的。
CMYK 则是印刷颜色模型,它是由青色(Cyan)、品红(Magenta)、黄色(Yellow)和黑色(Black)构成的,其中 K 表示黑色,因为黑色用 B 表示会与蓝色混淆。常用于从白光中减去某些颜色,所以又被称为减性颜色模型。
Q:为什么打印用的是 CMYK,而不是 RGB?
A:因为打印机的墨盒是有限的,所以打印机的颜色模型是减色模型,而不是加色模型。打印机的墨盒只有青色、品红、黄色和黑色,所以打印机的颜色模型是 CMYK。
RGB 与 CMYK 的转换:
RGB 和 CMYK 颜色模型都是面向硬件的,相比较而言,HSV(Hue, Saturation, Value)颜色模型是面向用户的,该模型对应于圆柱坐标系的一个圆锥形子集。
HSV 颜色模型是一种将 RGB 颜色模型中的点在圆柱坐标系中的表示法,它的三个分量分别是色调(Hue)、饱和度(Saturation)和明度(Value)。
HSV 颜色模型对应于画家的配色的方法。画家用改变色浓(饱和度)和色深(亮度)的方法来从某种纯色获得不同色调的颜色。其做法是:在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时加入不同比例的白色,黑色即可得到不同色调的颜色。
RGB 到 HSV 的转换:
为什么只写了 YUV 呢,是因为幻灯片上只写了 YUV(
YUV 颜色模型是一种将 RGB 颜色模型中的点在圆柱坐标系中的表示法,它的三个分量分别是亮度(Y)、色度(U)和色度(V)。
在现代彩色电视系统中,通常采用三管彩色摄像机或彩色 CCD(点耦合器件)摄像机,它把彩色图像信号,经分色、分别放大校正得到 RGB,再经过矩阵变换电路得到亮度信号 Y 和色度信号 UV。YUV 信号是一种将 RGB 信号分离的信号,它的优点是:在传输和处理时,只需传输和处理亮度信号 Y,而色度信号 U 和 V 可以在传输和处理时被压缩,这样就大大减少了传输和处理的数据量,从而提高了传输和处理的速度。
其特点是,亮度信号 Y 与 RGB 信号相同,而色度信号 U 和 V 则是从 RGB 信号中分离出来的。因此,如果只有亮度信号 Y,而没有色度信号 U 和 V,那么就只能得到黑白图像,而不能得到彩色图像。
彩色电视采用 YUV 信号,可以解决彩色电视和黑白电视的兼容问题。因为,黑白电视只能接收亮度信号 Y,而不能接收色度信号 U 和 V,因此,彩色电视在传输和处理时,只需传输和处理亮度信号 Y 即可。
RGB 到 YUV 的转换:
Q:为什么屏幕显示的和打印的有差异?
A:因为屏幕显示的是 RGB 颜色模型,而打印的是 CMYK 颜色模型。RGB 颜色模型所覆盖的颜色域取决于显示设备荧光点的颜色特性,是与硬件相关的。CMYK 颜色模型所覆盖的颜色域取决于打印机墨盒的颜色特性,是与硬件相关的。因此,屏幕显示的和打印的有差异。
关键帧动画是计算机动画的最基本技术,其他动画技术(如后面章节介绍的技术)常结合该技术实现最终动画。在传统动画设计中,高级画师一般先画出关键帧,然后一般画师再据此画出中间帧。目前,计算机可以辅助插值计算出中间帧。
插值的方式有线性插值、双线性插值、三次多项式插值等。
对于两幅图像,可以对它们的每个像素进行插值,从而得到中间帧。
线性插值公式:
这个公式的意思是,对于两幅图像 和 ,对于每个像素 ,计算出中间帧的像素值 。其中 表示插值参数, 表示第一幅图像, 表示第二幅图像。
也可以使用三次多项式插值公式。
在形状插值中,关键是需要:
假设两个图形上各有 个关键点,则插值生成中间帧的程序如下:
for (t = 0; t <= 1; t += dt) {
for (i = 0; i < n; i++) {
x[i] = (1 - t) * x0[i] + t * (x1[i] - x0[i]);
y[i] = (1 - t) * y0[i] + t * (y1[i] - y0[i]);
}
}
插值生成运动路径曲线,有:
一般三维参数曲线形式:,其中 是参数。
补充一点数学。弧长的公式为:
常用夹角和弧长的比值来表示曲线的弯曲程度:
一些连续性的概念:
有性质如下:
如果曲线在处具有连续性,则曲线在处,通过适当参数化,该曲线也具有连续性
曲线在处具有连续性的充要条件是:,使得同时满足:
取,则曲线在处具有连续性。(幻灯片上是这么写的)
矩阵表示就不写了(
如何选择合适的插值技术?
Q:对于曲面上的路径计算,如何确定法向?如果要求必过顶点,算法如何设计与分析?
A:法向可以通过曲面的切平面确定。切平面可以通过曲面的切矢量确定。曲面的切矢量可以通过曲面的参数方程确定;如果要求必过顶点,那么就需要选择 Hermite 曲线或 Catmull-Rom 样条曲线。
给定一条参数化曲线,如何确定物体在该轨迹曲线上运动时在 t 时刻对应的位置点?
解决问题的一般方法:
也可描述为:
Hermite 曲线的公式如下:
如果规定 Hermite 曲线的基函数为:
则,这是上的三次 Hermite 曲线。
Hermite 需要知道两个端点的位置和切矢量。因此,在没有切矢量时需要构造切矢量。
Catmull-Rom 样条曲线是一种参数曲线,它的参数是 , 的取值范围是 。
Catmull-Rom 样条线的特征之一是指定的曲线将穿过所有控制点……并非所有类型的样条线都是如此。虽然如此,生成 Catmull-Rom 样条线的方法还需要两侧两个额外的控制点,这两个控制点不在曲线上,但是它们的存在影响着曲线的形状。
参考阅读:https://www.mvps.org/directx/articles/catmull/
要生成 Catmull-Rom 样条曲线,需要知道插值点的坐标信息,以及两侧两个额外的控制点的切向信息。
Bezier 曲线是一种参数曲线,它的参数是 , 的取值范围是 。Bezier 曲线的一般形式为:
其中, 是控制点, 是基函数, 是阶数。
Bezier 曲线是全局控制的。这意味着,修改曲线上的一个控制点,会影响整条曲线。同时,Bezier 曲线 / 曲面拼接时,满足几何连续条件是十分困难的。
至于说 B 样条曲线,无非就是多段 Bezier 曲线的拼接而已。所以 Bezier 曲线的性质,B 样条曲线也有。例如,它们都不穿过控制点。
很显然,要生成 Bezier 曲线,只要知道插值点的坐标信息即可。
三次 Bezier 曲线生成的伪代码:
函数 CubicBezier(p0, p1, p2, p3, t):
q0 = Lerp(p0, p1, t)
q1 = Lerp(p1, p2, t)
q2 = Lerp(p2, p3, t)
r0 = Lerp(q0, q1, t)
r1 = Lerp(q1, q2, t)
s = Lerp(r0, r1, t)
返回 s
Ease-in / Ease-out 的实现方法:
如果用正弦函数实现,那么:
用户指定时间、,将时间轴分为三段,先加速,后匀速,最后减速。
代码也没什么好说的,就是算上面这个公式,一波if
带走了(
如果用单调的三次多项式,则可以:
缺点是没有恒定速度的中间段。
简单来说要解决的是两个问题:
方法:前向差分(Forward Differencing)
前向差分的思想是,从曲线的起点开始,计算每一段的弧长,然后将这些弧长累加起来,就可以得到曲线上任意两点之间的弧长。
具体实现:
至于查表,可以找最近邻,也可以线性插值。想要加速,可以二分查找。
优点:
缺点:
解决方法:
上述固定步长的前向差分固然还行,但是我们更希望自适应方法。即,输入曲线路径,自适应的前向差分法应该得出一个参数值和弧长的表格。然而,它也可能造成两个半段直接就细分终止了。
自适应前向差分伪代码:
函数 AdaptiveForwardDifferencing(p0, p1, p2, p3, u0, u1, s0, s1, e):
u = (u0 + u1) / 2
p = CubicBezier(p0, p1, p2, p3, u)
s = s0 + Length(p1, p)
if |s - s1| > e:
AdaptiveForwardDifferencing(p0, p1, p2, p3, u0, u, s0, s, e)
AdaptiveForwardDifferencing(p0, p1, p2, p3, u, u1, s, s1, e)
else:
将(u, s)添加到表格中
上述代码的核心思想是:如果两个点之间的弧长大于误差,则将这两个点之间的弧长分成两半,然后递归的计算这两半的弧长。
说说 Frenet 帧方法。Frenet 帧方法是一种基于曲线的方法,它的思想是,给定曲线上的一点,可以通过曲线的切矢量和法矢量构造出一个坐标系,这个坐标系就是 Frenet 坐标系。
Frenet 帧方法(Frenet frame)是一种在曲线上描述位置、切线、法线和副法线的方法。它基于曲线上的参数化表示,通过计算曲线上每个点的切线向量、法线向量和副法线向量来描述曲线的局部几何性质。
Frenet 的坐标系由三个向量组成:
Frenet 帧方法的计算过程如下:
不过,当曲线上存在尖点时,即曲线在某个点上的切线向量为零向量,Frenet 帧方法无法定义法线和副法线。这是因为在尖点处,曲线的几何性质变得不连续。
相机路径跟随:兴趣中心方法(Camera Path Following: Adding a Center of Interest)
相机路径跟随是指在三维场景中,通过控制相机的移动路径和朝向,使其能够跟随物体或者场景中的特定点或区域,以实现各种视觉效果和交互体验。其中,兴趣中心方法(Center of Interest)是一种常用的相机路径跟随技术。
兴趣中心方法的基本思想是在相机路径上引入一个兴趣中心点,相机会朝向该点并以一定的方式跟随它。这个兴趣中心点可以是一个物体、一个特定的位置或者一个虚拟的目标点,用于引导相机的移动。
步骤如下:
路径过长,一个兴趣中心会影响效果。所以可以对路径分段处理,对不同的子路径,设定不同的兴趣中心;或者在不同的时间间隔指定不同的兴趣中心。
层次结构如下:
树结构如下:
这数据结构也没什么好写的(
计算方法:
使用 FK 计算末端坐标,如图:
缺点是:指定联合值来将图形定位到最终位置是非常繁琐的。
使用 IK 计算联合值,主要使用牛顿迭代法求解。
如图:
对于 IK 来说,如果足够简单,就可以直接求出解析解;否则,使用数值方法求解。
当然,IK 的缺点也是显而易见的:计算量更大,收敛速度慢;可能存在多个解。
牛顿法、Jacobian 矩阵、Moore-Penrose 广义逆矩阵等方法,不讲!
变形算法要求:在模型变形的同时,如何保持原始模型的基本形态。
所谓直接变形,就是直接选择模型物体上的一个顶点或一簇顶点,直接对其进行拖拽平移操作,并带动邻近顶点产生随动,这是最直接的变形方式。
主要要解决的是:如何选择顶点,如何拖拽顶点,如何随动邻近顶点。
我们发现,点移动距离变化应是逐渐衰减的。如果我们用幂函数决定距离衰减,则有:
其中, 表示变形点到当前顶点的最小相连边数, 表示变形点到当前顶点的最大相连边数, 表示衰减系数。 表示线性衰减, 表示更刚性的移动效果, 则更弹性。
在曲面上,比起考虑顶点间几何距离,不如考虑沿曲面的距离。
直接变形手动交互量大,变形效率不高,所以可以通过间接变形技术提高变形调整的效率。
基本思想:根据模型物体的自身特点建立变形工具,通过调整变形工具上控制顶点的位置,带动模型物体产生间接变形。
优点:
间接变形技术的可以分为四类:
流程图如下:
即:
对于基于体素的变形,有一种基于网格的变形。
带入基本流程,即有:
显然,它不会改变拓扑关系。
另一种基于 triangle mesh 的体素变形,也差不多,只是拖动的是三角面片的控制顶点。
基于曲面的变形,要求建立一个曲面片作为控制曲面(比如 Bezier 曲面,NURBS 曲面等),然后通过拖动控制曲面的控制顶点来改变控制曲面的形状,从而带动目标物体产生变形。
实现方法:
基于曲线的变形,利用一条或者多条曲线作为变形工具,该方法比较适用于扭曲或者裁剪坐标轴,或者沿着骨架曲线变形的物体。
流程:
找最近点的方法:离散化,建立 Frenet 标架。
但作为局部坐标系,Frenet 标架的缺点:
改进:最小旋转标架
(反正不考数学,摸鱼)
基于点的变形,以一个或者多个点作为变形工具,通过改变点的位置来改变物体的形状。
在这种模式下,用户首先定义一个控制点集,然后用控制点集表示出目标物体上的控制顶点,通过改变控制点集的位置来改变目标物体上的控制点,以达到空间变形的目的。
分为 2D 渐变和 3D 渐变。2D 渐变的本质是变形+插值。
坐标网格法是一种基于网格的渐变技术,它的基本思想是:将当前帧和目标帧的模型物体都划分成网格,然后插值出中间帧的网格,最后再将中间帧的网格插值出中间帧的模型物体。
伪代码:
For 每一中间帧 Ir
对源图像和目标图像的网格进行插值
根据源图像和中间帧的网格插值出中间帧的图像
根据目标图像和中间帧的网格插值出中间帧的图像
对上述两个中间帧的图像进行插值
输入:用户在源图像和目标图像中定义的对应的特征
输出:连续帧图像
伪代码:
For (i=0;i<=n;i++)
对源和目标图像的特征线插值得到中间帧图像的特征线
变形源图像Is到中间帧图像Isi
通过定位源图像和中间图像的像素关于每个特征线的位置
变形目标图像It到中间帧图像Iti
通过定位目标图像和中间图像的像素关于每个特征线的位置
对两个中间帧图像Isi和Iti进行交叉融合( cross-dissolved )
形成最后的中间帧图像Ii
多个特征线的变形:
其中, 表示特征线的长度,,, 是参数, 表示特征线上的点到特征线的距离。
当接近于零时,如果特征线上的点到特征线的距离很小,那么该点和特征线的变换几乎一致。当接近于零时,那么所有的特征线都会有近似相同的权重。
轴向切片法是一种基于体素的渐变技术,它的基本思想是:沿着轴向将模型物体切割成一系列的切片,每个切片的边缘可以有若干控制点,通过改变控制点的位置来改变切片的形状,从而带动模型物体产生渐变效果。
动力学动画是一种基于物理仿真的动画技术,它的基本思想是:根据物体的物理特性,通过计算物体的运动轨迹来模拟物体的运动过程。
刚体和粒子看一眼幻灯片就会了,不讲
流体力学动画,讲座,过!
那其实就柔体力学动画。聊聊弹簧质点模型。
弹簧质量模型就是由弹簧和质量点(质点)组成的网格模型。物体的轮廓被离散化为三角面片,其中边是由弹簧组成,点是质量点。
弹簧质量模型用来仿真布料还挺合适的。
一种布料变形技术的总体流程:
优点:
缺点:
除去这些不好的因素,弹簧质量模型是当前应用最广泛的一种变形模型。
3D 模型的表示方法:
原始数据(Raw data)
表面(Surfaces)
Solids
高级结构(High-level structures)
至于具体的,如果不知道每样是什么,看幻灯片去。
所谓分形,就是自相似的图形。分形的特点是:无论放大多少倍,都可以看到原来的图形。
创作分形图形的方法:
在替换这一步引入随机量,就可以产生山脉生成之类的东西。虽然严格来说不是自相似,但思想仍然是分形的思想。
以上是2D分形,3D分形也是类似的。
L-Systems之类的更是了解即可吧,不写了。
说说隐式曲面。其实就是一个空间中的函数,其零点面就是隐式曲面。所谓隐式,就是说没有显式的声明形状,而是通过函数来表示。
显示隐式曲面,可以:
别的全靠图形学常识(
细分曲面是一套用于生成曲面的算法,它的基本思想是:通过对曲面进行递归细分,从而得到一个光滑的曲面。它可以施加在任意拓扑结构的表面上,可以光滑曲面上任意位置。
细分策略:
Catmull-Clark算法的基本流程如下:
至于别的算法连Wikipedia上都没有详细流程,那就不写了。
总之这些算法的基本思想都是一样的,就是递归细分,加点,连线,成面。
看实时渲染去。