Hey!
Just to make sure I got this right:
- You have an in-world widget with a Text Block on it so you can manipulate the message shown.
- You want to apply this effect on the text.
- You want to create a Dynamic Material Instance for this material and manipulate it with an animation.
All correct until now?
Your effect material needs an input to work properly. The only way to get that input (in your case text) would be render it out first. You are correct about the Retainer Box, it will render out its Widget children onto a texture and then you can apply your effect on that.
Now, about performance. In the Retainer Box you can tick the “Render on invalidation” box and untick “Render on phase” box. As far as I’m aware, this means that the Retainer Box will only re-render ONCE when one of its children components requests it (when a change is made) so it won’t be on every frame. In your case when you change your Text Block text it will re-render it once and you can manipulate that texture in your Retainer Box material. You can redraw the Retainer in-game whenever you change a value on a child component.
As for the 3D Widget component itself - it has its own re-render rules that you can access in its Details Tab.
Using the Redraw Time setting you can tell the Widget how often to redraw its contents. Higher values means more time between redraws.
So now we’ve told the Retainer to only Redraw once updated AND we can tell Widget how to often to Redraw individually.
I also made a little material that emulates what you have in your example.
Here is the final result.

Hope this helps!


