project thumbnail
Duration 1st: 20 weeks
Date first: February-June 2015
Tools used: Foundation Engine
Visual Studio 2010/2012
Very sleepy

Sequential Impulse Physics Solver

After my internship at Nixxes I got the opportunity to do my graduation project there while collaborating with the physics programmers at Crystal Dynamics. The goal of this project was to show the benefits of replacing their projected Gauss-Seidel solver with an Impulse Solver. I implemented the Sequential Impulse algorithm, as described by Erin Catto's GDC presentations, in my own test application. I've also integrated some of the test joints in to the Foundation Engine to compare the new algorithm in their environment.

I've also written a paper about the differences between the projected Gauss-Seidel solver and the Sequential Impulse solver, which can be found here. The documentation about the constraints can be found here.

Features of the test application (which is based on my previous work):

  • Live switching between the PGS and SI solver
  • Contact caching
  • Matrix constraint block solving
  • Restitution
  • Impulse splitting
  • Friction
    • With improved stacking friction
    • Isotropic friction cone
  • Joints
    • Contact
    • Friction
    • Hinge (Revolute)
      • Both quaternion and dot product hinges
      • Limits past 360°
    • Slider (Prismatic)
      • With limits
      • Option for extra stability when attached to s static object
    • Springs
      • Stable soft springs based on this paper
      • Regular springs
    • Universal joint
      • With wedge limits
    • Constant velocity joint
    • Configurable 6DOF joint
      • With softness
      • With limits
      • With motors
    • Experimental Catmull-Rom spline joint
  • Collision detection
    • SAT convex polyhedron collision
    • Infinite planes
    • Spheres
    • Compound objects
    • Contact manifold generation for all collision combinations
  • Unstable torque-free motion.


Demo video