8
$\begingroup$

I would like to create an animation of how a gland grows during embryonic development. Imagine tweening between these 4 steps:

gland development

As you can see, it's not just getting bigger, it becomes more complex, it changes shape, parts are added and sometimes parts are removed.

The techniques that I have discovered so far appear to require that the mesh stays the same throughout, which seems clunky to me. I do wonder if I have been missing a big-picture approach to this type of problem.

$\endgroup$
6
  • 2
    $\begingroup$ How about a liquid simulation with an obstacle shaped like the final structure? You could then bake the animation and turn sideways or whatever rotation needed. $\endgroup$ – Luciano May 29 '20 at 7:47
  • $\begingroup$ Ciao Giuseppe, questo l'hai visto? --> youtube.com/watch?v=jPvLQH17Y2Q -- did you check this tutorial? --> youtube.com/watch?v=jPvLQH17Y2Q $\endgroup$ – Sanbaldo May 29 '20 at 7:49
  • 1
    $\begingroup$ @Sanbaldo it seems this will not be available until future versions, maybe 2.9 $\endgroup$ – Luciano May 29 '20 at 8:20
  • $\begingroup$ @Luciano, I see, but I wanted to understand if the requested feature was the one of the video $\endgroup$ – Sanbaldo May 29 '20 at 8:21
  • $\begingroup$ @Luciano, if I understand correctly, your suggestion would happen to work for this specific shape, but my question is more general. The first 6 seconds of the video suggested by Sanbaldo are an excellent example of what I would like to accomplish (but see my next comment) $\endgroup$ – Giuseppe May 30 '20 at 12:28
8
+50
$\begingroup$

Q: How to morph mesh shapes with different amount of vertices?

A: There is not an efficient way in Blender to animate mesh with varying topology (from what I know).

Blender is able to generate this kind of data as export of fluid sim or metaballs into Alembic (.abc) format. This format can be also imported back into Blender. A bit of setup can be found under Modifier tab - Mesh Sequence Cache (see Manual). But in general - you can transform only on object level (Loc/Rot/Scale or use modifiers on top of this format).

Like a hack of your proposal I tried to animate sculpted object with shapekey. When topology become to its limit I duplicate the object and continue to sculpting with dyntopo on specific part. It worked in kind of, but its was so painfull with pour result.


Q: How to animate growing an organic structure

A: You can try - Particles with Metaballs growing by gradient texture. In this sample I used just a tree structure (addon Sapling), but you can model gland by your self (or some cool script probably exists for this kind of structure).

  • add MetaBall object (for later use)
  • create some gland structure (edges only)
  • subdivide edges evenly into dense vertex mesh

Particle System

  • add Particle System to this object with option Render as Object
  • as object select MetaBall
  • set a number of particles the same as amount of gland vertices (it can be found in edit mode in bottom row)
  • you would have to set particles Velocity to zero and disable Gravity under Scene properties to stop particles to move

Animation

  • animation is done by illusion - particles scaled in time
  • particle scale is controlled by Particles > Texture
  • add new Texture and go to Texture properties
  • set Blend > Spherical, Influence > Size > enable, Mapping > Object (You can animate size directly in this panel, but its more flexible use another object. I added Empty into scene.)
  • additionaly you can enable Colors > Color Ramp to adjust appearence of size in time, so it will looks like growing thickness

It has its limits to animate by texture, but you can probably get some more variations by adding another Particle Texture to "break" spherical growing shape (I didnt try that).

enter image description here enter image description here

$\endgroup$
3
  • $\begingroup$ Looks promising. Would you go as far as stating in your answer that Blender currently does NOT directly support tweening between shapes of different geometry? While the example you provide is clearly not a general solution, it DOES address the specific question that prompted my post. Would you be willing to share the blend file and possibly some details? Thanks, $\endgroup$ – Giuseppe Jun 2 '20 at 11:11
  • $\begingroup$ @Giuseppe What do you mean "Would you go as far as stating in your answer..."? With second Q - no problem, will post it later. $\endgroup$ – vklidu Jun 2 '20 at 15:41
  • $\begingroup$ It looks very useful, in general.. a bit more detail would be great. $\endgroup$ – Robin Betts Jun 2 '20 at 17:53
2
$\begingroup$

about blendshapes, remeshing, shape keys and non-tendrily stuff,

I'm not completely sure if it's exactly what you would want, but my first instinct was also to use "tweening between the shape of two objects" as you had mentioned in a comment on vklidu's post. However, blender does have a limitation in this respect. They're called shape keys, and allow you to blend between two shapes supposing both shapes have the same vertex numbers and ordering.. blendshapes are the same, but referance existing shapes, also with the same number and order of vertices. Otherwise, blender couldn't possibly know what vertex is supposed to grow in which direction. While it definitely is possible, it would require you to either plan out where you needed the resolution to sculpt the various arms out beforehand, or to model it, then somehow collapse the arms in later, till you get a flat or smooth object and a shape key for each layer of "branching" you do. This is definitely possible through proportional editing and sculpting if you don't use dyntopo. I would say for something as simple as a fetus to a small human, it's possible, you just have to be real careful how you sculpt- Maybe do it in steps. I know you can sculpt millions of polys, but you definitely get diminishing returns when making tendrils with them.

If you're just looking for a basic shape, with no need for anything beyond a very basic material (with not texture nodes) you could try the new remesh features to merge objects and "store" them in one another until they can get out, or using metaballs with multiple objects in much the same way. That'll end up looking a bit like https://www.youtube.com/watch?v=e087KzDOeyk, which can give a very micro-organic feel with some translucent materials. remesh is a bit like metaballs, but with fewer limitations and I assume more intense computing.

as well, using blendshapes or vertex groups with the skin modifier could also get you close to what you wanted... though I'm not sure exactly what that may be.


the best that I could manage without replicating another answer because I didn't see that little block at the top till I was done and did a branched growth thing all the same

I was able to get an effect like what you had mentioned, using drivers, curves, and the bevel options in the curve settings. I made a tree object out of curves (there's an addon for that- add tree). it's not elegant or totally procedural, but there's some good growth control there.

after that, I added a bezier circle, and set the tree to use it as both a taper object and bevel object, which essentially allowed me to grow a cone along the shape of every curve that made up the tree(there are a lot), and have those cones' base size be controlled by the circle.

The driver I added was a "sum values" driver, that used the distance between the origins of the circle and tree. This is where it gets wacky. I then installed an addon that allowed me to separate multiple curves at once ( https://github.com/agapas/separate-curves ). because they came from the same object, they all inherited the same driver and origin, which means they all grew at once, suddenly spawning a mess of cones, as their drivers still referenced the same original object, and were in the same spot anyway.

I needed them to start growing cones as the circle moved up, not all at once, so I selected them all, and set origin to geometry to move the origins to their appropriate places. Because the driver's values were only 0-1, I had to start editing the origins further to put them all in a .5 unit cube. Now all the origins were far enough away from each other to show a different distance to the circle.

I then... set to work. I only did the first few, but after all that, you still need to go into every object's driver, and have it reference itself as the last part in the sum, not the origin of the first branch. for 269 curves, it would be quite a pain, but it's probably scriptable. After that, I found the cones were spawning too early and growing too quickly (the origins with their drivers were seeing the circle too quickly) so I squeezed the origins on x and y, and reapplied transforms to the tree, to make sure they saw the circle in order from bottom to top and that distance from center would not overly influence growth. the file I uploaded it... works okay maybe? I think Vklidy's is definitely more elegant, though I can't say I know which of these methods you might like to explore more. Neither can be textured easily, and both have fairly large drawbacks. This is why people want everything nodes, so we can do this weird stuff using actually supported methods. I know Houdini does have an edge on blender in this kinda stuff. maybe look at that?

also here's the file. moving the circle up and down is how you control it. right click on the purple box in the curve>geometry>bevel settings to take a look at the driver, though it's nothing special.

$\endgroup$
1
  • $\begingroup$ Hey, I do appreciate all the effort you put into your answer, thanks a bunch. I upvoted it, but since it was not so substantially different from vklidu's, the bounty goes to his/her answer because it came first. Cheers-- $\endgroup$ – Giuseppe Jun 4 '20 at 21:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.