计算机图形学入门笔记

跟着Games101学习计算机图形学时的笔记,只记录了一些重点

计算机图形学简介

全局光照越nb(画面越亮)画面就越nb

推荐书籍Steve Marschner and Peter Shirley, “Fundamentals of Computer Graphics”, 3rd or later edition.

光栅化

图形学中一般用单位向量表示一个方向。

点积:计算两个向量的点乘可以计算他们之间的角度(判断大致是同向还是反向),可以计算两个方向上的投影,可以方便分解一个向量,

叉积:用右手定则判断,

image-20210414100706030
判断向量的左右关系:如图计算 a X b 如果是正的,则说明b在a的左侧。

image-20210414100916773
判断点的里外关系:如果AB X AP 为正(AP在AB左侧),BC X BP 为正(BP在BC左侧),CA X CP 为正(……),则P在三角形ABC内部。(这AB,BC,CA是三角形首位相接的三条边,如果方向反了,变成AC,CB,BA,也没有关系,此时AP,CP,BP都在左侧。所以只要叉积同向就能说明P在三角形内部)

定义一些垂直的轴:定义坐标系,把一个空间向量分解到三个坐标轴上

image-20210414102624017
用矩阵来表示点乘和叉乘

变换 Transform

image-20210414103217634
使用其次坐标来表示2d的点和向量

image-20210414103139552
image-20210414103340333
例子:(注意矩阵乘法没有交换律,所以顺序很重要)

image-20210414103428460
3d上的齐次坐标系(比二维的再多一维)

image-20210420192400182
image-20210420192413126
分别绕x轴,y轴,z轴旋转矩阵(连续乘这些矩阵实际上已经可以表示3维空间内任何一个方向)

image-20210414105342659
罗德里格斯旋转公式

mvp变换

模型、视图、投影变换

正交投影Orthographic Projection

image-20210418213758963
先按中心移到原点,再缩成1,1,1

透视投影Perspective Projection

1、把透视投影压成一个正交投影

image-20210418214853667
其中n为near离镜头近的距离,f为far离镜头远的距离

2、计算正交投影

image-20210419201911176
视口变换,

采样

把模型在有限的像素上投影出来

对于每个像素计算是否在三角形(某个模型)内,利用叉乘

粗暴的计算二值(要么0完全没有,要么1全部颜色),将造成锯齿

图形学中的采样效应:混叠,锯齿,摩尔纹,车轮现象

原因:欠采样(采样频率过低,包括空间上或是时间上)

解决方案:模糊(卷积,盒形平均,滤波等)

特别的,有超采样抗锯齿(MSAA)

原理是把一个像素当成四个像素点来计算,最后显示在屏幕上时则用这四个像素点是否有颜色来修改整个像素的深度

image-20210419212447834
more

计算遮挡

画家算法 painter algoihtm

对所有的三角形排远近,先画远的,再画近的。

缺陷:遇到重叠交叉的三角形就没办法画了,比如下图

image-20210405193257649

深度缓冲 Z-Buffer

同时绘制帧缓存和深度缓存,对于每个三角形的每个像素,如果深度小于深度缓存中的这个像素,则在帧缓存中渲染成它的颜色,并在深度缓存中记录新的更小的深度值。

image-20210405200051551
例子:image-20210405195840050
优点:与先画哪个三角形的顺序无关

着色 Shading

图形学里实际就是上材质

Blinn-Phong 反射模型

image-20210410202816596

漫反射 diffuse reflection

image-20210410202901611
实际上就是算光打到物体表面的能量

image-20210410202929580

高光 specular highlight

视角能看到多少光,实际上就是半程向量和法线之间夹角有多近

image-20210410203317298
如何取p的值 (通常用到100~200)

image-20210410203454009

环境光(近似的) ambient lighting

假设环境光照强度都是恒定的

image-20210410204408399
Ia:环境光照强度

着色频率 shading frequencies

image-20210410204902475

按面着色

每个面各自计算多少光照

按顶点着色

image-20210410205018762
根据周围几个面的平均方向来确定方向(或按照面积加权之后的平均方向)

按像素着色

image-20210410205141824

管线 pipeline

image-20210410205425070

纹理映射 texture mapping

用来表现某个位置的图案,应该是什么颜色的

image-20210410205604096
有些的纹理是可以堆叠的(无限拼合看不出破绽)

重心坐标 Barycentric Coordinates

image-20210411195212169
三角形内的任意一点的坐标,用A,B,C的坐标来表示。

image-20210411195310426
这个条件使这个点在三角形的平面上。

(1,0,0)时,表示点A的重心坐标。

image-20210411201748505
可以用VA,VB,VC代表某种属性,比如颜色的RGB值,代入这个式子,就能得到三角形中的每个点的颜色的平滑过渡。

纹理太小了

使用双线性插值 bilinear interpolation

image-20210411202608297
综合考虑周围四个点的取值,线性地(按比例)求出中间这个点的颜色。

同样的也有双立方差值,(综合考虑周围九个点的取值)

纹理太大了

会导致锯齿和摩尔纹

image-20210411202849778
1、使用去锯齿那一套方法(超采样:一个像素中四个采样点;模糊采样:MSAA等)太慢了

2、使用mipmap (快速,粗略,仅限正方形)

image-20210411203110206
在一开始就做好了各种像素情况下的平均(四个像素平均成一个像素了)

image-20210411203212683
只需要求出D(光栅化之后,每个像素间的距离)找到对应的mipmap第几层。

image-20210411203618776
由于D的层数都是整数,所以取整数时D的颜色会突变,再使用一次线性插值,让颜色平滑过渡。

image-20210411203928137
由于mipmap只适用与正方形,如果目标图像是一个离正方形相差大的图像,则会过于模糊(overblur)。可以使用各相异形滤波,实际上就是做mipmap的扩展,为其添加宽度(或长度)为原来一半时候的map。

image-20210411204239106
相应的,也有更加细致的。(消耗更多代价)

环境光照

image-20210412133443576
投射到球周围的六个面来表示(减少展开时候的形变)

用材质影响渲染

image-20210412133730179

bump map

在材质上定义关于相对位置的高度,

image-20210412134758990
其中u,v是材质图上的某一个方向,h()就是计算那个位置的相对高度,计算出那个点的切线,就能算出法线,用于计算反射光照。

几何

如何在计算机中表现几何

隐式几何 implicit

用函数关系表达式来表示一个几何图像

优点:方便计算某个点与几何体的关系(内部,外部,面上)

缺点:不直观,图形过于复杂时则很难表示

image-20210412141646450
用集合的思想来表示稍微复杂的几何体

image-20210412142027688
用signed distance function来计算渐变的中间情况

显式几何 explicit

image-20210412141112605
遍历左边图的u,v值,可以得到右图任何一个点的三维坐标

优点:方便采样,容易表示

缺点:很难确定某个点与几何体的相对关系

image-20210413160358756
点云是一种显式几何的表示方法,一般扫描得到的集合体都是点云的形式

image-20210413160629071
多边形面(用三角形和四边形构成复杂的几何体)

image-20210413160724876
.obj 文件就是多边形面来描述的,第一部分(v)是三角形的点坐标,第二部分(vt)是对应的纹理坐标,第三部分(vn)是对应的法线,第四部分(f)是定义的三角形的面 (f 5/1/1 1/2/1 4/3/1 构成一个三角形面,分别是由第五个点,第一个点,第四个点构成的面,用的纹理坐标是1,2,3,用的法线是1,1,1)

曲线 Curves

贝塞尔曲线 Bézier Curves

image-20210413161445570
取b0,b1上(t,1-t)记为b01,取b1->b2的点(t,1-t)记为b12,取b01->b12的(t,1-t)点记为b02,这个点就是对于曲线上的(t,1-t)点

image-20210413171327744
更一般时候的情况

缺点:难以控制,牵一发而动全身

image-20210413172639442
样条:确定一些点,然后用自然光滑的曲线连接(树枝)

image-20210413172843407
b样条(基函数样条),更高级的贝塞尔曲线,可以避免牵一发而动全身的问题,有局部性

曲面

image-20210413173051165
4*4的格子,先对每列上的四个点做贝塞尔曲线,得到四条贝塞尔曲线,分布在四列上,从行来看,每行都对应四条贝塞尔曲线上的各一个点(即每行对应四个点),把这些新的作为新贝塞尔曲线的控制点,得到每一行的贝塞尔曲线,像布一样,织成曲面。

网格操作

可以是细分、简化、规格化(让每个三角形趋向于正三角形)

loop细分

image-20210414205400242
先创建更多的三角形,

image-20210414205418698
再调整他们的位置(对于白点,每个较远点对他的影响是1/8,每个较远点对他的影响是3/8)

image-20210414205543744
调整老的点,依据周围几个点(根据该点的度(出度入度)决定)以及这个点原本的自己来决定

catmull-clark细分

image-20210414205917459
定义非四边形面和奇异点(度不为4)

对于每一个面,取这个面的中心点和每条边的中点,连接起来。

image-20210416191904701
发现2个非四边形面变成了2个奇异点,重复操作,使它更加光滑

image-20210416192126279
更新位置的算法

曲面简化

边坍缩(要坍缩哪些边?)

image-20210416193343178
最小化二次误差,计算新的顶点到原本的相邻的边的平方和。找到一个最小值。

计算坍缩任何一条边可以得到的最小二次误差,这条边会被优先坍缩,当这条边坍缩完之后,更新周围与其相关联的点的新的最小二次误差值,方便进行下一次坍缩。

阴影

Shadow Mapping

核心点:一个位置是否没有阴影取决于这个点是否能被观察者和光源同时看到。

观察者看到,光源没看到:有阴影

观察者看到,光源也看到:没有阴影

先计算光源位置看到的深度图,在计算观察者位置看到的深度图的时候,计算是否是同一位置。

问题:

  • 只适用于硬阴影

  • 质量取决于阴影贴图分辨率

  • 设计计算深度的比较(如何才算相等?尺度问题)

    image-20210416194913146
    硬阴影和软阴影的区别(光源不是点光源或不是平行光)

Ray tracing 光线追踪

时间换质量

3条假设:光直线传播;一束光不会被别的光影响;光从观察者出发,射向物体。

Whitted-Style

特点是递归的

对于玻璃球,计算反射和折射,计算光在物体间弹射。

image-20210504202357399
其中shadow rays计算是不是在阴影里

计算交点(光线和物体表面的交点)

image-20210504202941477
光线的表示

image-20210505154837922
光线和三角形的求交,联立解析式

image-20210505160427933
对于求交点,那就是求正的实数根。

image-20210505161523835
用平米上的一个点和平面的法线来规定一个平面上的所有点。

MT算法

image-20210505164235833
把三角形用重心坐标表示,三个未知量t、b1、b2。

Bounding Volumes 包围盒

光线追踪需要与场景内任何一个三角形求交,太慢了,采用包围盒的思想加快速度。

轴对齐包围盒 Axis-Aligned Bounding Box (AABB)

1、分别计算到每个轴的对面的t

2、进入的t取最大的,出去的t取最小的

3、如果x出去的t>x进来的t,说明这束光线确实通过了这个包围盒

image-20210505192144330
比较常规的求交点和aabb

加速求交

image-20210505192936080
对场景进行预处理,分割成许多格子(默认格子求交简单,而具体物体求交复杂),只需要计算光线与每个格子的求交情况,如果有物体在某个格子内,与格子有交点时再与该物体求交。(更好的思路:由于是光线,只需要判断已经有交点的格子的附近格子是否继续有交点,节省计算量)(格子的划分数量太多没意义,太少起不到作用。一个实践得出的平衡是格子数是物体的27倍:3 * 3 * 3 )

image-20210505194611082
其他的思路:八叉树、KD-Tree(每次交替地按某一轴二分)、BSP-Tree(非轴线二分)

KD-tree

image-20210505195139422
仅仅在叶子结点储存具体的物体,会形成一颗二叉树,到一个节点后继续向下判断是否在该节点的子节点里,最后定位到具体的物体。

BVH Bounding Volume Hierarchy

image-20210505210651574
与KD-tree不同的一点在于:KD-tree划分包围盒,再考虑包围盒与物体的关系;而BVH划分物体,再重新计算这些物体形成的新的包围盒(一个物体只在一个包围盒里)

image-20210505211159688
建立BVH的思路:1、沿最长的轴->均匀分块

2、沿中间的物体->比较平衡的树

辐射度量学

原来的问题,物理量没有严格的单位和定义,需要用更精确的物理

Radiant flux

image-20210505212221639
单位时间辐射能量,单位是W,瓦特,算一种功率,在光里,用lm(流明)来表示(光有多少亮)

intensity

image-20210505212750001
也叫radiance intensity,光源的光照强度单位立体角,单位cd坎德拉

image-20210505213052633
用平面角来类比立体角

image-20210505213510173
image-20210505213535717
积出表面积。

所有方向上的intensity加起来就是Radiant flux,所以单位立体角的intensity就是点光源的power除以4pi

irradiance

image-20210505212521586
物体表面某点(单位面积)受到的光强,照度,单位勒克斯Lx

image-20210506134326963
接受到的光强与光线和物体表面形成的夹角有关。

image-20210506134432141
与之前的不同处,光照强度是会衰减的。(Irradiance在衰减、Intensity不会变)

radiance

光单位时间、单位立体角、单位投影面积上的能量。

image-20210518110352987
image-20210518110654818
和Irradiance的、Intensity的区别,(用积分来转换)

BRDF (Bidirectional Reflectance Distribution Function)

用一个函数计算光如何反射。

image-20210518111706523
关于光线追踪的问题:一个点射出来的光需要用射到这个点的光计算->导致递归问题->需要解一个平衡方程

image-20210518111949927
image-20210518112444084
image-20210518112506259
image-20210518112531360
image-20210518112556879
image-20210518112614273
(ppt里写的真是简单明了)

蒙特卡罗积分

在一段连续函数内取几个点,用离散的方式计算积分。

image-20210518113256632

路径追踪

image-20210518114346976
就是解这个方程

image-20210518114457837
用蒙特卡罗积分来简化这个方程

image-20210518114639952
得到这样的算法:渲染,对于N个角度,对于每束光线,计算光线的强度,打到物体时,计算累积下来的光。

问题:1、N的指数级迭代,会指数爆炸。2、永远停不下来

解决:1、N改成1,但是会导致噪声过大,可以一个像素射出多根光线平均亮度。(从指数级变为乘级)。

image-20210518115121344
2、用Russian Roulette (俄罗斯轮盘赌、简称RR)来用概率的方式决定要不要继续,使E概率期望维持相同。

image-20210518115923803
问题:效率很低,因为当光源比较小的时候,很多条光线都没用上。

解决:把光源的光束独立地来算

image-20210518120105108
光源发出的光,就不需要用RR了

image-20210518120239356
新的渲染方程。

image-20210518120307076
除此之外,还需要计算是否有物体和光源之间的遮挡。然后路径追踪就写好了。

image-20210518120635876

Material == BRDF

如何表现一种材质,不同的brdf表现出不同的材质。

课上介绍了一些比较杂的反射、折射等,这里简单介绍几种材质

Microfacet Material

漫反射形成的原因:宏观上某个表面粗糙,像各个方向发射光线。

微观上:许多起伏的镜面反射。每个起伏考虑各自独立的法线。

使用microfacet材质可以很好地做出glossy(类似铜镜、像比较模糊的镜面材质)的材质

image-20210524162712184
F是菲涅尔项(光的角度与光的强度的关系),G是由于起伏会相互遮挡而产生的几何项、D表示法线分布

Isotropic / Anisotropic Materials

各项同性、各项异性材质

一般的材质都是各项同性的,但一些地方(如一些金属制品)有由于工艺而产生的纹路。

image-20210524163309407
以及尼龙、织物等细节结构并不是理想中的完美一大块,

BRDF的特性

非负性,线性可加性,可逆性(光路可逆,brdf的值相等),能量守恒性

image-20210529111951279
对于各项同性的材质来说,原本的brdf是四维的,可以看作三维的,只需要考虑方位角之差

测量BRDF

1、不断用不同方向的光源照射某个物体,不断用各个方向的相机记录下物体的反射的光。

缺点:测量量极大,需要四维的测量。

可以利用brdf的特性减少测量量:认为是各项同性,四维->三维;光路可逆,减少一半的测量;猜出一部分……

推荐 brdf库:MERL BRDF Database

前沿渲染技术

Biased Unbiased 有偏的估计和无偏的估计:无偏的估计指 计算得越多,就越符合真实的情况。无偏的则是 越精确的时候,也不一定和真实的更加相符。但当真的样本真的足够多的时候,还是会收敛到真实的情况,称为 consistent 一致性。

Bidirectional Path Tracing (BDPT)

双向路径追踪

image-20210529114253136
虚线是手动连起来的部分,实现起来很困难,

image-20210529132704912
适合光源那一头光线比较密集的情况

Metropolis Light Transport (MLT)

用马尔可夫链做相似(已经得到一个点的信息,可以很容易得到周边差距不大点的信息)

image-20210529132950363
适用于场景复杂,很难做路径追踪的时候。

缺点:所有操作都是局部的,导致各个点收敛程度不同,做动画的话,容易有抖动,画面看起来“很脏”。

Photon Mapping

光子映射(有偏的方案)

image-20210529133639380
方法是,用光子的概念量化计算光打到某个diffuse的表面(不是diffuse的话就该反射反射,该折射折射)。当这个表面被视角发出的射线看到的时候,则计算周围的光子个数来计算这个位置应该的亮度。

image-20210529133840196
由于是量化了光子,所以一定是有偏的,等到一个点的光子多到超过了周围N个光子的要求,就有一致性。

N太小,噪声大,N太大,会模糊。

Vertex Connection and Merging(VCM)

双向路径追踪和光子映射的结合

image-20210529134500532
双向路径追踪射出来的点和光子计算距离

制作电影里有许多应用

Instant Radiosity (IR)

实时辐射度算法:把受到光照的点当作新的光源,当作VPL(Virtual Point Light),可以用直接光照来算弹射一次的光照了

优点:很小的计算量,在diffuse面上不错的效果

缺点:边界处会出现问题,无法处理glossy(铜镜)材质

前沿的模型

image-20210529203626336

非平面模型

比如雾

image-20210529204906662
散射

image-20210529205219214
不同的散射模型

渲染头发

Kajiya-Kay Model

image-20210529212234285
有一定的向各个方向的散射

Marschner Model

更精细的

image-20210529212337721
image-20210529212359187
从生物学上学习人的头发和动物的毛发的区别:动物的毛的髓质更粗(光线打到髓质反射,打到外面的角质层则散射,所以对渲染有影响)

Granular Material 粒状材料

将一个物体用沙子类的粒状来表示

Surface models

半透明的玉石

image-20210529213556522
Subsurface Scattering 次表面散射(被用于渲染人体、玉石雕塑)

从一个点进入,从另一个点出去,在内部的表面中发生了散射

布料 cloth

image-20210529213839903
fiber -> ply -> yarn

为了更真实,需要去把布料当成纤维组成的物体而不是简单的平面

现实的物体往往没想象中的美好

image-20210529214129130
NDF:法线分布方程

image-20210529214234267
image-20210529214319347
NDF的运用:如图路径采样很困难,

image-20210529214401360
用一个像素照到的区域,来计算微表面的NDF,用于微表面模型里

结合波动光学的细节材料

image-20210529220252336
image-20210529220346910
仔细看就会有因为波长而产生的颜色

Procedural Appearance

image-20210529220545203
用噪声方程来渲染木头纹理、陶瓷纹理,三维的纹理,适用于需要空间中任何一点的纹理(正常情况的纹理贴图做不到)。随取随用,再经过自定义的后期操作,就能产生适合某种物体的纹理细节。

捕捉

image-20210529221255357
拍照时,怎样收集光,1、小孔成像 2、用透镜来聚焦光线

image-20210529221404262
不聚焦光线的后果…

Field of View (FOV) 视场

image-20210529221518077
指代能看到的角度范围,(由于感光元件的大小或者是感光元件与透镜间的位置关系不同,FOV也会发生变化)

Exposure 曝光

如何在感光元件上留下信息?光强 * 时间

image-20210529221828972
光圈大小、快门速度(曝光时间)、感光度都是影响摄影的曝光的部分。

image-20210529222001508
对比图。iso感光度提高会放大噪声对图片的影响

image-20210529222032133
一般情况下,成平方比例。F-Stop 光圈大小,数字越大,光圈越小; Shutter曝光时间

透镜

image-20210529222413832
透镜方程

Defocus Blur 由于没有对焦而产生的模糊

image-20210529222928293
即模糊(或COC)与光圈大小成正比,光圈的f数就是焦距除以光圈的直径

Ray Tracing Ideal Thin Lenses

image-20210529223930091
用模拟薄透镜结合光线追踪来作出对焦的效果

Depth of Field 景深

image-20210529224102799
成像屏幕的附近一段深度(Depth of focus)认为其的COC足够小,对应的景深(Depth of field)可以认为是清晰的,于是,其他的部分就是模糊的。

颜色

Light Field / Lumigraph 光场

The Plenoptic Function全光函数

image-20210530132334830
sita和fai 用极坐标表示任何一个方向,lamda决定波长(颜色),t是看的时间(不同的时间看到的东西不一样),Vx,Vy,Vz是观察者的位置(观察者可以在任何一个地方看)image-20210530132957585
三维空间中的光线,发射点和方向

image-20210530133058544
(假如方向已知)两个点确定一条直线,来表示一条光线

光场某个物体的某个点,向任意一个方向的发光情况(光的强度)。光场是全光函数的一部分,用二维的位置和二维的方向来表示。

image-20210530133628922
两个平面上各选一个点,就可以确定所有空间内能看见的光线。

光场摄像机

记录下一整个光场,可以做后期处理

image-20210530135809638
光场照相机的思路就是相当于一个像素一个相机

色彩的物理基础

image-20210530140250880
可见光谱

Spectral Power Distribution (SPD) 谱功率密度

image-20210530140409343
不同的颜色说明谱功率密度不同

谱功率密度具有线性可加性

色彩的生物学基础

颜色是人感知到的

image-20210530141038186
人的视网膜上的感光细胞,Rods负责感受光强、Cones(有三种S,M,L)负责感受光的颜色

Tristimulus Theory of Color

image-20210530141605295
视网膜看到三种颜色的值,再进入大脑来合成

Metamerism 同色异谱

image-20210530142359925
不同的光谱密度分布可能出现相同的颜色,应用于难以发出类似自然光的显示器上。

Additive Color 加色系统

image-20210530142633230
更改RGB三个色来产生颜色

image-20210530142705378
某些时候,RGB的值可以是负的

颜色空间

除了RGB之外,也有别的方式表示颜色

CIE XYZ

image-20210530142934927
XYZ的值与光谱的关系

image-20210530142956138
由于x+y+z=1,可以用2个值来表示,画在坐标轴上表示色域(称为色度图)

image-20210530143156072
各种颜色表示方式的色域比较

HSV Color Space (Hue-Saturation-Value)

image-20210530143255875
把颜色放在一个圆柱里,hue表示色调,saturation表示饱和度,value表示光强度。常用于取色器

CIELAB Space (AKA L*a*b*)

image-20210530143542016
用三个相对的(互补色)颜色维度来表示颜色

人眼有互补色效应

CMYK: A Subtractive Color Space 减色系统

image-20210530143750816
常用于打印机(K黑色是为了节省墨水才加入的)

动画

Keyframe Animation

关键帧动画

image-20210530151330141
用关键帧来控制物体动画的走向,再添加上补间部分

Physical Simulation

物理模拟

质点弹簧系统

image-20210530151726756
image-20210530151837470
摩擦力会让能量损失

问题:这种摩擦力只能表示外力,而不能表示物体的内力(一段匀速运动的弹簧,也会因为这里的摩擦而减慢)

image-20210530152219453
根据弹簧长度来计算的摩擦力(总是趋向于让弹簧恢复原长的方向)

弹簧的结构

image-20210530152335428
质点弹簧系统如何应用于物体。

image-20210530152436165
考虑一块布的质点弹簧系统:需要抵抗各个方向的剪切力、抵抗向平面外的弯曲。蓝线力较强、红线力较弱

Particle Systems 粒子系统

优点:易于理解、具有可伸缩性(容易控制个数多少、速度快慢)

缺点:需要许多颗粒、需要加速结构

image-20210530152929955
粒子系统的渲染方法

正向运动学

如何做出动画

image-20210530153217929
定义好一个骨骼系统

image-20210530153248654
可以计算出最后的点可以到的位置

效果:定义好骨骼和各个角度,最后可以知道尖端停在哪

逆向运动学

艺术家们想只要结果,无所谓过程。

image-20210530153513428
同样的例子,反向算出角度很困难。而且可能有不唯一的解。(相关话题:机器学习,梯度下降法)

Rigging

rigging:操作提线木偶

通过绑定控制点的方法来操作3d模型

Blend Shapes

应用了类似骨骼系统,只需要控制出关键帧,就自然能生成自然的过渡动画

Motion Capture 动作捕捉

在演员身上绑定好各种球,再使用特殊的相机来捕捉动作

优点:短时间内制作大量动作,更加真实

缺点:复杂且昂贵的设备,无法满足艺术需要

动画的生产管线

image-20210530154602682

单粒子模拟

来计算某个例子在一个速度场的运动轨迹(任何一个时刻的位置)

image-20210530155318814
(一阶的)常微分方程

Eular’s method

image-20210530155443718
delta_t太大时,极大地偏离正确的轨迹

具有不稳定性(在一个趋向于某点或某方向的速度场中无法趋向于那个点或方向)

Midpoint Method 中点法

image-20210530155819828
用原本欧拉方法算出来的终点的中点去计算欧拉方法

Modified Eular

image-20210530155911028
综合了步长的出发点和终点

Adaptive step size 动态步长法

image-20210530160034061

Implicit Euler Method 隐式欧拉法

image-20210530160615155
用下一个时刻的速度来计算下一个时刻的位置,需要解一个不好解的方程。稳定性:非常稳定

稳定性的计算

image-20210530160805474

Runge-Kutta Families

一类方程,很适合解这种常微分方程

image-20210530160948762
举例子:其中最常用的RK4方法

Position-Based / Verlet Integration 非物理的方法

用位置间的相互关系来模拟物体的运动

Rigid body simulate 刚体的模拟

image-20210530161617095

Fluid Simulation 流体的模拟

当成水是不可压缩的刚体,小球分布的位置总是趋向于密度相同(与平静的水相比)

拉格朗日方法 vs 欧拉方法

拉格朗日方法:画面的变化是因为质点随着时间变化

欧拉方法:画面的变化是画面中某个空间随着时间变化

将两者结合起来的方法叫做物质点方法 Material Point Method (MPM)

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2021 d1gg12
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信