Is it possible to animate text split by words non-destructively?

Just realized that there is this much more efficient way to keep groups of instances together using the Accumulate Field node:

Glad I made the WIP qualifier. :sweat_smile:

6 Likes

That’s pretty amazing @zeroskilz ! I really shows a lot of potential !

I’ve been thinking a bit about how to create a user friendly interface for creating text effects during the day.
It could be a collection of nodegroups, with a few types :
Some of them would be pre-processors like the world split.
Then, some effectors would allows to make cascading animation.
For instance, a scale effector can have these kind of parameters :

  • Group : something where you plug character, word, face indices.
  • Anim start : the first frame of the animation
  • Time Offset : how much frames between each animation
  • Scale In : number of frames, 0 = disabled
  • Hold : number of frames, 0 = disabled
  • Fade out : number of frames, 0 = disabled
  • Overshoot/Bounce : create a bounce effect by for instance scaling in bigger by an amount and then going back to size 1.
  • Random Timing : randomize the offset

Finally it should be possible to chain effectors to make more complex motion, or for instance make the text appear by scaling each letters, and then disappear by having each words moving to the right of the screen.

Then some groups would allows to turn the text into a mesh (renderers) , and add some effect like drop shadows, emboss, borders… With some selection to eventually assign materials.

Something like that , which is obviously a lot of work and trial and error to get to something user friendly and versatile.

I didn’t want to imply that you should do that, it’s a lot, but that’s just to share views to someone who want to build a more complete tool ! When working with typography in mograph video we just want to slap a few effects on text and focus on the overall video, without digging too much into technical stuff.

Anyway, it’s just food for thought ! Would be amazing to have simple to use text tools !

3 Likes

Thanks for the ideas… Things are still very WIP and about to have no electricity so will have to carry on tomorrow after work.

2 Likes

Sure ! It’s just that your test was very inspiring and that got me thinking !

It’s really a design challenge , so maybe worth taking the time to look into that and evaluate if it’s worth making a commercial asset , since it might requires a few iteration to have something “production ready”, but once it’s done it’s probably going to attract a lot of users and then it might be worth the time spent to build the tool !

3 Likes

Yeah, if I think of the mograph work I do, what I do most of the time is change the value of the position/rotation/scale/opacity “animator” of a text layer, and then animate the range. And I’ve been considering if it’s worth it to copy the same workflow into Blender or if there’s a better way (a Blender way?).

I’ll try to document my workflow and translate it into Blender in the best way possible to figure out what can be done with what we have and what’s missing.

2 Likes

Ok ! I think it’s possible to make a good workflow in blender even if things could be simpler.

I’ll try to explain what I have in mind to the best of my abilities ! Also, While I suppose most of my ideas are possible, it’s something we should expect from a well crafted ( = maybe expensive) system. There could be some cheaper ways !

Ok, so first what would be our input, where do we type text ?
Simpler solution is to use the node editor, since it’s impossible to expose parameters like font, alignment… to a GN modifier/group :
image
To me that could work but it’s far from ideal from a motion designer standpoint, where ideally the users should go to the nodes only if they want to, like with the hair curves nodegroups.

The best solution would be to use text objects right away :

And drop some geo-nodes on the text from asset browser :

This is tricky , since we need a nodegroup ( Init text effect ? ) that will assign various IDs as attribute, like Letters ID, word ID, Line ID, Letter per Word and so on…

I’m not 100% sure this is possible, but it’s really worth looking into, and on top of that, an addon can be shipped with the nodegroups and could retrieve some data on selected text, like the size of a character, line spacing and so on, and feed that into the “Init text effect” node group to simplify that info gathering process…

Now, how do we add animation ?
Once that part is figured out, it’s just a matter of working on effectors, they can be added in the modifier stack by dropping modifiers from asset browser :

Or in the node editor if you want more elaborated effects…

How about the addon part ?
This can be extended to provide more tools, like offsetting all the selected text objects at once,
and maybe other convenient batch operation.
Another cool thing is that the addon is only there to set some stuff, so it’s possible to send the .blend to a renderfarm and it would work without the need for the addon to be installed.

Other Stuff to mention ?
Another good thing with using text object as a basis is that you can take advantage of extrusion, beveled edges and many things. However some settings like character spacing, or Shear might be better to be done using a GN nodegroup, since it might confuse the init process. Sounds too error prone or should we expect people who buy that stuff to read the docs ?

While this proposal seems to avoid many options GN provides, to me it would be the best way to interact and work with animated text for the most part. At least on a regular mograph project, where you need simple animations but you might have a lot of text to change and tweak in a short amount of time.
This is also making things simple and fun to use for non-tech people, and it’s still possible to go a step further with nodes.

2 Likes

If I’m being honest, most of our woes would disappear if something like this RCS proposal would get implemented: https://blender.community/c/rightclickselect/Kchbbc/

If we could, for example, animate a Text object, but then tell to Blender to apply the animation not to the object as a whole but to split it into lines/words/characters and then “apply” that same animation to each new “grouping”, that’d be just about perfect.
Then, basically the only other thing that we’d need is a time/frame offset, to choose how far apart in time the animation would go (would make it so each line/word/character is animated at the same time).

If I’d knew how to code, I would’ve implemented this years ago. But I honestly have -1 knowledge on how to do this.

2 Likes

Yes, we should be able to expose these parameters in the node group inputs, that would make things much more straightforward and user friendly.

I’ll share a few files I created while testing and learning all the stuff @ecke101 added when the Strings to Curve node first appeared. I hope any of you can find them helpful in any way (Though they might be messy, sorry hehe).
https://drive.google.com/drive/folders/1F0EpcI3LnsWOCbkE0ymKm5MEZYqVgPfL?usp=sharing

1 Like

That looks great indeed ! However given the flexibility GN provides I’m not sure it’s the best approach.
In GN it should be possible to do a simple interface like that and on top of that build more complex effect with the same basis if we want to.

While on the other hand this system solves very well basic use cases but isn’t very helpful in more advanced situations…

@julperado ! Interesting test scenes indeed !

1 Like

Very cool feature!
excuse me there are any possibility that you would share those node groups? :pray: seem very powerful

Hi and welcome.

Sorry, I’m usually quite busy and easily distracted. I have a bunch of half-finished projects that I hope to post on Gumroad some day that I never get round to. Also been sick recently so job has been taking more out of me than usual and only been answering quick easy questions here to feel relevant and to fight depression.

I cannot promise anything but will attempt to make something sharable this weekend.

4 Likes

always remember to leave time to take care of .you. :slight_smile: (though i understand how that goes all to well)

1 Like

Don’t worry, thank you in advance, I hope you feel better
Actually, I already have a node setup for text animation in Blender
you can check it here https://blendermarket.com/products/super-text
and I wanted those nodes groups for implement that feature of animating by words for the setup, (if you are ok with that of course, I could give you a full copy of the setup in gratefulness :pray:) also I was thinking about release a free version of that node setup :slight_smile:

Hello! I was looking to split text by words yesterday (v 4.0.2) and found by accident that in geonodes with a sample-index of input-position after a string-to-curve it somehow ends up with a word index that is off by one character. So that seems to work for the selecting part, animation I’m still looking. Would be nice with a simple kinda start-middle-end positions with optional bounce/smoothing

Edit: Never mind this, it just cut the text by the meter/blender unit hehe

1 Like

Okay got something working. Looks terrible but could be a starting point
image
Geometry Nodes - Write Words v5.blend (127.2 KB)

1 Like

image
blender_source_wordindex.patch (2.3 KB)

2 Likes

Is this a patch for Blender to submit as a PR? If so, I don’t know how to do that. :sweat::cry: Would you mind submitting it yourself? I’d love to do it myself, but I’m completely lost when it comes to coding.

@flurick made a PR for this feature. If someone can help in making it a reality, it would be very, very welcome:

2 Likes

Does anyone know if the new “Split by Instances” node could help on animating by words? I’m not smart enough to know.

1 Like

It sure sounds like the kind of node that would help in separating texts by word or letter, but I’m not sure how hehe.
I guess we have to start experimenting with it :nerd_face: