How to generate region based textures on a surface triggered by a dynamic object.

Hello guys,

I’ve been trying to figure out the material/blueprint setup for something like this:

Example: I have a simple plane and I want a certain texture to be “triggered” dynamically by an object that comes into contact with it, as shown in the example below.

Please note that I don’t wish to use any decals, particles unless I have to. I just want to have an overlaying texture triggered based on the position of an object coming in contact with it at any place or point on this surface.

I intend to use it as a normal map or a height map among other things and I prefer to have it all done in the same material.


Any hints on what nodes to look for or which direction to take? Anything at this stage is a welcome help, I’ve been trying to figure it out for a while now! And I just can’t seem to “tell” unreal what to look for and how to trigger it.

Thanks in advance.

The complexity of this depends on one simple thing - will you have only one of those “waves” at once? If yes then the setup is relatively simple.

Hello Damir, thanks for the feedback, yes only one wave or texture at any given time at the moment if that is what you meant.

Thanks in advance!

Hello William K!
If it is one wave, then you need to create it in the ground material. After that, control transparency and size of the blueprint.
Dynamic instance material a position for transmitting wave, it is necessary to blueprint ball receiving position, eg on the surface overlap and transfer into the material.
Sphere mask what you need. (2 mask for subtract and get ring wave)

Hey, indeed i’m made the same things with 2 Spheremask but do you have any idea to create many at the same time ? Like Procedural system ?

Thank you

Since I do not have access to the engine I will try explaining how to do this in text. If this is unclear I can create an example later today.

  1. Create a material that shows the wave texture at some XY points in world space. Add parameters for position, scale and opacity of the wave (some UV math needs to be done on the position + UV thing as you need it to scale from the midpoint, not the corner)
  2. Add 3 parameters: StarTime, MaximumSize and FadeDuration. Take a ElapsedTime node (or whatever it’s called) and do this: (ElapsedTime - StartTime) / FadeDuration. Clamp this 0 to 1 and use it as an alpha to drive the size and opacity of the wave.
  3. When your object hits the surface, get the material instance from that object, set its ObjectPosition parameter to the XY position of your object and the StartTime to the current game time.

erodann,You can do the same stuff to Plane. And spawn plane in place overlap

Awesome thanks for that! It really helped. We are testing it out now with some results, I will continue with this and see if something comes up. It would be great of course in the future to have multiple actors generate a mask like that, I don’t know if that is possible with the current setup. We tried it quickly on two actors, even though it worked kind of, but you’ll get both masks flickering like crazy, maybe we did something wrong with the setup but will keep trying.

Edit: we managed to remove flickering with just the two actors by using Alpha at 0.5 with Lerp, but we guess it may get messy with more objects like that.

Damir, I understood about the material setup for the wave, although in my case I will be using custom flipbook texture to drive a normal map for the ripples. I’m still trying to understand about how you are getting the position of the instanced material to the current position of the material the character is interacting with, or perhaps i misunderstood your method entirely.

Thanks again!

Some updates,

Thanks to your help, in this test scene we managed to make the mask work. However now I need to get the texture to follow the actor and to start at the center of it, plus I need to control it’s scale.

I’m assuming there’s something I need to plug to the UV coordinates of the texture so it knows actor location and something else which would control its scale based on Mask radius or independent of it?

Here’s the setup so far in the material.


Ok I think I sort of got it, it was as simple as hooking up the sphere mask output to a panner’s coordinates and then plug in the panner to the UVs of the texture. It seems to work well but maybe there’s a “cleaner way” not sure, Strangely Mask hardness seems to affect its tiling a very bizzare way, it had to be put to -1 to display the texture correctly.

Hope this helps someone else somewhat looking for a way to do this.

Next step would be to control its opacity and timing, thanks again guys, your input is much appreciated!