Hierarchy in wiki:
Differentiable Simulation
Body\Contact | Penalty, Barrier(Soft) | Constraint(Hard) | IPC contact. |
---|---|---|---|
Rigid Body | Fast, not Robust, but Friction is difficult to diff | Robust, Accurate, but algorithm is too complex (NP Hard) | Robust, Accurate, and friction is more accurate than Penalty. |
Soft body(General) | Penetration may occur, but generally preferrable | the original implementation is difficult. | Accurate |
Fluid | No friction (Free slip-DiffFR) | Is that possible for FSI? | Need a Lagrangian view. |
PD | No friction is possible. | handle static friction only. | \ |
PBD | Fast, but mostly inaccurate. | impossible, because PBD seeks for performance | \ |
Cloth(Topology is simple) | ? | ? | \ |
What | is | the | Future? |
We care about two main aspects:
- Given forwards scheme, how to compute the derivitive efficiently and accurately?
- Collision, coupling, frictional contact, or constraint, what is the derivative? is the derivative correct?
Overall, the first question is answered, and foreach method, we have a good
Objects
“固形物”,按照维度分:
- 体积元
- Rigid-body:大多数
- FEM:diffpd
- MPM:difftaichi,
- 面积元:Diff cloth
- Mass Spring
- FEM
- MPM
- 线元
- 头发
流体:
- 体积法
- MPM
- SPH
Methods for diff
- Forward mode diff. -> use taylor series.
- Reverse mode diff with Adjoint method
- Taped diff. -> use computational sequence/graph, e.g. torch, tensorflow and taichi.
Some libraries: 1. NVIDIA/warp 2. [Taichi] 3. [DiffPD] 4. brax (Google DeepMind)
Collision Handling
Collision, or Interaction is discontinuous, if we use traditional Discrete Collision Detection and handling methods.
一方面,是不连续的,另一方面,存在摩擦(都是间断的)
- 如果用非同时求解的:一定会带来非连续的导数
- 如果是同时求解的,导数变化很大?
问题:如果是同时求解,如何求导数?
If-then-else based methods => discontinuous.
更难做的是 Frictional Contact.