aw man, it's unfortunate how much the youtube compression seems to dislike these kinds of visuals. i bet it's absolutely gorgeous when viewed directly in-engine. still incredibly cool! i always love projects like these
Probably cause its a very fast moving color gradient, so it has trouble comoressing it accurately due to being fast moving increasing the amount of pixels it has to change, and a color gradient which has a range of colors in which they change slowly making a large range of colors to compress too. What I mean to say its inaccurate due to the nsture of the video I guess, ir maybe its just a compression algorithm that favors performance over looks
@@chocoatemilk9227 Well, the thing with real galaxies, is that at a certain point the acceleration due to gravity starts dropping off at 1/r instead of 1/r^2. This means that gravity doesn't appear to weaken (in galaxies) as much as it should, making galaxies more stable and spin faster at outer orbits. It's actually not understood why this happens, and is one of the reasons why physicists conjecture dark matter or modifications to gravity! I'd recommend reading about Modified Newtonian Dynamics (MOND), because it's super fascinating.
But still when you look from the side there can be illusion of 2D, some people still think the planets are discs not spheres so for visualization it is an amazing simulation!
@@mrgoodpeople Yes, but vision is pretty much 2D (The depth approx the brain uses does not count for an extra D in my book. Motive: 3D vision would see inside closed boxes, we cannot. If disagreement enumerate whys.)
This really helped me make sense of elliptical galaxies. The smaller ones with structure are just so cool and my brain had a hard time understanding why a white blob is way bigger.
If I may, you should instead use integral sum (I) of the weight of all particles at any given points into a Float32 buffer, then you can compute easily the total sum of any given area (x1, y1, x2, y2) which equals to I(x2, y2) - I(x1, y1). Less memory usage, and faster resolution, no "absolute borders" as described in your video. Still an approximation, but I think you would get better results and performance.
i wonder how large simulations with noticeable floating point precision would look, that'd be super cool to look into how weird it'd be, i wonder if it'd look more structured or chaotic
@@_ramar look at "far lands" in minecraft, or border box of universe in space engine. you can't really imagine this, it's too large to be noticeable in any way for 32 or 64 bit numbers but for smaller bits is like graphics in old playstation, like vertex of model is jumping from voxel to voxel, and all mesh of the model is jittering.
Replying just so I can save a reference to this comment. Been working on a small project as of late and I'm looking for any methods to increase the size of the simulation I can run.
Gotta admit, i watched most of the vid with the corner of my eye, like i usually do... Until the shot at 7:30ish just *stunned* me. Amazingly beautiful. There's just that **something** captivating in it.
Thanks so much for the timestamp, this shot is incredible! Sure, it might not be 100% realistic (which probably is impossible at the moment anyways) but it felt like galaxies forming due to gravity. Love it!
>which is probably impossible at the moment anyway Depending on how strict your definition of "impossible" is, it's either never possible in simulation, or already routinely occasionally done in high end astrophysics sims. You're welcome! :D
It looked like a spiral galaxy wanted to form at a few points but it never lasted. I don't know why spiral galaxies form in the first place, but it would be really cool to see it occur in a simulation.
Ya I think one problem to this approach is due to the grid and how I’m calculating forces, energy is lost over time. So the spirals are losing energy too quickly and dissipate.
if you want the scientific reasoning, it's that galaxies contain much more mass than the sum of the mass that's visible, allowing larger and more complex structures to form despite it not being possible with only what's visible. look up "dark matter"
I think it has to do with the fact that the orbits of stars around the galactic center isn't perfectly circular. There's some eccentricity to the orbit. So when a star is at its apoapsis, the farthest point from the center, it's moving slower. So you get clumps of stars that slow down and get closer together, and those are the arms. Something like that anyway.
@@tonywells6990 in which case spiral galaxies won't form, as dark matter forms halos rather than the visible spiral galaxies we see. which looks more like what can be seen at the end of the formation, or a massive eliptical galaxy at least. more than just gravity would be needed to simulate actual galaxy formations. in this simulation it is like the entire universe eventually devolves into one huge blob. that might happen if the universe were fixed like this simulation, but in reality the expansion of the universe would have a factor on large scales. something that i doubt could be easily simulated at home! this would allow separate clusters to form perhaps. some kind of physical interaction between particles rather than just gravity would also be needed for spiral galaxies to form in a realistic way.
This could be made more interesting with two additions. One, some particles are around ten times heavier and rarer than the other, and two, the heavier particles tend to stick together with an additional force, making them "solid". Gravity and collision forces could break "solid" objects, but they may eventually stick together again. In a cloud of particles that rotates sufficiently quickly, some of these particles of "solid" would eventually form "solid planets" as they fall towards the "star" and the "solid" accumulates, while the lighter "gas", not attracted as much by the "star" as the "solid", stays further out, eventually creating "gas planets". A further extension could be a proper implementation of the electromagnetic force. This causes particles to repel each other at a short range. This would mostly apply to "gas" particles. Though it would make it more difficult for "solid" particles to combine, "solid" particles still have this force that sticks them together (which is still the EM force in real life). Perhaps they could be combined somehow? Also, have it such that that "gas" (or any such particle), when sufficiently compressed that two particles overlap, merges the particles into a heavier one, which in turn exerts a force counteracting gravity on nearby particles. More massive particles require more force to combine. This would allow for "stellar fusion", making "stars" puff out. Additionally, it could be balanced such that once a single particle gets to sufficient mass, the gravitational influence it has on nearby particles by itself is enough to cause this "fusion", regardless of pressure, so it can collapse infinitely, creating a "black hole".
Whenever I hear about the big physics simulations done on matter I think about doing something like this myself just to explore the difficulties involved with scale. This is very neat! Thank you.
By using a gridded version of space, you will always create artifacts. Your pseudo-random jitter is an interesting approach to overcoming this inherent limitation.
Instead of summing just the mass in each grid cell, average the position as well and store it in a 3 float texture. Expanding this in the same way done in this video would give a method that should be 100% accurate and one that grows in complexity at the same rate as the one you displayed. The only draw back is that it would be a bit slower (just because it is having to do more). Very nice project!! Well done.
@@busy_beaver I thought the same thing, I agree that it may not be perfect. I remember learning in early physics that the earth's gravity can be "accurately" modeled as a point mass at the center of the earth but to the extent there are variances like mountains then the field 'fluctuates' a bit. i wonder how close of an approximation it would be at a distance. you'd certainly account for all the mass that way.
@@dhowitzerThis is true if you take the center to be the average position of all of the point masses. If you use the center of mass instead, then it's not an approximation anymore, it's just true
This is simply amazing. The simplest way to show how the complex Universe works. As explaining to the orbit problem, an orbit is the horizontal momentum needed to fall to the central gravity point passing always above the object's horizon, making a circle-like trajectory around it. If a particle weights, as example, 1, even a gravity center of 1000 is still way to less to make an stable easy orbit. If you make a larger obj, it should work better, but the orbiter will end ripping particles apart from the center. You could fix it with larger (and heavier) particles, both as center or to attach one to another and make big compact stuff. Great job anyway and please develop this further, it's incredible :D
You could use a quadtree (or octree if you want to go 3-dimensional), which may increase precision and speed though hurt implementation simplicity. Not yet sure, what clustering method would work best, especially on GPU. Another optimization would be to use a different time step for each particle and simply not update each particle at each step. I am just looking into similar O(N log N) or better N-body simulations, but not quite on this level, only star system scale simulations, where you have up to a million small bodies and a handful of large bodies.
Different time step per particle: That’s an interesting idea that I didn’t consider! I’ll keep that in mind when I come back to this. I also should probably do some performance testing to find out which steps are the bottle neck.
@@BrendanGalea it could work out great, or turn into something really strange. Probably doing the lower level of detail comparison for all grids and then only checking if a particle is likely to go to another gridarea, and then doing the individual particles in groups/ timesteps if they are likely to leave the gridarea?
@@PuzzledMonkey Did you mean "fast *multipole* method?" Just asking because I've been reading about fluid dynamics simulations and FMM has come up a number of times.
This was a wild watch. So beautiful and I can't imagine the satisfaction of being able to say you built it yourself. I love coding anything with simulations or large amounts of data and visualizing it. This was fun, thanks for sharing!
You could probably get some emergent behavior if you added an additional force, like EM interactions, give each particle a random starting charge I picked EM because I feel like it’s the most applicable to this simulation, and it also counterbalances gravity with repulsive effects, plus the grid system would work really well for summing localized charges I think
I love how the more particles you add, the more it's outer rings gets pulled faster into the center as if the center has an absolutely strong gravity despite it being only a group of particles ngl it feels so accurate
You have a good understanding of the problems you are facing here for massive particle based simulations. Getting up to speed with methods developed in the last 50 years in this area would benefit you a lot. I'd recommend a book like Hockney/Eastwood - Computer Simulations using Particles. Also you can always check GPU implemented particle simulators like HOOMD - I guess you could actually do the same simulation with that open-source software and it'd be interesting to see the differences.
I think adding a magnetism approximation and particles with differing interactability to the simulation would increase its similarity to stellar phenomenon even further, love it!
I didn’t understand a single word. Yet here I am, still having some sort of existential crisis seeing how your mathematics and thought process come to life into something I can visually grasp. Stunning video. Also super intriguing how many people in the comments seem to actually know exactly what you described in the beginning of the video, and it blows my mind to see people actually give you tips and critique you work. It just shows me how absolutely lame and boring my brain is.
What I find the most amazing about this entire simulation - other than absolutely _everything_ about it lol - is the fact that, even though this simulation is happening on a completely 2d flat plane (at least I _think_ it is??), it somehow manages to _look_ three dimensional. Kind of lends creedence to the theory that our entire Universe _also_ exists on a flat plane, doesn't it? :) Amazing work I have to say!!
Beautiful work. Very inspiring. Coming from the field of numerical relativity and finite volume hydrodynamics, I recommend using adaptive mesh refinement, i.e., the resolution of a given patch of space depends on the number of particles there.
I really enjoyed your description of the algorithms. It reminds me a little bit of K-Means clustering, which likes to be O(N^2) for approximately the same reasons, and is a problem that I've spent a fair bit of time working on at scale. Hope you get a chance to come back to these algorithms and push them even further. Your description of the work is excellent.
Nice project. I tried to simulate 2D gravity in Python, but it was inefficient and maximum was 200 particles before the frame rate dropped under 5 fps. I also tried to implement particle joining so they would create planets and stars. Good to know I wasn't the only one to have the same troubles.
Particle joining is a really cool idea! I've run into similar issues when I've done particle simulations in the past. Could never get enough particles before performance became an issue. One of the reasons I ended up learning c++ and vulkan, because it doesn't really get faster than that. But it can be a bit of a pain to program...
I don't know a thing but what if you view this as a cheap algorithm and us the traditional or an other exact method for calculating check steps every minute or so. This could help to reduce errors if you use this guide data to reduce the errors in your simulation. And also thank you for this amazing videos. The showcase in this was like a scene from interstellar:]
Glad you like it! Ya that’s pretty similar to an idea I had. You could do a more accurate simulation offline and use it to train this cheaper algorithm by optimizing the kernel weights and some other features!
Beautiful results and explanation :) The earlier suggestion to explore trees is a well-known approach called Barnes-Hut trees. Have you tried this? I have written simulations like this several times but have always been interested by the idea of simulating gravitational bodies without any particles, just as continuous mass and velocity on a grid. Haven't derived the equations yet though.
Thank you!! Some viewers provided some great articles on that topic (for example observablehq.com/@rreusser/2d-n-body-gravity-with-poissons-equation?collection=@rreusser/writeups) but I've never tried something like that myself yet. I've some past experience working with cpu-based particle fluid solvers, and originally when I started on this that was more the direction I was going to try. But then I got side tracked a bit by this idea for gravity. The no particle method you mention kind of reminds me of something like Stam - stable fluids: d2f99xq7vri1nk.cloudfront.net/legacy_app_files/pdf/ns.pdf That method probably could be extended with a multi-LOD approach to do a particle-less gravity simulation. That sounds like it would be something really interesting :)
Cool simulation. I tried to do something similar once, albeit with fewer particles, and I came across something called the Barnes-Hut algorithm for n-body simulations. This seems similar to your LoD approach but might be more robust, although I don't know if you could still make effective use of the GPU. Anyway, something to look into if you ever return to this project. Cheers!
its fantastic that with this hypothesis one can explain the fundamental forces the universe without any quantum crap nor using descriptive mathphysmagics , even to a 5 year old
Wow. this is a tremendous effort. I can see why astrophysicists really want dark matter and dark energy to be a thing. That rotating model coalesces way to easily into a rather homogeneous disc doesn't it?
Haha ya I can start to see why astrophysics is so difficult! It would be interesting to see how the simulation would change if more interaction types are added such as dark matter!
Not only that, but a previous theory that "the black hole at the center is what causes the rotation of a galaxy and the patterns of said galaxy" just doesn't work - not only because the actual mass of a black hole, even a supermassive one, actually only makes up a tiny fraction of the total mass of a galaxy - so there's not enough mass or gravitational force at the center to have _that_ much influence over the direction or speed of a galaxy, nor how a galaxy looks, but _also_ because it was discovered in many galaxies - including our own - the black hole at the center is actually rotating _in the opposite direction_ to the rest of the galaxy! _AND_ it can also be rotating along a different axial tilt to the rest of the galaxy! So something else is causing galaxies to rotate, and cause the patterns we see within galaxies as well as the changes to those patterns over time (like the arms of our own, or the more uniform disk shape of older galaxies). And that's not even including smaller halo galaxies that orbit their larger cousins. So they came up with a halo of dark matter surrounding every galaxy that keeps it rotating in a certain direction, keeps the mass within contained instead of having the outer mass launch away from the galaxy into the cosmic voids between, and influences the halo galaxies behaviour and the appearance of galaxies in general.
Although, _your_ simulation _seems_ to suggest the combined gravitational forces created by the combined mass being simulated actually _is_ enough to replicate the behaviours we see of real galaxies. It would be quite interesting to see what would happen if you could somehow also add a simulation of a black hole in the center of the largest mass - but rotating in the opposite direction to the rest of the mass in the simulation.
@@DavidStruveDesigns Any of those centralised areas where you can see the bulk of masses accumulating in points can be considered analogous to a black hole already. As in the gravitational effect is the same however without a horizon or accretion effects. That said though it would still be cool to see, especially things like relativistic jets that would wobble as the black hole builds in mass
Ya I think that would work well with the split simulation approach I mention at the end. Use a kd tree for efficient particle to particle interactions, and then for the million small particles avoid neighbourhood lookup completely by using this "splattering" technique.
7:17, The most beautiful simulation i have ever seen on how single dust particles inevetebly clumps to larger bodys. (Even if the early forces aint depending on gravity the outcome is the same). I loved it!
ya, it really does unfortunately :( The code is a bit of a mess right now, so I don't really want to share it yet. I'm going to be cleaning it up and putting it in the tutorial series over the course of the next couple months. The raw/messy code I'm thinking of sharing as a possible patreon bonus if I end up making one of those.
This is a really cool method! I like your idea about combining it with direct simulation. It'd make rendering beautiful space scenes with clouds of small particles very cool. Watching these scenes you rendered I'm already imagining them in the background of a 2D game, and how incredible that would be (especially with slightly different seeds every time). This is my favorite video I've watched this week. 👍
technically I should be, theres a couple steps that would benefit from using compute shaders, but I've done everything here just using rasterization pipelines even though some stages are unnecessary and just add overhead. The tutorial series will cover all the techniques required for this eventually, but trying to do a full tutorial on everything here at this point would be like 4 hours long
calculating the center of mass for each grid cell and taking that into account should improve things. But if I do it for the whole system that would be the equivalent of just using a 1x1 grid
This is amazing. It reminds me of a program from a small developer that I really enjoy. I don't know anything about coding but you might find some inspiration from his work. World really be cool you could get stable orbits going and have objects collide and become larger objects. Here is the other developer: ua-cam.com/video/2ksVjpxY5mI/v-deo.html
I've always wondered how sped up space timelapses show planets behave like insects, particles and dirt in a disturbed swamp water (like 16-years timelapse of Sagittarius A). This is incredibly close to that. Wow.
Very nice work. The simulations are very beautiful and even with the approximations you're using you can see things that look like galaxies and how galaxy clusters and mergers form and occur.
Here’s a suggestion from physics. Because of the similarity between the form of electromagnetism and gravity, you can pretty much directly turn this into a PDE with velocity fields and then just numerically integrate to get particle behavior. You can do this by acknowledging: del2(φ)= kρ g=-del(φ) dρ/dt=-div(v) Where φ is gravitational potential, ρ is mass density, v is the velocity, and g is the gravitational field strength. You can brute force calculate the initial conditions of the potential from the particles pretty easily which is the most computationally expensive part. Additionally, you can just outright solve the poisson equation given some boundary conditions to start the simulation. From there, it’s possible to approximately evaluate each step by adjusting the potential in accordance with the mass density and computing how the velocity field changes. There are a number of algorithms one can use to quickly approximate solutions to Poisson’s equation. This is also essentially a near identical outline for direct simulation of fluid flow as well, the main difference is the sign of the Laplacian. Finally, one thing you might consider is adding a repulsion effect at high densities to avoid the PDE from diverging to infinity as a result of the fact that higher density=higher attraction and the PDE has no way to avoid that
Making simulations is super fun. This is a bit of simpler version of a classic Barnes-Hut method. It is based on an octree (or in 2D quad tree). For GPU it might make sense to have a dense representation, but classically the representation is way more sparse, and the regions that do not have any particles are not even computed. It makes it then trully adaptive and O(n log n). The method also contains exact method of combining different tree levels. Fixed grid methods do not work too well with very non uniform distribution of particles. Bernes-Hut and FMM (below) deal with it better. If you want to go even further, and want to simulate billions of particles, the Fast Multipole Method is a method of choice. It is very complicated (I implemented it once around 2004, and even then I bearly understood how the approximation cutoffs work). But well implemented, it is O(n) - linear in number of particles. Magic. Not only it scales really well, it has very rigour error bounds, so one can keep track of max error and do adaptive integration. Both methods can be parallelized.
UA-cam compression did NOT like that lmao. Great video tho! While not based entirely on Newton's laws, it's really cool to see that you can get gravity-like visuals using WAY cheaper methods by thinking outside the box like this.
Really stunning result, amazing work! I've superficially experimented with similar things in the past and thought about using grids to approximate gravitational effects and get around the O(n²) problem - but never actually fully implemented it. But you did a damn fine job and the results are pretty amazing. :)
It looks awesome. The only thing missing is to make the “time” also a gradient per cell. Because time slows down when more mass per cell and time speeds up when less mass density cell. Then u’ve fixed the mystery of what people call dark matter and the expansion of the universe.
It's like the Dance of the galaxys. many of the patterns remind me of our Glaxy and all the ones around us. And also the seemingly natural evolving circular movements of all the points, and like even the galaxys moving around the bigger ones in distance. even though everything startet in a kinda simple clash right into the centre, (big bang?) after that a picture of dots (star Systems) is evolving that reminds me of all what i wrote.
It's amazing how all galaxies would collapse without expansion, we really do live on the edge of a knife of possibility, precisely where life can exist. This is probably why the multiverse ideas came about.
Ya at the very least I should keep track of the systems energy and momentum so I can see how much it’s wrong. For performance the ideal solution would not need to provide this corrective step which would be computationally expensive, but still be a forward Euler simulation but in such a way that accumulated errors in the systems energy and momentum locally tend to cancel out when observed on the global scale
aw man, it's unfortunate how much the youtube compression seems to dislike these kinds of visuals. i bet it's absolutely gorgeous when viewed directly in-engine. still incredibly cool! i always love projects like these
it seems there might have been some issue in the export format (it looks interlaced). usually the HD transcode looks pretty good.
Probably cause its a very fast moving color gradient, so it has trouble comoressing it accurately due to being fast moving increasing the amount of pixels it has to change, and a color gradient which has a range of colors in which they change slowly making a large range of colors to compress too.
What I mean to say its inaccurate due to the nsture of the video I guess, ir maybe its just a compression algorithm that favors performance over looks
upload 4k60fps yt compression should not be the issue than.
@@rocheuroOr in easier to understand terms: "If you upload a video in 4k then the compression won't be as bad".
It's fascinating how they form the exact same shapes as our galaxies... it's the stuff you would normally do in a super computer. Beautiful work!
I wouldn't say exact shape of actual galaxies, but it's fascinating to see the simulation nonetheless
@@nullifier_ from a gravitational standpoint i would say it really behaves as a galaxy like at 11:15
I could agree more
@@chocoatemilk9227 Well, the thing with real galaxies, is that at a certain point the acceleration due to gravity starts dropping off at 1/r instead of 1/r^2. This means that gravity doesn't appear to weaken (in galaxies) as much as it should, making galaxies more stable and spin faster at outer orbits. It's actually not understood why this happens, and is one of the reasons why physicists conjecture dark matter or modifications to gravity! I'd recommend reading about Modified Newtonian Dynamics (MOND), because it's super fascinating.
I agree
feels so natural, i felt like a timeless being, wathcing universe in fastforward.. good job optimising it, its a hard work
It's 2D. 2D it's not natural =). Don't exist super flat object in the Universe. Galaxy thickness is 5-10% of its diameter.
But still when you look from the side there can be illusion of 2D, some people still think the planets are discs not spheres so for visualization it is an amazing simulation!
@@mrgoodpeople Yes, but vision is pretty much 2D (The depth approx the brain uses does not count for an extra D in my book. Motive: 3D vision would see inside closed boxes, we cannot. If disagreement enumerate whys.)
@@mrgoodpeople a timeless being would have organic body, that means their vision would be diffrent than anything we can imagine
This really helped me make sense of elliptical galaxies. The smaller ones with structure are just so cool and my brain had a hard time understanding why a white blob is way bigger.
I love the way they merge into bigger objects in a way
Yep thats how… our world works
@@memor22 yeah and it's pretty cool how this emulates that
This looks absolutely amazing, Brendan!
Thank you!
I must admit that this did even more inspire me to learn Vulkan and related things.
If I may, you should instead use integral sum (I) of the weight of all particles at any given points into a Float32 buffer, then you can compute easily the total sum of any given area (x1, y1, x2, y2) which equals to I(x2, y2) - I(x1, y1).
Less memory usage, and faster resolution, no "absolute borders" as described in your video. Still an approximation, but I think you would get better results and performance.
Great tip thanks!! I’ll give that a shot when I come back to this project
i wonder how large simulations with noticeable floating point precision would look, that'd be super cool to look into how weird it'd be, i wonder if it'd look more structured or chaotic
@@_ramar look at "far lands" in minecraft, or border box of universe in space engine.
you can't really imagine this, it's too large to be noticeable in any way for 32 or 64 bit numbers
but for smaller bits is like graphics in old playstation, like vertex of model is jumping from voxel to voxel, and all mesh of the model is jittering.
Replying just so I can save a reference to this comment. Been working on a small project as of late and I'm looking for any methods to increase the size of the simulation I can run.
so she lied, when she said "size doesn't matter"? :(
I am almost feeling the gravitational waves from those massive clumps hitting each other! So cool!
Janice, please cancel my 3:00 with the President of the United States... brendan galea just uploaded
Gotta admit, i watched most of the vid with the corner of my eye, like i usually do... Until the shot at 7:30ish just *stunned* me. Amazingly beautiful. There's just that **something** captivating in it.
Thanks so much for the timestamp, this shot is incredible! Sure, it might not be 100% realistic (which probably is impossible at the moment anyways) but it felt like galaxies forming due to gravity. Love it!
>which is probably impossible at the moment anyway
Depending on how strict your definition of "impossible" is, it's either never possible in simulation, or already routinely occasionally done in high end astrophysics sims.
You're welcome! :D
It looked like a spiral galaxy wanted to form at a few points but it never lasted. I don't know why spiral galaxies form in the first place, but it would be really cool to see it occur in a simulation.
Ya I think one problem to this approach is due to the grid and how I’m calculating forces, energy is lost over time. So the spirals are losing energy too quickly and dissipate.
if you want the scientific reasoning, it's that galaxies contain much more mass than the sum of the mass that's visible, allowing larger and more complex structures to form despite it not being possible with only what's visible. look up "dark matter"
I think it has to do with the fact that the orbits of stars around the galactic center isn't perfectly circular. There's some eccentricity to the orbit. So when a star is at its apoapsis, the farthest point from the center, it's moving slower. So you get clumps of stars that slow down and get closer together, and those are the arms. Something like that anyway.
@@almicc You can say that the particles in this simulation naturally act like dark matter already since they only interact through gravitation.
@@tonywells6990 in which case spiral galaxies won't form, as dark matter forms halos rather than the visible spiral galaxies we see. which looks more like what can be seen at the end of the formation, or a massive eliptical galaxy at least.
more than just gravity would be needed to simulate actual galaxy formations. in this simulation it is like the entire universe eventually devolves into one huge blob. that might happen if the universe were fixed like this simulation, but in reality the expansion of the universe would have a factor on large scales. something that i doubt could be easily simulated at home! this would allow separate clusters to form perhaps.
some kind of physical interaction between particles rather than just gravity would also be needed for spiral galaxies to form in a realistic way.
This could be made more interesting with two additions. One, some particles are around ten times heavier and rarer than the other, and two, the heavier particles tend to stick together with an additional force, making them "solid". Gravity and collision forces could break "solid" objects, but they may eventually stick together again. In a cloud of particles that rotates sufficiently quickly, some of these particles of "solid" would eventually form "solid planets" as they fall towards the "star" and the "solid" accumulates, while the lighter "gas", not attracted as much by the "star" as the "solid", stays further out, eventually creating "gas planets".
A further extension could be a proper implementation of the electromagnetic force. This causes particles to repel each other at a short range. This would mostly apply to "gas" particles. Though it would make it more difficult for "solid" particles to combine, "solid" particles still have this force that sticks them together (which is still the EM force in real life). Perhaps they could be combined somehow? Also, have it such that that "gas" (or any such particle), when sufficiently compressed that two particles overlap, merges the particles into a heavier one, which in turn exerts a force counteracting gravity on nearby particles. More massive particles require more force to combine. This would allow for "stellar fusion", making "stars" puff out. Additionally, it could be balanced such that once a single particle gets to sufficient mass, the gravitational influence it has on nearby particles by itself is enough to cause this "fusion", regardless of pressure, so it can collapse infinitely, creating a "black hole".
Even a super basic simulation like this you can see the laws of the universe working as expected.
I don't know when and how I found this channel, but what I know for sure is that I really like it
It’s beautiful to watch and it makes me feel very timeless like a timeless being witnessing something we are all supposed to see.
Best video explaining how spiral galaxies form, and its not even about that. Amazing work!
Whenever I hear about the big physics simulations done on matter I think about doing something like this myself just to explore the difficulties involved with scale. This is very neat! Thank you.
Please make a couple hour long relaxing video with this. I totally can myself going to sleep with it. So mesmerizing.
The 3 billion body problem.
Man, youtube compression algorithms really don’t do justice for this beautiful images.
This was mathematically interesting, visually stunning, and one heck of a side project. Well done!
Every few months I make sure to come here to rewatch this video
By using a gridded version of space, you will always create artifacts. Your pseudo-random jitter is an interesting approach to overcoming this inherent limitation.
ah youtube compression had a fun time with this one
Instead of summing just the mass in each grid cell, average the position as well and store it in a 3 float texture. Expanding this in the same way done in this video would give a method that should be 100% accurate and one that grows in complexity at the same rate as the one you displayed. The only draw back is that it would be a bit slower (just because it is having to do more). Very nice project!! Well done.
Great suggestion, definitely going to attempt this for version 2!!
This is a good improvement that I also thought of. But it won't be 100% accurate.
@@busy_beaver I thought the same thing, I agree that it may not be perfect. I remember learning in early physics that the earth's gravity can be "accurately" modeled as a point mass at the center of the earth but to the extent there are variances like mountains then the field 'fluctuates' a bit. i wonder how close of an approximation it would be at a distance. you'd certainly account for all the mass that way.
@busy_beaver it's a digital system. That must be the case. It can only be accurate to an arbitrarily fine precision
@@dhowitzerThis is true if you take the center to be the average position of all of the point masses. If you use the center of mass instead, then it's not an approximation anymore, it's just true
This is simply amazing. The simplest way to show how the complex Universe works.
As explaining to the orbit problem, an orbit is the horizontal momentum needed to fall to the central gravity point passing always above the object's horizon, making a circle-like trajectory around it. If a particle weights, as example, 1, even a gravity center of 1000 is still way to less to make an stable easy orbit. If you make a larger obj, it should work better, but the orbiter will end ripping particles apart from the center. You could fix it with larger (and heavier) particles, both as center or to attach one to another and make big compact stuff. Great job anyway and please develop this further, it's incredible :D
You could use a quadtree (or octree if you want to go 3-dimensional), which may increase precision and speed though hurt implementation simplicity. Not yet sure, what clustering method would work best, especially on GPU. Another optimization would be to use a different time step for each particle and simply not update each particle at each step. I am just looking into similar O(N log N) or better N-body simulations, but not quite on this level, only star system scale simulations, where you have up to a million small bodies and a handful of large bodies.
Different time step per particle: That’s an interesting idea that I didn’t consider! I’ll keep that in mind when I come back to this. I also should probably do some performance testing to find out which steps are the bottle neck.
@@BrendanGalea it could work out great, or turn into something really strange.
Probably doing the lower level of detail comparison for all grids and then only checking if a particle is likely to go to another gridarea, and then doing the individual particles in groups/ timesteps if they are likely to leave the gridarea?
A quadtree or Oct tree is a key component of the fast multiple method.
Edit: fast multiPOLE method
@@PuzzledMonkey Did you mean "fast *multipole* method?" Just asking because I've been reading about fluid dynamics simulations and FMM has come up a number of times.
@@fishercawkey yes, my autocorrect isn't numerical analysis literate.
This was a wild watch. So beautiful and I can't imagine the satisfaction of being able to say you built it yourself. I love coding anything with simulations or large amounts of data and visualizing it. This was fun, thanks for sharing!
technically jaw dropping !
There were many times watching this where I forgot it was 2d and thought I was watching 3d objects spin and rotate and warp. Incredible work
Absolutely fantastic. Bravo.
I started work on a space exploration game and this is almost exactly what I have been looking for, thanks for making this
Oh cool! Best of luck. Will it be 2D or 3D?
this was an amazing video! you just inspired my to work on a new project and test expiriment with something similair.
This caused an optical illusion, as soon as i turned the fullscreen off, my screen was deforming in a spiral shape
Amazing job!!
You could probably get some emergent behavior if you added an additional force, like EM interactions, give each particle a random starting charge
I picked EM because I feel like it’s the most applicable to this simulation, and it also counterbalances gravity with repulsive effects, plus the grid system would work really well for summing localized charges I think
What does EM stand for?
@@krccmsitp2884 electromagnetism
So particles would attract repel based on their charges
I love how the more particles you add, the more it's outer rings gets pulled faster into the center
as if the center has an absolutely strong gravity despite it being only a group of particles
ngl it feels so accurate
You have a good understanding of the problems you are facing here for massive particle based simulations. Getting up to speed with methods developed in the last 50 years in this area would benefit you a lot. I'd recommend a book like Hockney/Eastwood - Computer Simulations using Particles. Also you can always check GPU implemented particle simulators like HOOMD - I guess you could actually do the same simulation with that open-source software and it'd be interesting to see the differences.
Looks like a good read, thanks for the suggestion! Kind of expensive book though 😅 but am considering getting it
@@BrendanGalea trust the guy
@@BrendanGalea Hello, I’d like to ask what software you used to simulate this and to program it. And what is Vulkan for exactly? Thanks in advance
I think adding a magnetism approximation and particles with differing interactability to the simulation would increase its similarity to stellar phenomenon even further, love it!
OMG this is just stunning!!!!!!!
I didn’t understand a single word. Yet here I am, still having some sort of existential crisis seeing how your mathematics and thought process come to life into something I can visually grasp. Stunning video.
Also super intriguing how many people in the comments seem to actually know exactly what you described in the beginning of the video, and it blows my mind to see people actually give you tips and critique you work. It just shows me how absolutely lame and boring my brain is.
What I find the most amazing about this entire simulation - other than absolutely _everything_ about it lol - is the fact that, even though this simulation is happening on a completely 2d flat plane (at least I _think_ it is??), it somehow manages to _look_ three dimensional. Kind of lends creedence to the theory that our entire Universe _also_ exists on a flat plane, doesn't it? :) Amazing work I have to say!!
Thanks! Ya I was surprised how nice the 2D version ended up looking. I still want to give a 3D version a shot though!
Maybe we are just one big petri dish, or, a not so big petri dish for the aliens who are messing with their particles for science lol
"So that's why there's black holes in the middle of galaxies" was my thought when seeing that accumulation in the middle of every simulation.
Beautiful work. Very inspiring. Coming from the field of numerical relativity and finite volume hydrodynamics, I recommend using adaptive mesh refinement, i.e., the resolution of a given patch of space depends on the number of particles there.
Thanks for the tip! I'll definitely need to look into that
I really enjoyed your description of the algorithms. It reminds me a little bit of K-Means clustering, which likes to be O(N^2) for approximately the same reasons, and is a problem that I've spent a fair bit of time working on at scale. Hope you get a chance to come back to these algorithms and push them even further. Your description of the work is excellent.
Great work! Beautiful and inspiring! Congrats!
Thank you! Cheers!
Quadtree + Flowfield = bliss
NASA, are you watching this??
you know the sims gonna be good when the author has a lisp. Chefs kiss to those algs and Comp concepts.
Nice project. I tried to simulate 2D gravity in Python, but it was inefficient and maximum was 200 particles before the frame rate dropped under 5 fps.
I also tried to implement particle joining so they would create planets and stars.
Good to know I wasn't the only one to have the same troubles.
Particle joining is a really cool idea!
I've run into similar issues when I've done particle simulations in the past. Could never get enough particles before performance became an issue. One of the reasons I ended up learning c++ and vulkan, because it doesn't really get faster than that. But it can be a bit of a pain to program...
Very impressive work! Excellent idea of using multiple LODs to account for local and global effects. Thanks for sharing. ❤
It looks like a physics simulation of galaxy filament formation they run on supercomputers.
Thank you!!
I don't know a thing but what if you view this as a cheap algorithm and us the traditional or an other exact method for calculating check steps every minute or so. This could help to reduce errors if you use this guide data to reduce the errors in your simulation. And also thank you for this amazing videos. The showcase in this was like a scene from interstellar:]
Glad you like it! Ya that’s pretty similar to an idea I had. You could do a more accurate simulation offline and use it to train this cheaper algorithm by optimizing the kernel weights and some other features!
Not only does it form galaxy shapes, but the inward collapse in the beginning looks like a big bang
Beautiful results and explanation :) The earlier suggestion to explore trees is a well-known approach called Barnes-Hut trees. Have you tried this?
I have written simulations like this several times but have always been interested by the idea of simulating gravitational bodies without any particles, just as continuous mass and velocity on a grid. Haven't derived the equations yet though.
Thank you!!
Some viewers provided some great articles on that topic (for example observablehq.com/@rreusser/2d-n-body-gravity-with-poissons-equation?collection=@rreusser/writeups)
but I've never tried something like that myself yet. I've some past experience working with cpu-based particle fluid solvers, and originally when I started on this that was more the direction I was going to try. But then I got side tracked a bit by this idea for gravity.
The no particle method you mention kind of reminds me of something like Stam - stable fluids: d2f99xq7vri1nk.cloudfront.net/legacy_app_files/pdf/ns.pdf
That method probably could be extended with a multi-LOD approach to do a particle-less gravity simulation. That sounds like it would be something really interesting :)
I think though that the dampening will prevent chaotic behaviour and particles escaping at high speed, so aesthetically a positive
Cool simulation. I tried to do something similar once, albeit with fewer particles, and I came across something called the Barnes-Hut algorithm for n-body simulations. This seems similar to your LoD approach but might be more robust, although I don't know if you could still make effective use of the GPU. Anyway, something to look into if you ever return to this project. Cheers!
its fantastic that with this hypothesis one can explain the fundamental forces the universe without any quantum crap nor using descriptive mathphysmagics , even to a 5 year old
that "expanding" particles demo was awesome. great work! also can i ask how much time you have on programming?
Thanks, and about 15 years now!
Hmm
thanks for the info!
Might get to this level in 10 years alot less than i thought.
Despite knowing it's 2D, the different sized blobs moving at different speeds make it look 3D. Very nice!
Wow. this is a tremendous effort. I can see why astrophysicists really want dark matter and dark energy to be a thing. That rotating model coalesces way to easily into a rather homogeneous disc doesn't it?
Haha ya I can start to see why astrophysics is so difficult! It would be interesting to see how the simulation would change if more interaction types are added such as dark matter!
Not only that, but a previous theory that "the black hole at the center is what causes the rotation of a galaxy and the patterns of said galaxy" just doesn't work - not only because the actual mass of a black hole, even a supermassive one, actually only makes up a tiny fraction of the total mass of a galaxy - so there's not enough mass or gravitational force at the center to have _that_ much influence over the direction or speed of a galaxy, nor how a galaxy looks, but _also_ because it was discovered in many galaxies - including our own - the black hole at the center is actually rotating _in the opposite direction_ to the rest of the galaxy! _AND_ it can also be rotating along a different axial tilt to the rest of the galaxy! So something else is causing galaxies to rotate, and cause the patterns we see within galaxies as well as the changes to those patterns over time (like the arms of our own, or the more uniform disk shape of older galaxies). And that's not even including smaller halo galaxies that orbit their larger cousins. So they came up with a halo of dark matter surrounding every galaxy that keeps it rotating in a certain direction, keeps the mass within contained instead of having the outer mass launch away from the galaxy into the cosmic voids between, and influences the halo galaxies behaviour and the appearance of galaxies in general.
Although, _your_ simulation _seems_ to suggest the combined gravitational forces created by the combined mass being simulated actually _is_ enough to replicate the behaviours we see of real galaxies. It would be quite interesting to see what would happen if you could somehow also add a simulation of a black hole in the center of the largest mass - but rotating in the opposite direction to the rest of the mass in the simulation.
@@DavidStruveDesigns Any of those centralised areas where you can see the bulk of masses accumulating in points can be considered analogous to a black hole already. As in the gravitational effect is the same however without a horizon or accretion effects.
That said though it would still be cool to see, especially things like relativistic jets that would wobble as the black hole builds in mass
I came to post a comment only to see that I have already commented what I wanted to say. ☺️
Now that's what programming should be all about. Real problem solving. I used to do that, but for now let me get back to my ERP 😉
What about using kd trees or other tree structures to more efficiently process particle to particle interaction?
Ya I think that would work well with the split simulation approach I mention at the end. Use a kd tree for efficient particle to particle interactions, and then for the million small particles avoid neighbourhood lookup completely by using this "splattering" technique.
7:17, The most beautiful simulation i have ever seen on how single dust particles inevetebly clumps to larger bodys. (Even if the early forces aint depending on gravity the outcome is the same). I loved it!
youtube decompressi kills it. Would you consider uploding the code or executable for us to look a this and hiow you did it?
Source code would be amazing 😍
ya, it really does unfortunately :(
The code is a bit of a mess right now, so I don't really want to share it yet. I'm going to be cleaning it up and putting it in the tutorial series over the course of the next couple months.
The raw/messy code I'm thinking of sharing as a possible patreon bonus if I end up making one of those.
@@BrendanGalea I have never subscribed to a Patreon before, but if you made one, it would be the first.
This is a really cool method! I like your idea about combining it with direct simulation. It'd make rendering beautiful space scenes with clouds of small particles very cool. Watching these scenes you rendered I'm already imagining them in the background of a 2D game, and how incredible that would be (especially with slightly different seeds every time).
This is my favorite video I've watched this week. 👍
Wow thank you!!
The cool thing too is that I should be able to make it interactive as well!!
Hi. Can you do a tutorial on this? Are you using compute shaders for the simulation computation?
technically I should be, theres a couple steps that would benefit from using compute shaders, but I've done everything here just using rasterization pipelines even though some stages are unnecessary and just add overhead. The tutorial series will cover all the techniques required for this eventually, but trying to do a full tutorial on everything here at this point would be like 4 hours long
the way in which the particles first contract and then explode outwards during the simulation reminds me of the big bang
Bro just calculate the overall system's center of mass (which should stay at the same point if I'm correct) and apply force to your particles.
calculating the center of mass for each grid cell and taking that into account should improve things. But if I do it for the whole system that would be the equivalent of just using a 1x1 grid
i'm blown by how smart is your optimization solution,, i thought,, this guy is gonna blow a pc in this video
6:04 he said it
😂
only thing more mystical than this video is the gymnastics my computer would have to go through to run this
It’s running on a computer I built like 10 years ago so yours just might be fine 😅
nah bruv, you just built different@@BrendanGalea
Now do it in 3D
No…4D 😳
I love being able to recognize and understand code and not seeing it as an absolute other language, ty school
This is amazing. It reminds me of a program from a small developer that I really enjoy. I don't know anything about coding but you might find some inspiration from his work. World really be cool you could get stable orbits going and have objects collide and become larger objects. Here is the other developer: ua-cam.com/video/2ksVjpxY5mI/v-deo.html
Woah that’s pretty cool, thanks for sharing!
I knee I recognized Scott Buckley's music - this was a really cool visualizer, will be cool to see more!
I've always wondered how sped up space timelapses show planets behave like insects, particles and dirt in a disturbed swamp water (like 16-years timelapse of Sagittarius A). This is incredibly close to that. Wow.
Very nice work. The simulations are very beautiful and even with the approximations you're using you can see things that look like galaxies and how galaxy clusters and mergers form and occur.
Good job youtube compression. You even took this one simple thing away from us.
Really drives home how important gravity is.
i can beat gravity
Here’s a suggestion from physics. Because of the similarity between the form of electromagnetism and gravity, you can pretty much directly turn this into a PDE with velocity fields and then just numerically integrate to get particle behavior. You can do this by acknowledging:
del2(φ)= kρ
g=-del(φ)
dρ/dt=-div(v)
Where φ is gravitational potential, ρ is mass density, v is the velocity, and g is the gravitational field strength.
You can brute force calculate the initial conditions of the potential from the particles pretty easily which is the most computationally expensive part. Additionally, you can just outright solve the poisson equation given some boundary conditions to start the simulation. From there, it’s possible to approximately evaluate each step by adjusting the potential in accordance with the mass density and computing how the velocity field changes. There are a number of algorithms one can use to quickly approximate solutions to Poisson’s equation. This is also essentially a near identical outline for direct simulation of fluid flow as well, the main difference is the sign of the Laplacian.
Finally, one thing you might consider is adding a repulsion effect at high densities to avoid the PDE from diverging to infinity as a result of the fact that higher density=higher attraction and the PDE has no way to avoid that
Making simulations is super fun.
This is a bit of simpler version of a classic Barnes-Hut method. It is based on an octree (or in 2D quad tree). For GPU it might make sense to have a dense representation, but classically the representation is way more sparse, and the regions that do not have any particles are not even computed. It makes it then trully adaptive and O(n log n). The method also contains exact method of combining different tree levels. Fixed grid methods do not work too well with very non uniform distribution of particles. Bernes-Hut and FMM (below) deal with it better.
If you want to go even further, and want to simulate billions of particles, the Fast Multipole Method is a method of choice. It is very complicated (I implemented it once around 2004, and even then I bearly understood how the approximation cutoffs work). But well implemented, it is O(n) - linear in number of particles. Magic. Not only it scales really well, it has very rigour error bounds, so one can keep track of max error and do adaptive integration.
Both methods can be parallelized.
UA-cam compression did NOT like that lmao. Great video tho! While not based entirely on Newton's laws, it's really cool to see that you can get gravity-like visuals using WAY cheaper methods by thinking outside the box like this.
Using the blur and gradient is genius and the result is beautiful!
this simulation at times triggered some deeeeeep astroagoraphobia, congrats on the a simulation powerful enough to trigger a fear of space lmao
Incredible how models looking maybe something like but not actually the thing but maybe.
Really stunning result, amazing work! I've superficially experimented with similar things in the past and thought about using grids to approximate gravitational effects and get around the O(n²) problem - but never actually fully implemented it. But you did a damn fine job and the results are pretty amazing. :)
Looks like 3 dimensions. Super cool! Well done I have nothing but respect
It looks awesome. The only thing missing is to make the “time” also a gradient per cell. Because time slows down when more mass per cell and time speeds up when less mass density cell. Then u’ve fixed the mystery of what people call dark matter and the expansion of the universe.
I'm starting to get into these topics and particle simulations. Thank you
I have no words... this is amazing!
thank you!
It's like the Dance of the galaxys. many of the patterns remind me of our Glaxy and all the ones around us.
And also the seemingly natural evolving circular movements of all the points, and like even the galaxys moving around the bigger ones in distance. even though everything startet in a kinda simple clash right into the centre, (big bang?) after that a picture of dots (star Systems) is evolving that reminds me of all what i wrote.
UA-cam's compression made this so rough which sucks because it looks so cool!
This is the coolest thing I've ever seen, I'm blown away
wow
7:40 Is just like the cosmic web and the great attractor.
The formation of stars and galaxies! Excellent work!
I already knew that god was a programmer,
but didn't know he was on youtube!
Nice work, man.
Hahaha thank you, This comment made my day!
It's amazing how all galaxies would collapse without expansion, we really do live on the edge of a knife of possibility, precisely where life can exist. This is probably why the multiverse ideas came about.
Amazing! You've just created an elliptical galaxy
An approach you could take is to ensure that energy is conserved after each step. After updating v and x, adjust them to preserve energy and momentum
Ya at the very least I should keep track of the systems energy and momentum so I can see how much it’s wrong.
For performance the ideal solution would not need to provide this corrective step which would be computationally expensive, but still be a forward Euler simulation but in such a way that accumulated errors in the systems energy and momentum locally tend to cancel out when observed on the global scale
It’s so cool that this is even possible, I love it
this is the coolest thing I have saw today !