an image alt text

Sheldon Andrews1                                                    Kenny Erleben2
1École de technologie supérieure                              2University of Copenhagen


Efficient simulation of contact is of interest for numerous physics-based animation applications. For instance, virtual reality training, video games, rapid digital prototyping, and robotics simulation are all examples of applications that involve contact modeling and simulation. However, despite its extensive use in modern computer graphics, contact simulation remains one of the most challenging problems in physics-based animation.

This course covers fundamental topics on the nature of contact modeling and simulation for computer graphics. Specifically, we provide mathematical details about formulating contact as a complementarity problem in rigid body and soft body animations. We briefly cover several approaches for contact generation using discrete collision detection. Then, we present a range of numerical techniques for solving the associated LCPs and NCPs. The advantages and disadvantages of each technique are further discussed in a practical manner, and best practices for implementation are discussed. Finally, we conclude the course with several advanced topics, such as anisotropic friction modeling and proximal operators. Programming examples are provided on the course website to accompany the course notes.

Course Notes

Course notes


Section 1.1-1.4: Introduction to Contact Simulation (Sheldon)
Section 1.5-1.7: Coulomb Friction (Sheldon)
Section 1.10: Soft-bodies and Contact (Sheldon)
Section 2: Contact Generation (Sheldon)
Section 3.1: Pivoting Methods (Sheldon)
Section 3.2a: Splitting Methods (LCP) (Kenny)
Section 3.2b: Splitting Methods (BLCP) (Kenny)
Section 3.2: Non-smooth Newton Methods (Kenny)
Section 4.1: Pivoting Methods (Kenny)
Section 4.2: Anisotropic Friction (Kenny)


Code: Rigid body contact and friction simulator


  author = {Andrews, Sheldon and Erleben, Kenny},
  title = {Contact and Friction Simulation for Computer Graphics},
  year = {2021},
  publisher = {Association for Computing Machinery},
  address = {New York, NY, USA},
  url = {},
  doi = {10.1145/3450508.3464571},
  booktitle = {ACM SIGGRAPH 2021 Courses},
  articleno = {2},
  numpages = {124},
  location = {Virtual Event, USA},
  series = {SIGGRAPH '21}