Remember 3December
Find out where to celebrate your 3D CG art...
Theme color:
  • 1/3
You are here: Homepage /  Blogs /  Duncan's Blog / Groovy Phobos
Groovy Phobos
Posted: Nov 21, 2008
Category: nParticles
Social Media:
Bookmark and Share
Closeup of the potato shaped Martian moon Phobos

Image Description: Closeup of the potato shaped Martian moon Phobos

If one looks at the Martian moon Phobos, perhaps the most enigmatic feature is the lines of grooves that cover it, as if it had been scraped with a rake. One theory was that it was formed by the spray of ejecta from the collision that formed the largest crater "Stickney"(seen in the image above). However there are problems with that, among them that gravity would not be sufficient for sliding rubble to form the deep grooves. A more accepted theory today is that a large impact on Mars threw up ejecta that Phobos collided with:
New Evidence on Origin of Phobos' Parallel Grooves
The ejecta formed linear streams that created grooves on Phobos, much like slowly moving a rock through a stream of bullets from a machine gun. One thing I wondered was how would the material have time to form into neat streams before hitting Phobos.

It seemed to me that if Mars once had a ring system then an asteroid could be captured by collisions with such a ring system and that this event would leave groove channels on the asteroid. As well collisions with a ring system would be much more probable then collisions with orbiting bodies because the ring system covers a larger area.

For fun I thought I would try to recreate such a scenario in Maya using nParticles. I created a single nParticle for the asteroid and applied a newton field to it to simulate the planet. On the nParticle I turned on ignoreSolverGravity and Wind, as well as made the drag zero. To simulate the ring system I created a drag field and gave it a torus volume shape, scaling the field flat to roughly model the geometry of the rings. Now whenever the particle entered this ring region it would slow down a little simulating collisions with the ring. However I found initially that any start trajectory for the particle ended in collision with the planet:
I realized that simple drag is not a good model for a ring system, because the ring system is in orbit and moving. Fortunately we can easily model this by animating the rotation of the drag field and setting "Inherit Motion" on the drag field to 1.0. In order to see how fast the drag field should rotate I emitted a few particles(with the newton field assigned) inside the ring and adjusted the emission speed until the particles just orbited in the ring. It was the a simple matter of matching the rotation of the field with the motion of these particles.

Now when the simulation is run the asteroid is easily captured into a nice circular orbit:
With this setup an interesting thing is that the asteroid will almost always end up in a circular orbit matching the ring system, so long as it collides with the system. Even if the asteroid's initial motion is perpendicular to the ring system it eventually settles into an orbit near the rings. Start the simulation in this manner:
And eventually after about 6000 frames it settles down to this:
For fun I thought I would try to see what kind of mark might be left on the asteroid from collision with the rings. To do this I first created a sphere and positioned it to match the particle using a simple runtime expression. I also assigned a fluidTexture3D to the sphere and parented the fluid container to the sphere. ( I use a 3D fluid instead of a 2D one because it is easier to emit into based on ring collisions)On the fluid texture I turned off all grids(no dynamic fluid solve), except for a static density grid and set the resolution values relatively high. I made the fluid color input the density and edited the color ramp to the range of values I wanted to show the collisions. Next I created circle nurbs curve primitives for the rings, selected the rings and the fluid texture then did fluid->emitFromObject with the option set to use curves. On the resulting fluid emitters I set the min/max distance to 0.001, 0.1 to control the range the curves emit over. Lastly I animated the y rotation of to the asteroid to better match how it might have been rotating as it orbited. (Ultimately rigid bodies would be better for this, especially if one applied the newton force per vertex, as this induces rotations based on tidal forces. However I noticed a problem with Maya rigids where orbits seemed to grow slowly over time in a spiral fashion, so used nParticles instead)

Now running the simulation the fluid gets painted into by the rings everytime the asteroid passes through them, leaving the following marks that are not unlike the ones on phobos:
I've attached the scene file phobosCapture.ma. One can play with moving the start position of the asteroid particle and playback to see what happens. After colliding with the ring system you can look at the asteroid to see the marks. High quality display will better resolve the texture, but slows down playback, so only turn it on after playing back(or do a render).
This is just a trivial exploration of an idea I had and not an attempt to prove anything. I would be interested in hearing from any experts as to why this might or might not be a feasable explanation. (I've not been able to find any references to capture of orbiting bodies through ring system collisions, although I would thing it to be relatively common)
It would be really cool if this were true because the grooves would be a fingerprint that indicate not only how Phobos came to orbit Mars but also that Mars once had a ring system. As well one could potentially date when it was captured by looking at the degree to which the grooves have been covered by subsequent asteroid impacts.
In order to post any comments, you must be logged in!
Newest users comments View All 4 Comments
Posted by Duncan Brinsmead on Dec 01, 2008 at 08:22 PM
Sorry, I gave you the wrong command. It is "bakeFluidShading" (not resampleFluid... I've corrected my previous post)
Posted by stigla on Nov 30, 2008 at 12:31 AM
Is this working with different sized grids?
Most of the great examples on fluids are using central gradient for color and opacity, and often more.
So I'm trying to achive the same look, but use density insted central gradient. I guess this means I need much more dense grid to get the same look?
I've found doResampleFluid.mel, which calls rebuildFluidInitialStateCmd.
So all I would need to do is to replace $fluidShape to transfer values from one fluid to the other, but I'm not sure how this would help.
When I use central gradient, density is gradually higher towards the center?
Usually when showing the particle numbers you can see the density, but this doesn't work with gradients.
We had discussion about it on Cgtalk, how to transfer 2D fluid texture to fluid 3D grid, which would be great option, or mel script to have...

Thanks for pointers!


Als
Posted by Duncan Brinsmead on Nov 28, 2008 at 09:21 PM
You may need to write a script to initialize the fluid density grid(using setFluidAttr) if you need a uniform gradient. There is currently a mel command you can used to sample a textured, shaded grid into a second non-shaded non-textured color+density fluid: "resampleFluid"(check the command doc for info). You might look at the file resampleFluid.mel to see how it works then adapt it for your needs.
Posted by stigla on Nov 28, 2008 at 04:28 AM
This is great.
When I worked on planets, I has similar things pop up. While testing newton fields with different parameters, I got couple of famous nebula look-a-likes in their basic shape. Like all the nebulas are just some product of newton fields, it's just main trick to find the right sizes/parameters to start with ;)
I'm working on sort of similar thing at the moment, filling the fluids into static grid, but what I need to keep my texture and look the same is to have density fill in with same effect as center gradient would do. Any idea how would be the best way to solve this?

Thanks


Als