[HN Gopher] Ten Minute Physics ___________________________________________________________________ Ten Minute Physics Author : picture Score : 250 points Date : 2022-12-09 18:50 UTC (4 hours ago) (HTM) web link (matthias-research.github.io) (TXT) w3m dump (matthias-research.github.io) | xchip wrote: | awesome content, very recommended! | thinkingkong wrote: | This has one of thoe timeless qualities to it. Reminds me of the | old NeHe opengl tutorials. | deely3 wrote: | "NeHe opengl tutorials" - these words of wisdom trully brings | me back in time. | 725686 wrote: | For a moment I thought it was the very well loved minutephysics | youtube channel... | sieabahlpark wrote: | _joel wrote: | How much can ten minutes of physics change when gravity is | invited? | whinvik wrote: | I am having fun recreating some of the tutorials in Python. | Getting visualizations working the same way is harder though so I | am not doing everything the same way. | explodingman wrote: | If you get anywhere, put a link to your code here. I'm | bookmarking this spot and I'd appreciate a look at some python | code when I come back to this (kinda busy right now). | pistachiopro wrote: | Ten Minute Physics is a great resource! Matthias Mueller makes | concise demos and explains them really well. (Though I think it | would take someone without existing familiarity with the subject | matter a lot longer than 10 minutes to digest the results. Lots | of rewatching!) | | A really interesting results that's come out of Matthias and | co.'s research in the last few years that is still percolating | its way through the realtime physics community is the so called | "small step" technique. Explained at a really high level: | integrating a physical system requires solving large sparse | systems of nonlinear equations. Traditionally, the equations | would be solved once a frame with iterative methods (often with a | fixed number of iterations, such as 10 or 20 per frame). It turns | out it's massively more efficient for accurate results to just | run a single iteration of the solver, but increase the physics | framerate by 10 or 20 times (or actually, since there's a tiny | bit of overhead to process a physics frame, for equivalent | computational load, you can usually only increase the framerate | 9-18 times). The intuition here is that even though 1 iteration | of the solver is much less accurate than 20, by only taking a | small step forward in time the error drift in the physical system | is even lower. It's only somewhat handwavy to say solver | iterations reduce error at a linear rate, but decreasing physics | frame time reduces error at an O(n^2) rate. | | While almost all engines have added an option to use the small | step technique, one issue slowing down adoption is that it is | _too_ accurate! The old way of solving the nonlinear equations | once a frame introduced a huge amount of numerical damping. That | greatly reduced accuracy, but did serve to stabilize simulations, | in a way. With the small step technique, numerical damping is | greatly reduced, so intentional physical models of damping need | to be added back in and tuned by hand. People aren 't used to | working this way, so designers are still toggling back to the | "large step" method. It's likely once people figure out how to | properly use this new technique, you'll see a noticeable uptick | in the fidelity of physics in games. | hnuser123456 wrote: | This is very coincidental timing. The physics simulation in the | Source game engine, and Garry's mod, absolutely cemented in me | an interest in computational physics. I really wanted to see | fully simulated fluid water in games, particularly GMod, but it | never really happened, 15 years ago. | | This never stopped bothering me, so I recently loaded up the | game and programmed an entity that was simply a particle that | repelled itself with inverse distance-squared falloff. I was | only able to get up to around 100 particles before the game | slowed from 200+ fps to ~10. There seemed to be a huge amount | of overhead in the lua scripting system's connection to the | game/physics engine. Something about getting the position of | 100 particles, or asking for all the particles within a given | range of each particle, even for only 100, was enough to send | frametimes over 100ms-1000ms. I wanted at least 500-1000 | particles at at least 10fps, and I'm sure in terms of raw math, | that is nothing for modern CPUs, even with the most naive | implementation. I had to figure out exactly which lua functions | had the most overhead for such a small amount of simple math. | | So, I re-wrote the script, seeking to chase every rabbit hole | that would let me increase the number of particles while | maintaining over 10fps. | | 1. Switch from per-particle loop, to a global loop that cached | each particle's position per frame, so it was more pure math | and less engine bindings/"context switching". Approx 50 | particles to approx 150. | | 2. Limit the particle simulation to 10hz instead of 66hz+, and | adjust the force scale to compensate. Raised the limit to | approx 300-400 particles. | | 3. A dynamic scaling system, so that the system would never try | to simulate more than 100 particles at once, per 10hz tick. | Raised the limit to approx 700 particles. | | At this point, there are now other non-CPU bottlenecks. Any | method of drawing 700 entities, even basic wireframe?, even | with a very high end GPU on a nearly 20 year old game, is | significant, and there's no easy way for me to break past this. | | I am sure if I learned how the source engine's plugin system | worked, and I hooked into the physics engine using C++ instead | of however the lua bindings work, I should be able to simulate | a thousand particles at 100+fps, but that's about where the | scope of the project starts to contend with "real life", and I | continue to wait for a 3D sandbox game with satisfying fluid | physics. | | Your optimization method of "only one iteration per frame" is | in a sense, the same, and in a sense, the opposite of my method | of simply not even simulating every particle every frame... I | just didn't have the spare performance for that. Then again, | I'm only simulating a single force field with no proper | collision detection or anything fancy | ladberg wrote: | The problem sounds like you're doing O(N^2) calculations at | every tick because each particle has to interact with every | other particle. To make it faster you should keep some | spatial datastructure so that you can query the other | particles within a certain range of your current particle and | just interact with those, ignoring the rest. | | The usual implementation is an octree or something similar. | | That said, N=100 should still be fast with the naive | algorithm so I'd definitely move off the scripting language | to something faster. | pistachiopro wrote: | Realtime fluid sim is making lots of progress, though full 3D | sims still appear to be computationally out of reach, at | least for games that aren't focused exclusively on them. Here | are some fun fluid sim examples from members of the Ten | Minute Physics discord: | | https://twitter.com/Michael_Moroz_/status/159507609967093350. | .. | | https://twitter.com/MytinoGames/status/1600278137564184579 | hnuser123456 wrote: | I might have to join the discord, that first link is | extremely satisfying, and the shading on the materials in | the 2nd one does a great of giving the feeling of the 3rd | dimension without the computational complexity. Thank you | for sharing | a_t48 wrote: | > At this point, there are now other non-CPU bottlenecks. Any | method of drawing 700 entities, even basic wireframe?, even | with a very high end GPU on a nearly 20 year old game, is | significant, and there's no easy way for me to break past | this. | | I've run into this before - it _can_ be fast if your engine | supports some form of mesh instances and exposes it to the | user. | ndsipa_pomu wrote: | There's a typo in the link on that page - "Ten Minute Phyics" | phreezie wrote: | Matthias' work was also featured in Two Minute Papers here: | https://www.youtube.com/watch?v=F0QwAhUnpr4 | waynesonfire wrote: | interesting ideas but too short. 100 minutes would be better. | jspdown wrote: | There are some great content on his YouTube channel as well.I | highly recommend to have look. He is one of the people behind PBD | and XPBD. I found that watching his videos and playing with his | demos really helpful while studying the paper. ___________________________________________________________________ (page generated 2022-12-09 23:00 UTC)