GAMES201:高级物理引擎实战指南2020

 

课程简介:

本课程将会介绍基于物理的动画(Physically based animation)的基础和前沿知识,从拉格朗日、欧拉、混合欧拉-拉格朗日三大视角,介绍刚体、布料、烟雾、液体、弹塑性体(雪、泥沙、果冻、橡皮泥等)的模拟。通过本课程的学习,配合Taichi编程语言的使用,同学们可以独立从零开始编写最先进的高性能影视级物理求解器,并且利用自己的渲染器生成自己的特效动画。

 

课程特色:

1)注重实战,寓教于乐。提供的所有代码均可一键运行实现基础效果。课程结束后,同学们能够自己写出一个拿得出手的物理求解器。

2)注重思维模式的训练:现代物理引擎设计宏观上要考虑什么问题?如何进行设计决策的取舍?

3)介绍前沿知识,覆盖50余篇SIGGRAPH论文核心思想。充分掌握本课程的知识后,基本上就具备了复现部分近年SIGGRAPH物理模拟论文的技能,进入了计算机图形学科研的快车道。

4)难度有弹性,下接地气,上不封顶,各种基础的同学可以根据口味适量学习。

 

教师简介:

胡渊鸣是麻省理工学院三年级博士生,研究方向是高性能编程语言、计算机图形学、物理仿真和计算摄影学,在SIGGRAPH/TOG/ICLR/NIPS/CVPR/ICRA发表论文十余篇。2017年本科毕业于清华大学姚班,博士阶段受到Facebook、Adobe、Snap等公司奖学金支持。他主导设计、开发Taichi编程语言及其优化编译器。

教师主页:http://taichi.graphics/me

 

直播方式:

GAMES直播间在线直播: webinar.games-cn.org

 

建议前置课程:

高等数学、Python或任何一门程序设计语言

 

课程安排:

共10节课,每周一次。2020年6月1日开始,安排在北京时间晚上8:30-9:30。

 

课程作业:

课程共有五次简单的编码练习和三个开放项目。自愿完成。开放项目可以1-3人组队。

开放项目以同学们自由发挥为主,同学们可以自己将代码分享到 https://forum.taichi.graphics/ 论坛进行讨论,互相切磋。每次我们会选择有代表性的几个项目会在下次上课展示、点评。课程最后会进行最终点评、线上颁奖。

 

课程大纲(暂定):

【第一讲,6月1日】

导论

基于物理的动画简介

Taichi(太极)编程语言简介

Taichi的自动并行化

Taichi程序的调试技巧

Taichi中面向数据的编程(Data-oriented programming, DOP)

Taichi中面向对象的编程(Object-oriented programming, OOP)

Taichi中的元编程(Metaprogramming, MP)

课程与作业安排

(开放作业0:编写你自己的任意Taichi程序)

【第二讲,6月8日】

拉格朗日视角(1)

弹簧质点系统(Mass-spring systems):你的第一个物理模拟器

布料模拟

显式与隐式时间积分器(Explicit/implicit time integrators)

光滑粒子流体动力学(Smoothed particle hydrodynamics)与基于位置的流体(Position-based fluids)

体素化(Voxelization): 从三角网格生成粒子

快速邻居搜索(Neighborhood search)

刚体模拟简介

【第三讲,6月15日】

拉格朗日视角(2)

弱形式(weak form)与拉格朗日有限元模拟入门

基于六面体网格(hexahedron grid)的拉格朗日有限元模拟

基于四面体网格(tetrahedra mesh)的拉格朗日有限元模拟

边界条件处理

可逆(invertible)有限元法

隐式有限元求解器(Implicit FEM solvers)

拓扑优化(Topology optimization)

【第四讲,6月22日】

欧拉视角(1)

稳定流体与半拉格朗日输送(Stable fluids and Semi-Lagrangian advection)

Chorin式压力投影(Chorin-Style projection)

Staggered网格与零空间(nullspaces)

Krylov子空间求解器(Krylov-subspace solvers)

用无矩阵(Matrix-free)Krylov子空间方法求解泊松方程(Poisson equations)

预条件(Preconditioning)

几何与代数多重网格方法(multigrid methods)

【第五讲,6月29日】

欧拉视角(2)与大规模物理效果渲染

高级输送格式(Advanced advection schemes)

有符号距离场与等势面(Signed-distance fields, level sets)

用等势面方法实现自由表面(Free-surface)追踪(tracking)

自由表面与高阶边界条件处理

路径追踪(Path tracing)与球面追踪(Sphere tracing)

运动模糊(Motion blur)

行军立方体(Marching cubes)表面重建

数字微分分析器(Digital differential analyzer,DDA)

用数字微分分析器进行光线-粒子求交(DDA ray-particle intersection)

体素渲染(Voxel rendering)

体积渲染(Volumetric rendering)

(开放作业1:渲染你的模拟结果)

7月6日,空一周,实现开放作业1

7月11日,开放作业1截止,点评

【第六讲,7月13日】

混合欧拉-拉格朗日视角(1)

开放作业1点评,公布优秀代码

粒子-网格传输(Particle-grid transfers)

粒子元胞法(Particle-in-Cell, PIC)

流体隐粒子(Fluid Implicit Particles, FLIP)

仿射粒子元胞法(Affine Particle-in-Cell, APIC)

用FLIP与APIC进行流体模拟

(开放作业2开始,可以使用开放作业1的代码,自由实现一个物理引擎,并完成渲染)

【第七讲,7月20日】

混合欧拉-拉格朗日视角(2)

物质点法(Material Point Method, MPM)基础

本构模型(Constitutive models)

移动最小二乘物质点法(Moving Least Squares MPM, MLS-MPM)

物质点法中的拉格朗日力(Lagrangian forces in MPM)

MPM中的数值断裂(numeric fracture)与连续介质伤害力学(Continuum Damage Mechanics, CDM)

【第八讲,7月27日】

高性能计算与物理引擎

现代处理器微结构(processor microarchitectures)

内存层级(memory hierarchy)

单线程性能调优

并行编程与性能调优

高性能GPU编程

MPM的性能优化

【第九讲,8月3日】

物理引擎中的稀疏数据结构与可微编程

稀疏数据结构简介

传统稀疏数据结构:OpenVDB

用稀疏数据结构加速物质点法的模拟

稀疏数据结构的调优

可微编程与可微物理引擎

利用可微编程从势能计算受力

利用Checkpointing技巧节约内存

实例:优化软体机器人控制器

8月10日空一次,大家完善自己的物理引擎(开放作业2)。

8月15日开放作业2 deadline。

【第十讲,8月17日】

总结

课程回顾

引擎项目最终点评、评奖

基于物理的动画中的未解难题

 

助教征集:

助教主要工作为:

– 在论坛答疑、筛选优秀编程作业 (2-3人,每节课开始之前教师会点评部分优秀作业)

-完善作业框架 (与课程相关的Taichi开发与维护) (2-3人)

助教有相关基础,如计算机图形学、计算物理、编译器、编程语言(PL)、连续介质力学、数值分析、高性能计算、熟练使用C++17/LLVM/Python、软件工程,之一即可。如有相关科研经历更佳。有导师的同学请征得导师同意。欢迎感兴趣的同学发送简历到 yuanming@mit.edu 我们会在五月中旬之前确定人选。

鸣谢:

本课程能够使用Taichi编程语言,很大程度上得益于Taichi社区成员的大力开发。在此感谢Taichi核心开发者们:

– 匡冶 Ye Kuang (k-ye)

– 彭于斌 Yubin Peng (archibate)

– 徐明宽 Mingkuan Xu (xumingkuan)

– Kenneth Lozes (KLozes)

同时也欢迎对Taichi的开发感兴趣的同学直接加入我们:[贡献者指南](https://taichi.readthedocs.io/en/latest/contributor_guide.html)

You may also like...