Skip to content

About

Labs and notes when learning Games103.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

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

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages