Hey guys, I think I have created a new shape, hear this out:
I was fooling around with soft-body physics, specifically I wanted to squish together soft-body spheres. I started by using subdivided cubes projected into spheres with the “cast” modifier. I was disappointed to see that Blender does not conserve the volume of soft bodies, like in this example where one sphere would “win” over the other and squish it against the wall when you’d expect them to push equally against each other:
I was looking around for a solution to this and found this post on Blender Stack Exchange. It explains how soft-bodies are treated as “hollow” and therefore do not really have a volume. It further suggests adding internal structure to meshes in order to give them the ability to resist forces against their volume.
So I tried to add internal structure to my subdivided cubes by making a cubic lattice and then casting each “layer” into a sphere like this:
This improved the simulation and the volume was retained much better, but new problems arose:
As you can see, the vertices that were originally the corners of the cube have no internal support, so you can see them wiggling back and forth, giving an uneven result. These vertices can move so far into the mesh that the internal structure is exposed, as you can see on the top left of the example above a few frames after the initial collision. This is a potential clipping danger. The simulation is also quite jittery.
My solution? The Armoured Icosphere™. Basically this is an icosphere with an internal structure, which varies depending on the number of subdivisions. An armoured icosphere with 1 subdivision is simply and icosphere with all the vertices extruded towards the center, like this (I have highlighted the internal structure):
This is what I call a Class 1 Armoured Icosphere. To move up to Class 2 you need to add another icosphere with 2 subdivisions and double the radius. Then you need to connect the new bigger icosphere to the first smaller one. Each face of the small icosphere corresponds to four of the faces on the bigger sphere, like this:
If we take one face of the smaller icosphere as an example, this is how it conects to the bigger icosphere:
So if you do this with every face of the icosphere, you should be left with this:
Now remove the internal faces and fill in the faces of the bigger icosphere (I do this by making a copy of the big icosphere and hiding it before deleting the faces, so that I can bring it back in afterwards and merge vertices by distance).
You now have a class 2 armoured Icosphere! The internal structure is comprised of very evenly spaced triangles which leads to a very smooth approximation to an actual volume.
The soft body simulations are a real treat with this beauty. Volume is preserved and the result is a very smooth simulation of squishy spheres, here is a comparison of a simulation with armoured icospheres on the top and normal icospheres below that.
You can see that the normal icospheres keep pushing eachother unevenly and inconsistently compared to the armoured ones.
I did four simulations each, the simulation with the armoured icospheres baked consistently in 35 seconds, while the normal icospheres could bake from 30 seconds to a minute. The normal icosphere simulation would also quite often break and the spheres would clip into eacother.
The simulations get even smoother when using a Class 3 armoured Icosphere (this one took a while to make, but it’s the same process), like in the example below:
So I guess I’ve developed an elegant and smooth way to realistically simulate soft spheres in Blender. One downside is that it is not possible to add a subsurf modifier to the armoured icosphere. The internal structure interferes with the surface which is VERY apparent when shaded smooth:
I’m pretty excited about my armoured icosphere though, but what do you think? Has the volume issue been resolved before in a better way that I should know?
If you’d like to play around with the Class 2 and 3 armoured Icospheres then you can download them here!