Fundation of physically based modeling & animation

date
Apr 5, 2021
slug
fpbma
status
Published
summary
刚开始看,感觉开头的还挺简单的(有望成为我第一本看完的英文书
tags
图形学
读书笔记
目前暂停
type
Post
 

这本书讲的都是理论上的东西,没有见过相关的代码或前置知识比较难看下去,目前暂停阅读

 
notion image
这本书有中译版,我也是从中译版作者这里知道这本书的,他们在知乎都有账号,其中叶的一系列关于图形学的入门文章写的很好
 
英文版的话直接搜索书名就能找到电子版的
 
这个笔记中很可能会出现错误的地方,我可能很久之后才会发现
 
在看的途中发现了前言里面有写了阅读顺序...
另外还发现了相关代码
阅读顺序
notion image
第一章
导论部分,主要讲了本书中的各种符号的含义,以及介绍基本的概念
第二章
第二章主要是通过牛顿运动定律(主要是下面这个)来运算小球的位置,引入了微积分运算
2.3 在一维中落下一个球
在一维的情况下,小球只受到重力的作用
2.5 基本的模拟循环
notion image
最简单的积分是欧拉积分,基本思想是就是选取一个特别小的时间步长h ,假设在这个时步内积分的所有值维持不变,所以出现的误差和时步大小相关,具体的可以看一下函数图像,在求一个函数下方面积的时候如果用许多个长方形来近似,算出来的面积会少了长方形上面和函数曲线下面这个范围内的面积。
notion image
2.7 空气中的三维运动
主要是引入了三个维度
但是实际上这节还是运算两个维度,然后加上了空气阻力 ,方向和运动的方向相反,速度越快,阻力越大,下面应该是数学模型(感觉就像设定一样
notion image
上面的那个里的是常数,不是微分的意思(不明白为啥当初写的时候不换个表示方法)
结论就是一直模拟下去的话只会剩下重力方向的速度,并且当空气阻力刚好抵消重力时物体到达最大速度
风就是一个比较自由的空气阻力
notion image
 
 
 
 
第三章
3.1与平面碰撞
这里简化了碰撞模型,假设球不会旋转
在处理碰撞时,有三个重要的阶段——有没有?在哪里?然后呢?:
  • 碰撞检测:碰撞是否会出现?
  • 碰撞测定:碰撞在什么时间和位置发送?
  • 碰撞响应:碰撞产生什么效果?
 
碰撞检测
先设平面上一法线矢量 以及平面上任意一点平面外任意一点
然后就可以构造出和平面接触的情况:
代表在垂直方向上和平面上的距离
扩展到一个球,就是增加了的半径
 
碰撞测定
下面的就是假设球的速度不变的情况下,时间与移动距离成正比,所以假设有两个时间点,一个在平面上方,一个在平面下方,两个相对于平面都有不同的距离,然后通过这两个比值与时步的长度相乘,得出在一个时步内部具体碰撞发生的时间
notion image
相关的程序循环(可能看着有点麻烦,书上写的还是挺详细的
notion image
然后会出现一个问题:物体可能在一个时步内穿过多个平面,这时候就要选取最早发生的碰撞
然后还会出现一个问题,这是由于计算机限制的:由于计算机的浮点数表示,所以当 永远不会变为,陷入死循环。可行的解决办法是把条件改为是一个很小的数,这样就能忽略精度误差,但这样也会带来很多的问题,在3.3节会详细说一下。
3.2 碰撞响应
碰撞响应分为两个部分:弹性和摩擦力
这里用上标来表示碰撞前和碰撞后的状态
所以说速度在平面法向量方向的分量为
剩下的就是切线速度
弹性
定义一个恢复系数表示碰撞后的球体会以某比率的速率离开平面,因此
负号表示离开平面的方向
摩擦力
摩擦力是施加于表面上切线方向的力
定义一个摩擦系数,表示切线速率在碰撞时失去的比例
这里的假设简化了现实世界的模型,可得
所以,结合起来可以得到:
  • 把碰撞前的速度分为法线速度和切线速度
  • 计算
  • 新的速度为
 
 
 
3.3实现弹跳球
这一部分主要是讲解上面那些做法会有那些错误和缺陷,直接截图了
notion image
notion image
notion image
notion image
 
 
还有就是关于如何判定静止?
由于数值误差错误,当速度极小的时候,小球会快速抖动,而不是静止下来,这会浪费计算资源来计算这些不必要的东西,所以可以规定一个范围,当在这个范围里面就说明停止了,但是又会出现一个问题,当球在一个盒子里面,当反弹回顶部时速度恰好变为0的情况下,它就会停在顶部(这让我想起了一个游戏,但是具体叫啥我忘了...)所以说就要考虑施加于物体的合力,确保这个力指向要判断的平面就可以了
所以就有这四步
  • 速度是否足够小?
  • 距离平面是不是足够近?
  • 小球和要判断的平面是否在一起?(这个我不知道怎么说明,主要是排除小球吸附在顶部平面的情况)
  • 摩擦力能否保持静止?
notion image
 
3.4多边形的几何学
假设一任意平面,上面有三个点,则可以得到表面法线并归一化:
则平面外一点与这个平面的距离为
位于平面上的点都符合平面方程
 
3.5点与多边形的碰撞
检测一个点与多边形相交,有三个步骤:
notion image
把例子从当前位置按照速度向未来时间投射,即,带入平面方程,然后可以得到碰撞的时间:
然后就需要判断是否在多边形内部(因为两个物体表面都是由多边形组成的,并不是无限的平面)
下面这个算法对于凹多边形无效
notion image
就是利用叉乘后得到的向量方向是否一致来判断是否在多边形内部
 
 
 
第四章
4.1 什么是粒子系统
粒子系统由大量的粒子组成,粒子之间不做交互,忽略粒子之间的碰撞
当粒子的运动具有一致性时,我们会觉得这些粒子好像是某种物理现象的点采样
粒子生成器有很多不同的形态
粒子的数据结构总是包含粒子的位置和速度,此外当生成粒子的时候,通常会记录它的时间戳,以便在之后记录它的年龄还有很多参数,视具体的粒子系统来决定
4.2 随机数 随机矢量 随机点
在生成粒子的时候,会初始化其位置速度和其他参数,有时候需要加入随机性,这时候要避免使用系统的函数,因为它只会生成均匀分布的随机数
高斯分布:
性质:均值为分布中心,大部分数值分布在它附近;标准差决定了分布的分散程度,粗略地说,的数值在范围内,的值在范围内,的值在范围内
定义函数返回范围内的均匀分布随即标量
函数返回均值为,标准差为的正态分布随即标量
函数为无参数的随机矢量生成器
函数为另外两个随机矢量生成器,都返回单位矢量,偏离自方向矢量,偏离范围由决定,其中的标准差为
定义两个随机位置生成器返回圆盘上的随机位置圆盘的圆心为,表面法线为,半径为,一个是均匀分布另一个是以圆盘中心正态分布的点,半径对应离中心点三个标准差的长度
4.3
 
 
 
 
 
 
4.4
4.5
4.6

© Craig Hart 2021 - 2022