Skip to content

Qiuany/Games103Learn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Games103Learn

Labs and notes when learning Games103. 边学边写,放一些记录。

配置环境

我在Windows下使用VSCode写代码,配置的时候参考了一些资料。

Lab 1

用rigid body dynamics + impluse做碰撞的效果:

rigid_bunny.mp4

用shape matching的效果:

rigid_bunny_shape_match.mp4

Lab1中rigid body dynamics + Impulse和shape matching两种方法都使用了restitution ($\mu_N$) 和friction ($\mu_T$) 两个系数来控制碰撞,其中shape matching需要restitution显著大于前一种方法。猜测是因为在bunny这个相对比较凸的形状上,每一次碰撞的顶点数较少,一个点对shape matching的影响比较小,需要放大或者改变最小二乘使用的权重。而rigid body dynamics + Impulse实际上已经隐式的保证了碰撞点速度正确,因此正常取个[0, 1]的restitution即可。

Lab 2

Implicit IP,弹性势能只有弹簧能量:

implicit.mp4

PBD:

PBD.mp4

这里PBD没有实现stiffness与它需要的和迭代次数有关的调整。

Lab 3

stvk能量:

FEM.mp4

ppt上Hyperelastic公式应该是错的,得自己推一下。

$$E = \frac{1}{2}(F^T F-I),\ \Psi(F) = \mu \Vert E \Vert_F^2 + \frac{\lambda}{2}\text{tr}(E)^2,\ P = F(2\mu E + \lambda \text{tr}(E) I).$$

如果做SVD分解,

$$F = U\Sigma V^T,\ \Sigma = \text{diag}\{\lambda_0, \lambda_1, \lambda_2\},\ P = U(\mu \Sigma(\Sigma^2 - I) + \frac{\lambda}{2}\text{tr}(\Sigma^2 - I)\Sigma)V^T.$$

SVD分解还是挺慢的,明显感觉到比直接使用矩阵乘法慢。显式积分弹性体的硬度不能太大,否则会炸。

Lab 4

wave.mp4

About

Labs and notes when learning Games103.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published