Unsophisticated 3D billiards physics

Please give this little billiards demo a try and see if you can post a new high break.


If you want to use it or contribute it is hosted on github and I’m really hoping someone here might understand the physics of how a spinning ball interacts with the cushion as the model outlined in the README can still be improved.

I’ve really appreciated how easy it is to use ThreeJS and how performant it is. Thanks!


Using some of this real time observed data you can make a huge difference in your games physics appplication.

  • ball diameter: 2.25 in
  • ball mass: 6 oz
  • ball mass moment of inertia: 2/5 mR2
  • ball-ball coefficient of friction (μ): 0.03-0.08
  • ball-ball coefficient of restitution (e): 0.92-0.98
  • ball-cloth coefficient of rolling resistance (μ): 0.005 – 0.015
  • ball-cloth coefficient of sliding friction (μ): 0.15-0.4 (typical value: 0.2)
  • ball-cloth spin deceleration rate: 5-15 rad/sec2
  • ball-rail coefficient of restitution (e): 0.6-0.9
  • ball-table coefficient of restitution (e): 0.5-0.7
  • cue-tip-ball coefficient of friction (μ): 0.6
  • cue-tip-ball coefficient of restitution (e): 0.71-0.75 (leather tip), 0.81-0.87 (phenolic tip)

Data like these are observed using cameras recording up to 10000 frames per second, so as far as how much accurate this data really is? Its way too accurate, I think that there is too much friction produced by the table on the balls, also if you are using icosahedron and trimesh for the physics I would suggest you to crank up the detail of the icosahedron to get better ball collision as some of the obvious shots are not making the ball move where it is supposed to move.

Rest of your game is pretty much done, just some touchups and UI modification will make this game pretty good. If you want to increase the quality and smoothness etc. I would suggest to make this in React-Three-Fiber.

I am interested to collaborate with you in making this project more eye-catching and give it smoother visuals, if you are interested lemme know!