【GAMES201学习笔记】Lecture 2 拉格朗日视角(1)

GAMES201学习笔记

🔗 官方课程主页
🔗 B站视频链接

第零章 课程数学基础
第一章 Lecture 2 拉格朗日视角(1)
第二章 Lecture 2 拉格朗日视角(2)



前言:Lagrangian v.s. Eulerian: Two Views of Continuums

拉格朗日视角 vs. 欧拉视角

在这里插入图片描述

Lagrangian View: Sensors that move passively with the simulated material.
拉格朗日视角:想象在需要模拟的介质中加入很多随波逐流的“小船”,“小纸船”会跟随介质一起移动。采用拉格朗日粒子、三角网格。每个Sensor不断的检测自己的位置、速度等。

在这里插入图片描述

Eulerian View: Still sensors never moves.
欧拉视角:想象在介质中打了很多木桩,木桩不断的检测流过自己的介质的速度等物理量。

对比如下图。
在这里插入图片描述
欧拉视角一般不记录位置,拉格朗日需要记录质点自己的位置。

本系列第一章、第二章都会介绍拉格朗日视角下常用的物理模拟。

一、Mass-Spring System (弹簧质点模型)

拉格朗日视角的一个非常有用的模型:弹簧质点模型
在这里插入图片描述

1.1 Mass-spring system的数学模型

在这里插入图片描述
本质上就是胡克定律 + 牛顿第二定律

1.2 Time integration (时间积分)

1.2.1 什么是时间积分

计算机中的模拟都是离散的,也因此出现FPS的概念,即帧每秒

因此一般会取一个极短的时间 Δ t \Delta t Δt作为自变量,根据系统当前时刻 t t t,对系统的下一时刻 t + 1 t+1 t+1进行求解,即所谓的对时间积分(离散的积分可以理解为 Σ \Sigma Σ求和)。

1.2.2 实现时间积分的方法

在这里插入图片描述

  1. 前向欧拉:根据现有状态推测以后的状态。
  2. Symplectic Euler法:把速度换成 v t + 1 v_{t+1} vt+1,要比前向欧拉法要准确,常用。
  3. 后向欧拉,通常搭配牛顿方法进行求解。

1.3 用Symplectic Euler实现弹簧质点模型

三步:
在这里插入图片描述

  1. 计算新的速度
  2. 与地面进行碰撞
  3. 计算新的位置

为什么在中间第2步做碰撞?避免计算新位置导致陷入地底。

1.4 显示时间积分 v.s. 隐式时间积分

在这里插入图片描述

1.4.1 显示时间积分

前向欧拉、Symplectic欧拉、RK,RK2,RK3,RK4,etc…

  • 未来仅由过去决定
  • 实现简单
  • 容易爆炸
  • 对于硬(stiff)的材料不友好

关于爆炸, Δ t \Delta t Δt需要满足下面公式:
Δ t ≤ c m k ( c   1 ) \Delta t \leq c \sqrt {\frac{m}{k}} \quad (c ~ 1) Δtckm (c 1)
粒子质量大的时候,允许的 Δ t \Delta t Δt较大; k k k较大的时候,允许的 Δ t \Delta t Δt较小。

1.3.2 隐式时间积分

后向欧拉,中点法,etc…

  • 未来同时依赖于过去的状态和未来的状态
  • 需要求解一个线性系统
  • 实现复杂
  • 每一步计算非常消耗且难以优化
  • Numerical damping and locking,理解为系统锁住了,不更新了

1.4 Backward Eular (后向欧拉)

在这里插入图片描述
(4)抄过来变成(5)
在这里插入图片描述

在计算机图形学物理模拟中,有很多方法解线性系统(线性方程组),例如:

  • Jacobi iterations, Jacobi迭代
  • Gauss-Seidel iterations
  • Conjugate gradients, 混合梯度

课程后续会介绍

整理&抽象
在这里插入图片描述

这就是一个完美的线性方程组了,本节课先介绍下Jacobi迭代。

1.5 Jacobi迭代

每次都更新一下x,使得每一次都满足矩阵的一行(即满足一个方程)。

并不是每次都会收敛。

详见第零章。

1.6 拓展:统一显隐表达

在这里插入图片描述

更快的方法。
在这里插入图片描述

二、Lagrangian fluid simulation: Smoothed particle hydrodynamics

拉格朗日流体模拟,SPH。

2.1 基础SPH公式

在这里插入图片描述
上述公式类似加权平均的过程。
在这里插入图片描述

  • 原本提出用于天体物理
  • 没有mesh,适合自由表面模拟:一盆水,水和空气接触的部分为自由表面。
  • 非常直观,容易理解,理解成一小包的水。

2.2 WCSPH

接下来介绍一种常用的实现SPH的方法,WCSPH。
在这里插入图片描述
上述公式的解释:

  1. 公式右边:压强的梯度比上密度作为内力,重力作为外力;公式左边:速度对于时间的材料导数
  2. 压强用Bulk Modulus(体积模量)描述,当前的密度比上理想密度的gama次方减1
  3. EOS指的是压强和密度的关系

M. Becker, M Teschner (2007): “Weakly compressible SPH for free surface flows”

D. Koschier et al. (2019) "Smoothed Particle Hydrodynamics Techniques for the Physics Based Simulation of Fluids and Solids

梯度的公式有些奇怪
在这里插入图片描述
注意:无法从上面的公式准确推出来,但一般都这么用。

2.3 编程

下面如何在计算机中进行模拟:3步
在这里插入图片描述

  1. 对每个粒子,计算它的密度;密度实际上是用粒子的每个质量估计出来的
  2. 对每个粒子,用刚刚梯度的公式,算下压强的梯度
  3. 然后更新速度、位置

可以想象每个粒子和周围的粒子之间有一个隐形的弹簧,这个弹簧不满足胡克定律,满足的是由SPH推出的一系列公式。

2.4 SPH的变种

在这里插入图片描述

  • PBF在实时渲染里经常使用

M. Macklin and M. Muller (2013). “Position based fluids”

M. Ihmsen et al. (2014). “SPH fluids in computer graphics”

2.5 CFL Condition

在SPH中,显示时间积分也需要一个限制,用如下公式
在这里插入图片描述

2.6 加速SPH

介绍一个简单地、最有效的。
在这里插入图片描述

2.7 其他基于粒子的模拟方法

在这里插入图片描述
助教实现的C++的SPH

在这里插入图片描述
https://github.com/TroyZhai/CPP-Fluid-Particles

2.8 后续

如何从粒子生成想要的渲染效果?
一个经典方法:marching cubes,14中情况,实现比较复杂。

OpenVDB中有很多方法。
光栅化到背景网格,转换成SDF,然后做各种其他操作。


总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值