Geometry nodes: Character spacing animation

!UPDATED

I'm slowly trying to wrap my head around how geometry nodes work, but I'm having trouble with how I would go about animating the character spacing in each instance by proximity to an empty for example.

What I'm going for:

https://www.instagram.com/p/B_5U-SIBXl3/

And here's where I'm stuck:

I got the character spacing to react to a sphere in the scene, but how would I go about making each instance react to the proximity of the sphere?

• With the Index node and a Set Position node you can control the position of the individual letters of the string. But I don't know you get the vertical position into that calculation. Commented Mar 5, 2022 at 3:18
• Hi. The Geometry Proximity node does not work with an Empty because the Empty has no geometry, just a location. You need just to do some vector math to get the distance. Making a text that swings (x-axis) or a jump (z-axis) is easy to do that way (i.sstatic.net/kjkAR.jpg => i.sstatic.net/dtYga.gif) Stretching/expanding should be possible, too, I think. But I still have no idea how to several lines of the text with a vertical influence of the Empty. Maybe placing the letters on a grid would be a better approach? But how to duplicate the string for each row? Commented Mar 8, 2022 at 2:46
• Updated: I got the character spacing to react to a sphere in the scene, but how would I go about making each instance react to the proximity of the sphere? But is the right way to go about it? (see above) or should I fint a way to seperate each character later in the node system? Commented Mar 25, 2022 at 13:58

If you want to get close to this goal, you would have to approach this in a completely different way:

Instead of instantiating the whole group of letters you get with String of Curves as one object on a grid, you would have to instantiate the single letters from the String. You can do this by activating Pick Instance in the Instance on Points node.

All positioning, animations and everything where you want to have influence on the parameters must be done BEFORE the instantiation, because after the instantiation you only have access to the transformation of the single instances/splines/points.

Of course, you might think that after instantiation you could still extract the individual splines and their positions with the Realize Instances node, but that doesn't work for letters that consist of multiple splines, because Realize Instances then completely disassembles your individual letters and you can no longer work with them in a meaningful way.

So I have the following suggestion for you:

1. Just use a grid that has exactly the number of columns that corresponds to the number of your letters, and as many rows as you define.

Essentially, you have all the information you need at hand:

• The number of rows and columns
• The index and the positions of the letters per row and column

2. Now imagine that each point of the grid corresponds to a letter from your group of letters, and since the indexes of the grid points are nicely lined up and you know the number of your letters, exactly the text you defined will be visible per row. ...but as I said, the instantiation comes at the end.

3. First, you need to edit the individual rows of the grid so that it matches the distortion (or "expansion") you would like to have.

4. Since the indexes of the points of your grid are strung in order, you can easily use this grid for the base of your instantiation.

So far so good.

The trick is to find the right mechanism for a distortion/animation that suits your needs.

So in the last step, if you instantiate the letters on your grid and animate the whole thing a bit, it might look like this:

In this example, I just focused on the technique itself and tried to pre-build something in the right direction for you. I'm sure you can easily adapt this to your needs:

PS: The green nodes are especially relevant for you. With them you influence all parts of the grid's distortion as well as the animation.

...and of course you can do quite other things with this node group. Here are a few examples:

And here is the blend file:

• Wow! This is absolutely perfect! Thanks a lot. Now I just need to wrap my head around what's going on here :) Commented Apr 8, 2022 at 20:02
• You are welcome! Feel free to ask if you have any questions. I think the task/question is very good and it was fun to work on it. Good luck and have fun! Commented Apr 8, 2022 at 20:14