How to Animated Signal

Hi, I need to animate a signal like in a image. Each part of signal is not moving, each wave appear in white and than slowly disappear - doesn’t matter if by transparency or thickness to zero.


I was able to create some anim via particle size, that is good for point signal, but that is not what I need.
Or I used animated array and than animate curve thickness, but that signal disappear at once.
That is not too bad, but I would like to know it.
Drivers, constraints.
Can’t keep the local anim to global.

Thank you for help

How about using Emit material and animate its intencity?

Hi vkilidu,

How about setting the material to object color, and use drivers to animate.

The same driver for R, G, B to animate from black to white, and you can also animate the alpha if you want them disappear on some bg color other than black.

Give each band a custom property and keyframe it going from 0 to 1 over the time you want it to appear / disappear. If the custom property is named xxx you just need to set up a single property driver var with data_path [“xxx”] and a scripted expression with the variable name, let’s say var. The inverse driver will be (1 - var)

Once you have your 6 bands animated make them into a group. Go to the Add menu and add a group instance. You can then parent that group instance to a single vertex object and under the Object > Duplication menu set to vertex.

Use the array modifier on the vert object will give you the replication.

@ridix: my problem is how to offset animation for each band on release frame

@batFINGER: Thank you I will give it a try. Drivers are my pain :slight_smile: but seems explained well :slight_smile:

It looks like a simple task and it took me a few hours to get just closer.
I just thought, there has to be a way how to animate one and generate the rest as offseted steps.

The only one solution that almost worked was particle system.
Band used node material where particle age socket controls alfa, but I have problem release particles in corect order on line.
I would swear it worked before.
Even I used gradient (as emission factor) that worked for sure, produce the same wrong order.

Hi,

Here is a script to add a driver setup to the selected object. Paste the scrpt into text editor, Choose the selected object and hit run script.

** add a material to object and choose object color first.


import bpy


#add custom prop and driver to active object


def color_drive(obj):
    obj['color_drive'] = 0
    for i in range(4):
        f = obj.driver_add("color",i)
        d = f.driver
        v = d.variables.new()
        v.name = "color_drive"
        v.targets[0].id = obj
        v.targets[0].data_path = '["color_drive"]'
        d.expression = "color_drive"
        
obj = bpy.context.active_object


color_drive(obj)
        
        

search for color_drive under the custom properties panel
sliding this will change the color / alpha of the object.

Once this has been done once, you can dupe the object and change the keyframe animation on the color_drive prop.

Then dupligoup them as explained in previous post.

Hm, script created a drivers for RGBA, I can keyframe them.
(I used only Alpha now.)
But how is driver connected to transparency, It doesn’t affect it.
Slider in mat prop panel should be violet when is driven, isn’t it?
I used cycles than thought its for Internal mat, that use alpha channel … but alpha is still 100%.
I will have to check some wiki for beginner to understand to this system… I!m totally out of understanding.
Sorry :frowning:

Attachments

test-Driver.zip (474 KB)

Ok couple of things

You only want the color_prop to go from 0 to 1 ie black = (0,0,0) white = (1,1,1) I mistakenly put an integer in for the custom prop, which made that a bit hard lol. A float value ie 0.0 and you can now keyframe in 0 to 1

Seeing as you have gone from 0 to 10 I divided the driver by 10 … anyway

On the materials :

I suggested object color because that is independent of material. Unfortunately that is only for blender internal render by the looks.

because you are driving the material you may need a new material for each object. I’m new to cycles and nodes. As part of a sound driving addon I’m putting together I need to get my head around nodes and cycles, so helping you here is good practice.

The script puts the custom prop on the object which drives the material. My choice would have been to put it on the material but that didn’t work. I’ll have a chat to the developers to see why this is. You can also add a custom prop to a node_tree but I have no idea how to access that on the UI to keyframe it.

Below is a script to set up the driver / prop on an object with cycles material in slot 1. It drives the Emission shader, cos your circles were pink I’m assuming this is the one you want.

Change the COPIES value to make copies with there own material, driven by the object that uses it.


import bpy


def color_drive(obj, copy=False):
    obj['color_drive'] = 0.0
    mat = obj.active_material
    
    if copy:
        obj.active_material = mat.copy()
    
    nodetree = mat.node_tree
    for i in range(4):
        nodetree.driver_remove('nodes["Emission"].inputs[0].default_value', i)
        f = nodetree.driver_add('nodes["Emission"].inputs[0].default_value',i)
        d = f.driver
        v = d.variables.new()
        v.name = "color_drive"
        v.targets[0].id_type = 'OBJECT'
        v.targets[0].id = obj
        v.targets[0].data_path = '["color_drive"]'
        d.expression = "color_drive / 10"
        


obj = bpy.context.active_object


if obj is not None:
    color_drive(obj)


COPIES = 0


for i in range(COPIES):
    bpy.ops.object.duplicate()
    ob = bpy.context.active_object
    color_drive(ob, copy=True)
    ob.location.x += (i + 1)