GAMES201 Lec1 课程介绍

Lec1 课程介绍

基于物理的动画简介

img

物理引擎及应用

定义:在电脑中模拟真实世界

img

应用:计算机辅助设计,电影特效,VR/AR,训练机器人,游戏

img

课程关键词

离散化、高效求解器、生产力、性能、硬件体系结构、数据结构、并行化、可微编程

img

img

img

img

img

img

img

img

Taichi 编程语言简介

什么是太极

img

太极的安装

img

太极的初始化

img

太极的数据结构

img

太极的张量

img

kernels

用于计算的函数,即时编译,kernel不能调用kernel

img

functions

kernel和func均可调用func

img

标量

img

矩阵和线性代数

img

原子操作

img

调试

img

GAMES201 Lec2 拉格朗日视角(1)

Lec2 拉格朗日视角(1)

介质模拟的两种视角

拉格朗日视角

用拉格朗日粒子、三角网格、方格等代表跟随材料移动的节点,不断检测自身的位置和速度

img

欧拉视角

网格本身不移动,检测穿过当前节点的材料的速度

img

两种视角的对比

通常来说,拉格朗日视角很好地体现了“随波逐流”,而欧拉视角更倾向于“岿然不动”

img

拉格朗日视角下的粒子模拟和欧拉视角下的烟雾模拟

img

弹簧质点系统

简单但是实用,一般用于布料系统、弹性物体等

img

系统的理论依据:胡克定律和牛顿第二定律

img

时间积分

计算机中的时间并不连续,所以需要将时间离散化

前向欧拉,半隐式欧拉,隐式欧拉(经常和牛顿法一同使用)

img

时间积分器

显式积分:

  • 未来的状态只取决于过去的状态
  • 容易实现
  • 容易爆炸( 需保证约束 )
  • 对刚体材料模拟较差

隐式积分

  • 未来的状态取决于过去和未来的状态
  • 但引入了鸡与蛋孰先孰后的问题
  • 难以实现
  • 每一步更加费但允许更长的时间间隔
  • 会产生一些振荡和死锁问题

img

实现流程

img

解线性系统

将上式整理得到线性方程形式,对于大规模矩阵,求解逆矩阵是一个很费的事情,可以使用各种近似方法进行求解。

img

雅可比迭代(Jacobi iterations):解线性方程的较为简易的迭代法

img

统一显式与隐式积分器

取不同的值即可得到不同的积分器

img

平滑粒子流体动力学

使用带有物理量的粒子和kernal函数W来近似连续场(A可以是任何随空间变化的物理量,如密度、压力等。原始的SPH主要被用于天体,也适合处理自由表面流体)

img

用物态方程做SPH

关键是求解方程(D表示材料导数material derivatives)。流体的运动和流体之间的压强,所受外力有关,所以与压强 、密度以及所受外力 (主要来自重力)有关,压强又可以进一步表示,最终得到一个与密度有关的等式。

img

根据上述几部分内容,这时就能求出压强的导数,虽然不大准确,但至少对称且满足动量守恒。从而可以使用欧拉法更新下一个时刻的速度与位置

img

实现流程

img

SPH的一些变种

  • Predictive-Corrective Incompressible SPH (PCI-SPH)

引入预测机制的隐式积分

  • Position-based fluids (PBF)

PBD结合SPH方法

  • Divergence-free SPH(DFSPH)

速度上无源场

img

柯朗-弗里德里希斯-列维条件

该条件用于确定时间步长的上界,在实际使用通过设定值来计算得到时间步长的最大值。

img

加速SPH:近邻搜索

SPH需要对每个粒子遍历周围的所有粒子,计算复杂度是 O(n^2) ,在实际中可以使用近邻方法进行加速,具体可以使用数据结构(如体素网格等),只在周围的格子里找半径小于h的粒子进行计算,将计算复杂度降至O(nlogn)

img

其他基于粒子的模拟方法

DEM(Discrete element method):一种离散元素模拟方法,可以用来模拟沙子等

MPS(Moving Particle Semi-implicit):类似SPH,可以更好表现流体的不可压缩性

Power Particles : 视觉上粒子之间的间距会非常均匀

img

GAMES201 Lec3 拉格朗日视角(2)

Lec3 拉格朗日视角(2)

弹性与有限元

模拟弹性物体十分有趣

  • 不错的视觉表现
  • 不难的实现过程
  • 许多其他材质的基础(粘弹性, 弹性塑料, 粘塑性…)

img

形变

形变映射把物体由静止位置映射到形变位置 。将此函数对静止位置求导,得到形变梯度 。

img

超弹性材料

ψ:势能函数,定义了应力和应变的关系,直观理解为惩罚形变的势函数

应力:材料内部的弹性力,用来恢复材料形状的内力

应变:材料形变的度量,可用形变梯度替换

img

应力张量

应力代表无限小的材料组件对其周围施加的内力

三种常见的应力张量:P、τ、σ

  • P:对ψ求导,在原空间下计算得到应力张量,不对称(易于计算)
  • τ:在形变后的空间计算得到,对称
  • σ:比较常用,在形变后的空间计算,对称(因为角动量守恒)

img

常用物理量

  • 杨氏模量
  • 体积模量
  • 泊松比 ∈[0,0.5) (存在负泊松比)
  • 拉梅常数 第一常数 (一般用于固体) 第二常数(一般用于液体)

img

超弹性模型

一般采用Neo-Hookean,形变非常小采用Linear elasticity(旋转后体积无条件变大)

img

有限单元法

使用连续偏微分方程将空间分为一个个的元素,建立离散

img

线性三角形有限元

线性三角形有限元(弹性)假定形变映射是仿射的,因此形变梯度在单个四面体单元内是恒定的。

img

形变梯度F的计算

1.将x拆分为三角形三个顶点a,b,c

img

2.构建矩阵B和D,并由此构建出矩阵F

img

显式线性三角形有限元

对每个元素的势能先求导再求和,拆出每个元素的势能,并使用链式求导法则化简替换

img

隐式线性三角形有限元

式中需要求二阶导数(图与视频有出入)

img

太极的高级应用

面向对象数据编程

img

元编程

img

可微编程

img

可视化

img

GAMES201 Lec4 欧拉视角

Lec4 欧拉视角

材料导数

一块材料上物理量的变化取决于时间和空间上的变化

img

不可压缩的NS方程

速度变化由压强,粘性(一般忽略)和重力加速度三者决定

因为不可压缩,故速度场没有散度

img

算子分解

先计算平流(速度场的变化),再加上外力,最后由压强进行投影操作,使速度场散度为零

img

img

网格结构

均匀网格

将所有信息都存在网格中心

img

交错网格

相较于均匀网格,交错网格用中心差分离散了压力梯度带来的问题

img

双线性插值

以面积为权值做双线性插值

img

平流方案

半拉格朗日平流

基于上一时间步的信息得到这一时间步的物理信息

img

由于速度场并不恒定,物体的移动路径可能非常复杂,用简单的回溯可能会使得到的路径偏离正确路径许多,表现在实际模拟中就是缩小和模糊的问题

img

缩小问题:显式中点法

回溯一半,再以此时的速度进行回溯

img

模糊问题:前后误差补偿和校正

将速度场分别往前和往后推 Δt ,作差后取均得到误差值,将结果加上误差值即可

img

投影方案

求解标量场使其速度场叠加上其梯度后无散度

克林投影

拉普拉斯算子

img

泊松方程

中心差分法近似拉普拉斯,先求梯度再求散度

img

空间离散化

img

速度场的散度

img

压强的散度

img

解线性系统

  • 直接求解:PARDISO
  • 迭代求解:高斯-赛德尔 雅可比 krylov子空间求解

img

矩阵存储

  • 密集矩阵:规模不大时直接存
  • 稀疏矩阵:CSR、COO等
  • 无矩阵:不存

img

krylov子空间求解

其中一个最著名的变形为共轭梯度法 conjugate gradients (CG)

其他一些其他在图形学中不常用的方法有CR、GMRES、BiCGStab等

img

img

img

img

预处理

条件数:一个评价收敛速度的值,越小则收敛越快,等于SPD的最大特征值/最小特征值

减小条件数:找到一个近似的矩阵,且容易求逆。左右同乘逆,此时条件数可能会变小

img

img

多重网格方法

img

img

img

总结摘要

img

改进方案

修正速度场在经过平流和投影后能量的损失,降低了流体的粘性

img

img

扩展方向

  • 从2D到3D模拟
  • 精确的边界以及流体固体的耦合
  • 两相流体模拟
  • 处理自由表面,水平集方法
  • 处理涡量守恒

img

GAMES201 Lec5 线性弹性有限元与拓扑优化

Lec5 线性弹性有限元与拓扑优化

有限元概述

有限元法

有限元法是伽辽金法的一种,将连续型偏微分方程转化为线性系统,用于后续求解
经典步骤:

  • 将强型偏微分方程转化为弱型偏微分方程
  • 分步积分
  • 散度定理进一步简化偏微分方程并得到诺依曼边界条件的显式形式
  • 离散化
  • 求解线性系统

img

二维泊松方程

即拉普拉斯方程(泊松方程的简化形式)

  • 狄利克雷边界/第一类边界:直接给定边界上的值
  • 诺依曼边界/第二类边界: 边界上的值为导数/梯度的值乘以法线方向

img

离散化泊松方程

化简

用一个任意的二维标量函数w(x),与强型式∇·∇u相乘,再用w直接与∇u相乘再求导,并展开化简,对两边同时积分化简可得到散度定理:在一个体内对散度的面积分 = 边界上的向量函数和法向量点乘绕边界的线积分

img

img

img

离散

用线性的基函数模拟连续函数,再离散化函数,最后引入矩阵形式

img

img

img

img

img

边界条件

用对应的边界条件加以限制

img

线性弹性有限元

准静态过程下速度很小约为0,重力为0。

自由度: 位移

img

有限元法求解

用“,”表示求导,αβγ对应xyz轴

img

将求散度的部分乘以w,再分步积分

img

离散化w和u

img

求其中σ和u的线性关系

img

带入得到线性系统Ku = f

img

img

拓扑优化

根据给定的负载情况、约束条件和性能指标在给定的设计区域内对材料分布进行优化,是结构优化的一种。

img

GAMES201 Lec6 混合欧拉-拉格朗日视角(1)

Lec6 混合欧拉-拉格朗日视角(1)

欧拉法和拉格朗日法对比

衡量模拟质量的因素

  • 物理属性:动量/角动量/体积/能量
  • 性能:并行性/访存
  • 复杂度

img

欧拉法和拉格朗日法对比

欧拉法在投影阶段优势:

  • 易于离散化拉普拉斯算子
  • 查找邻居信息效率高
  • 易于预处理,使收敛速度变快

欧拉法在平流阶段缺点:

容易损失能量以及丢失几何细节

img

拉格朗日法在平流阶段优势:

  • 易于移动位置
  • 易于满足守恒(低耗散)

拉格朗日法在投影阶段缺点:

  • 不容易离散化
  • 需要复杂的数据结构查询邻居信息

img

混合欧拉-拉格朗日法

混合欧拉-拉格朗日法步骤

  • 粒子转网格:把粒子上的信息存储到欧拉网格上
  • 网格操作:把速度的散度分量利用投影消除(不可压缩),应用边界条件
  • 网格转粒子:信息从欧拉网格到粒子
  • 粒子操作:移动粒子,更新材料的形变、梯度、体积等其它属性

img

质点网格法(PIC)

质点网格法中的粒子网格互转:二维范围内,属性给到周围3x3的网格,按照距离远近使用核函数计算权值

img

img

img

质点网格法和泊松求解器结合

模拟步骤:

  • 粒子转网格:将速度从粒子散入网格
  • 在网格上求解压力,并经过投影阶段更新速度场
  • 网格转粒子:从速度场网格得到粒子速度,更新粒子的位置

img

问题:能量耗散,流体过粘

原因:网格转粒子阶段信息丢失,18自由度变成2自由度

img

改进:

  • 传输更多的信息:APIC,PolyPIC
  • 只传输增量:FLIP

img

仿射粒子元胞法(APIC)

在速度场的基础上增加了一个仿射场,使粒子的自由度由2个增加到了6个,保证了角动量守恒

img

img

img

多项式质点网格法(PolyPIC)

在APIC的基础上,粒子的自由度从6个增加到18个(理论上能在网格和粒子的转化中不丢失任何信息)

img

隐式流体粒子(FLIP)

在网格和粒子相互转化的过程中,只传递物理量的增量而非物理量本身

缺点:噪声大,且需要额外的空间存储网格再计算差值

img

PIC能量耗散大,FLIP噪声大,将两者结合起来,可以达到能量耗散不大且噪声变小的效果

FLIP0.99 = 0.99 * FLIP + 0.01 * PIC

img

物质点法(MPM)

较好的混合欧拉-拉格朗日法的模拟方案,粒子存储了速度、形变梯度、体积等物理量

img

img

MPM法流行的原因:

  • 耦合了不同的物理材料
  • 处理碰撞和自碰撞
  • 材料断裂的处理
  • 模拟大形变

img

img

img

GAMES201 Lec7 混合欧拉-拉格朗日视角(2)

Lec7 混合欧拉-拉格朗日视角(2)

移动最小二乘物质点法(MLS-MPM)

仿射粒子元胞法(APIC)

对比PIC额外维护了变量C(2x2或3x3的矩阵),记录了粒子周围的仿射速度场(ax+b中的a项)

  • 粒子转网格:求网格上的动量和质量,其中增加仿射的部分
  • 网格操作:从动量求出速度,求解泊松方程得到无散的速度场
  • 网格转粒子:将速度转到粒子上,更新粒子位置,求新的矩阵C

img

移动最小二乘物质点法(MLS-MPM)

对比APIC改进的地方:

  • 粒子转网格:将形变梯度引入动量的计算,增加了一个弹力项
  • 网格操作:计算弹性物体时,压力投影替换为边界条件的约束计算得到速度

img

计算形变梯度

使用矩阵C近似了速度的梯度

img

计算内力

其中f为对弹性势能求导

  • 代入势能公式
  • 对x估值的求导等于对速度的求导乘以τ
  • 链式求导法则带入对F和C的求导
  • 求导
  • 化简

img

img

网格操作

在网格上边做分步积分和应用散度定理
边界类型:

  • 粘性边界,速度归零
  • 滑移边界,靠近和离开边界时均有阻力
  • 分离边界,只在靠近边界时存在阻力

其他情况:

  • 重力对速度的作用,施加在边界计算之前
  • 包含其他碰撞的物体时,取相对速度
  • 边界的摩擦

img

MLS-MPM对比MPM的优点

  • 重用APIC的C矩阵作为形变梯度中∇v的近似,减少了浮点运算
  • 将形变的更新从网格转粒子阶段提前到粒子转网格阶段,减少了带宽消耗
  • 在粒子转网格计算动量时,其中APIC和MLS-MPM的动量项可以合并,节省了浮点运算

img

本构模型

一些在框架下实现的材料模型:弹性物体,流体,弹塑性物体(雪、沙等)

本构模型实现时需要注意的点:形变更新、压强计算

img

弹性体

img

流体

用体积变化比求压强P,得到柯西应力

数值不稳定性:在求行列式时,可能出现精度问题(常见于流体模型)

避免方案:在粒子中增加对J的存储,而非使用形变梯度F求出新的J

img

使用弹性模型,把参数µ设置为零

img

弹塑性体

  • 更新弹性形变梯度
  • 求奇异值分解矩阵
  • 裁剪掉Σ中拉伸和压缩超出范围的值
  • 用裁剪后的Σ作为弹性形变梯度,裁剪掉的值作为塑性形变梯度

img

物质点法中的拉格朗日力

将物质点法中的粒子作为有限元法的顶点,计算采用有限元法的势能模型,不再需要计算形变梯度

  • 对比有限元法:能处理自碰撞
  • 对比物质点法:由于使用了纹理而不是网格,避免物质点法中由于采样密度不够高导致的数值断裂
  • 更容易耦合物质点法和有限元法

img