[HN Gopher] Bevy XPBD: A physics engine for the Bevy game engine ___________________________________________________________________ Bevy XPBD: A physics engine for the Bevy game engine Author : lukastyrychtr Score : 129 points Date : 2023-07-08 09:41 UTC (13 hours ago) (HTM) web link (joonaa.dev) (TXT) w3m dump (joonaa.dev) | kvark wrote: | Interesting. So bevy_rapier isn't liked as much because it | doesn't lay over Bevy ECS nicely. Does everything need to | integrate with ECS? How does it help a physics engine, | specifically? | shortrounddev2 wrote: | Very cool; it's nice to see some development in this area since | it seems very lacking compared to graphics frameworks. Afaik, the | only real options for indie engine developers is PhysX, Bullet, | or ReactPhysics3D. I'm unable to get consistent behavior in | ReactPhysics3D, and Bullet has notoriously terrible | documentation. PhysX has served me well but it would be cool to | see a more diverse ecosystem | zokier wrote: | Rapier has bevy plugin, is there a reason you don't see it as a | real option, at least as much as this bevy-xpbd? | | https://rapier.rs/docs/user_guides/bevy_plugin/getting_start... | kavaari wrote: | There is now also JoltPhysics | https://github.com/jrouwe/JoltPhysics which is used in Horizon | Forbidden West. | erichocean wrote: | Semi-off topic, but related: does anyone know of a Rust (or Bevy) | library for working with Tetrahedral meshes? | | Most of the interesting stuff being done with the XPBD solver in | SideFX Houdini uses them (e.g. for soft body simulations). | jspdown wrote: | Looks really nice and well integrated. I'm a bit surprise to not | see any mention of soft body. | | Does any one know if they've implemented the "small step" paper | as well? | phreezie wrote: | If you're interested in how XPBD works, I can highly recommend | the YouTube series of one of the authors who wrote the paper, | Matthias Muller: | https://www.youtube.com/c/TenMinutePhysics/videos | xeonmc wrote: | Reading the presentation https://matthias- | research.github.io/pages/tenMinutePhysics/0... , am I right in | thinking that the vanilla Position-Based Dynamics is literally | just how Quake does collision and then clip velocity against | geometry? And the extension is simply to add a softness | parameter that interacts in elastic-energy space? | | So basically going from reality to PBS there goes three layers | of simplification: | | First Level: assume that the discrepancy between inertial and | constrained position is caused by a constant force. Guess a | force vector, simulate a constant-force scenario in a vacuum | and fine tune your guess until the final position makes sense, | to get the accompanying velocity | | Second Level: actually, we don't really care about the velocity | progression within the timestep, so we instead just assume that | the discrepancy is caused by a velocity boost at the end of the | last frame. Guess an impulse vector, simulate a constant- | velocity scenario in a vacuum and fine tune your guess until | the final position makes sense, to get the accompanying | velocity | | Third Level: actually, we don't really even care about the | position progression within the timestep, so we instead just | snap the position to the closest point that makes sense, and | just say that your object went a bee-line from the last | position to this position and your velocity is just the | displacement over time. | pistachiopro wrote: | I'm not familiar with the implementation of Quake's physics, | but my recollection of the PBD paper was that it was | basically a "mathing up" of what was already a fairly common | way of handling physics in games. Thomas Jakobsen wrote a | very influential paper in 2001 about the character physics in | the original Hitman that popularized a lot of the same ideas | later presented in the PBD paper. | | What is really interesting to me is that later on in 2016 | Miles Macklin et al. from Nvidia released the Extended | Position Based Dynamics paper (the XPBD referenced in the | article), which bridged the gap between hacky-gamey PBD and a | principled fully physics-based derivation. The physical | derivation was explored and refined further in Primal/Dual | Descent Methods for Dynamics. | | And finally most interesting was the Small Steps in Physics | Simulation paper by the same Nvidia group that showed that a | simplified variation of XPBD that got rid of iterative | solving in order to increase the physics sim framerate is | actually a state of the art dynamics solver. As in, many | dynamics problems are currently solved most | accurately/efficiently using this overgrown hacky algorithm | game programmers came up with to make dragging around corpses | look better. | | Kind of parallels the whole graphics cards for gamers | morphing into GPUs for AI transition, just in a more niche | way. | syntheweave wrote: | The two key insights that drive the game-physics approach of | PDB(which follow decades of spaghetti-on-the-wall) | essentially come down to: choosing a source of error that can | be controlled, and not throwing away information too readily. | | You end up using position because you can then solve for | "only give me an answer with a valid position" - addressing | it through motion makes it an indirect process, and then | errors become subject to positive feedback loops. This biases | PDB towards losing energy, but that's desirable for | stability, and XPDB reduces the margin of error. | | You avoid throwing away information by being cautious about | when you "go forward" with a solution to the next timestep, | and possibly keeping multiple solution sets alive to pick | them heuristically. This is something you can do extensively | when you are aiming for simple physics with abstract | dynamics(platforming games, fighting games, etc.) - you know | what kinds of solutions will "look right" already, therefore | test all of them, make a ranking, backtrack as needed. When | realism is needed the principle still works - you can still | rank solutions by making up a metric - it's just made more | complicated by the number of answers you get with complex | dynamics. That explains why XPDB moves away from | "substepping" the physics: it's more important to "go wide" | and scan for a single, high-quality solution than to try to | linearize each aspect and hope that using smaller steps will | reduce the error for you, which was a common approach for | abstract dynamics and resulted in biasing like "x axis | movement is favored over y". The secret sauce in XPDB's | design is in getting the desired qualities in a more analytic | fashion, without so much brute force computation. | jokoon wrote: | I write C++, and I have little hope or motivation to learn rust. | I would gladly learn it in class with a good teacher, though, but | not without. Programming languages should not have a steep | learning curve. | | Disclaimer: I managed to parse a embryonic programming language | using a parser generator (lexy). | Tade0 wrote: | Rustlings gives a great introduction to the language: | | https://github.com/rust-lang/rustlings | | Disclaimer: I write JavaScript | [deleted] | mattnewport wrote: | If you have a good understanding of modern C++ then I don't | think you'll find Rust that hard to learn. I think most people | talking about a steep learning curve are probably coming from | garbage collected languages. | | I've found Rust just formalises and gives the compiler the | ability to check and enforce concepts already familiar to most | C++ programmers confidante with move semantics, the lifetime of | temporaries, etc. | | Deciphering errors from the borrow checker take some practice | still but for C++ programmers used to deciphering template | instantiation errors it's not so hard. | raincole wrote: | Maybe not for you, but I'm pretty sure most people consider the | learning curve of C++ "steep" too. | bobajeff wrote: | I'm not a big Rust guy and have no plans on really diving deep | into it for any of my projects. But I'm very impressed with | what people have accomplished with it and I love the tooling | around it. So I still think I might be using it for things. | That said, I don't currently program in C++ either and suspect | that the features they (C++ and Rust) enable don't contribute | to the success of the projects that are made with them as much | as other things having more to do good project management. | utf_8x wrote: | `TypeError - Cannot convert argument to a ByteString because the | character at index 14 has a value of 283 which is greater than | 255.` | | That's the second Netlify app I've seen crashing like this after | being linked from HN this week... Strangely enough, archive.is | was able to scrape the site just fine without an error[0] | | [0] https://archive.is/557mo | MattRix wrote: | > Note that after 0.2, development might be a lot more | inconsistent for a while because of my studies, as I will be | graduating from high school next year | | Impressive! ___________________________________________________________________ (page generated 2023-07-08 23:00 UTC)