Download

Sequencing an emissive material along blueprint instances

Dear community,

I am a newbie to UE4 and I need your help.

I am trying to use a mesh asset which has been converted into a blueprint actor, to create a chase light effect between the actor-instances.

I set up the emissive material to loop the light on/off, but right now all actors turn on/off at the same time. Can I sequence the animation in delay between the actor instances without duplicating the material and still using the same single blueprint ?
I know about “Get All Actors Of Class” but I’m not exactly sure how to use it to get that effect.

Moreover I would want to control that effect in a way that I could sync it to audio, play it faster/slower - change it from linear sequence to random and more…is that doable?

I somehow can’t upload images here so here are the screenshots via dropbox: Scene: Dropbox - Scene.jpg - Simplify your life Blueprint of the emissive material: Dropbox - BluePrint.jpg - Simplify your life

Thank you very much in advance

Elad.

Hi man,
I dont think you can ,
If you want different actor to use the same material instance, they have to share the same features.
If you want different colors, or different parameters , you need to have different instance of the material. (pretty completely sure)

Get all actor of class, is a node to get a list of all the actor of a type, in the level,
With that you can have a list of your “Doors” , to use as reference to call a command to every door, or to evaluate which door shoud do the actions.
But it dont help you in any way with the “material instance problem”

Another dirty way could be using the mesh
for example add a mesh to hide the emissive mesh,
And let every actor animate the “Hider mesh” to show or not show the emissive mesh .
This will leve you with only 1 material, and 1 blueprint, but i dont know about performance XD

Hey!

Thank you for the detailed response. So to create a chase-light-tunnel effect I’d have to manually set 10+ materials with different animations.

Your dirty way sounds good as well, as I’m doing a more basic scene so I think it’s not gonna be overloading it too much.
How would you approach that? blueprint-wise?

Thanks again!

Elad

Are you saying you want to light them up in sequence?

image_212247.jpg

My end goal is to have 15 copies of this Truss-Neon-Element, then turn the neons on/off based on an audio track (so manually controlled via Timeline Events) and also light them up in sequence. Basically creating various emission effects between them.

I know how to control the emission amount in a material via the “Material Parameter Collection” - combining with a “Set Scalar Parameter Value” - but that’s just one material on one blueprint.

If I need to create a tunnel of objects, I need to assign each blueprint copy a different material so I could control the emission amount manually

So from what I see it means I have to duplicate the blueprints as well as the materials? so 15 blueprints with each copy assigned a different material?

Sorry for the confusion and thank you.

Elad

When you place the blueprints in the level, each automatically becomes a separate instance, with it’s own material.

To get them to light up from a single timeline, that timeline would need to be in a 3rd actor.

In fact, it wouldn’t be a timeline, because they are really for continuous control, more like a timer. ( will do example ).

EDIT: Ok, so the BP only contains the on/off functions now, and an int variable that say which order it comes in.

Level BP has:

](filedata/fetch?id=1856515&d=1611663259)
The functions are just to manage the beginning and end array cases:

](filedata/fetch?id=1856516&d=1611663296)
](filedata/fetch?id=1856517&d=1611663311)
lights2.jpg

Oh wow that looks amazing! thank you so much for the super quick buildup.

Is it possible to combine your method with a method that allows a manual control too? so I could fire up each blueprint instance’s emission on an audio timeline?
For example instance1, then 2, then 1, then 5 …etc…

Thanks again for everything

EDIT: trying to rebuild my scene to mirror your setup, I am facing some super noob difficulties:
1- The “Light Chase BPs” object that is used a few times in your BP - how do I get that?
2- The Light Off / Light On boxes - how do I get those?
3- The Target -> Sequence number conversion - is that array to float?
4- I can’t seem to figure out which part of the BP is pointing to the emission\visibility parameter

sorry for all the questions and thank you for helping again

No worries :slight_smile:

Oh I missed the first BP screenshot from before, now I see it!
Now I am able to properly analyze and hope to learn from this.

So the BP within the object itself I get, even though I can’t connect the “Next Light” node to the last “target” slot

](filedata/fetch?id=1856566&d=1611673101)

So that by itself already creates a sequence effect, and it can run independently right?

So the 2nd method you showed from the level BP, is to create a similar sequence but from an outside BP right?
Cause over there I am not able to get the target node for the “sequence numbers”

](filedata/fetch?id=1856557&d=1611670447)
Any option I choose doesn’t give me the same node as the one you have in the screenshot.

I feel I am making a mess of something that should have been fairly simple…is that me? haha

Would it be possible to fire them manually? maybe I’d be better off this way, so I can also control the emission power to fade in and out.

Thanks again

Light sequence is a custom event in the blueprint, so a reference to that kind of blueprint will have ‘light sequence’ as a callable event ( after you’ve compiled it ).

Sequence number is an int in the blueprint, you have to declare it a make it visible:

Screenshot_6.jpg](filedata/fetch?id=1856573&d=1611673919)
Tell me how it goes…

You are so kind for keeping up with me, thank you !!

I replicated almost all the BPs you showed me.
Except
1- can’t create the combined “Target | Sequence Number” node - levelBP
2- when I call out the functions they appear as blue and not green like yours - levelBP
3- can’t connect the Next Light node to the Target slot in “Light Sequence” - ObjectBP

attached my current BPs

much love!

LightSequence shouldn’t be calling itself ( as in your diagram ).

You need to make the functions pure:

Keep me posted…

Ok fixed the functions.

1- In your diagram at “For Each Loop” you connected ArrayElement->Target->Sequence Number
I can’t connect those

That’s the only different I think right now between my BPs and your example

Does the rest look ok?

The array: you need to get all actors of class <your bp class> and the array variable needs to be of the same type :slight_smile:

I did so, or so I thought:

but they won’t connect

Ok, so you need to fix this bit:

Screenshot_1.jpg](filedata/fetch?id=1856644&d=1611683676)

Drag the pin on ‘array element’ ( on the left ), and search for ‘sequence number’ ( or whatever you called your variable ).

And connect the blue line :wink:

Haha my Unreal system is against me - I tried that but no luck…I only get set/get SequenceNumber and neither connect the way yours did.

Montage:

That’s it, the ‘get sequence number’ thing. There should not be a local variable.

SOLVED: with the help of the mighty ClockworkOcean,

My mistake was that I declared “Sequence Number” in the LevelBP instead of the MeshBP, as well as mixing two techniques at the same time - lighting from within the BP vs lighting from the LevelBP.

Eventually I stick with the LevelBP method.

Thank you so much !