背景
这次的hw2是由我和@g1n0st同学共同完成的,由于我们学校期末考试周和hw2的ddl过于重合,实在是没办法也没有胆量感在ddl前完成所有的工作,就先提交一个半成品展示一下目前的状况,以及介绍一下我们项目 (其实是想拿个杯子)
剩下的部分会在ChinaVR的比赛截至日期前更新
介绍
我和g1n0st同学都对实时条件下的simulation非常感兴趣,所以我们选择通过小游戏的方式实现一些real-time level的deformable objects的模拟算法,并作一个对比和总结。我们已经/正在实现的相关算法有如下
- Point-based dynamics (include XPBD, G-S and Jacobi constraint projection)
- Fast mass-spring
- Projective dynamics (include chebyshev acceleration)
半成品展示
我们计划通过3个游戏来实现上述的几个算法
1. 超低配桥梁工程师(PBD实现)
整个游戏完全使用PBD来实现,目前只有两种约束,Triangle Collisions和Stretching,其中Stretching约束又可分为类似钢筋和类似吊索的约束,刚好对应了桥梁的两种非常常见的材料。但由于还没有完善交互和GUI,所以搭桥这个还是硬编码的。下面展示了非常随性搭的一些“桥”
红色的线表示吊索,蓝色的线表示钢筋。非常的野蛮,非常的谔谔,称之为小游戏都非常勉强,如果有同学感兴趣,可以搭一些更好看美观的桥。但还是可以从中体会出PBD这种方法的许多优劣
PBD优点
1.非常的robust,怎么折磨都很难炸掉
2.实现非常简单,在taichi加持下编码体验非常好
3.很快,即使用原文传统的G-S迭代,在30个iteration和较多的物体的情况下在GTX1060上也能保持60fps。
所有这些优点无不反应了PBD太适合游戏等对物理真实性要求不高但又需要效率和鲁棒性的场景
PBD缺点
1.物理真实上欠缺太多
2.对物理材质完全不可控,甚至迭代次数很大的影响了材质的软硬
例子如下
迭代次数为30:
可以观察到非常柔软
迭代次数为100:
变得很硬,且出现了一些不稳定的抖动
这个却点也是PBD被诟病最为深刻的地方,即使不要求用超弹性模型建模物理材质,也得保证材质的属性是可控的。PBD的这个缺点需要改进,变由此引出XPBD方法(未完待续)
2. 劣质坦克大战(Projective Dynamic实现)
还处在debug状态中(预计于9月5日更新)
3. 愤怒的小Taichi(Fast Mass-Spring实现)
还处在debug状态中(预计于9月5日更新)
课程感想
感谢一下胡老师,我作为一个beginer从Taichi和Games201中受益匪浅,希望以后能在学图形学的路上走得更远(不多说了,得去预习复习期末考试)