it seem to be impossible to animate a falloff curve in blender, for example the falloff graph in the vg-edit modifier. Please prove me wrong…
This is quite a big deal if it’s the case, there’s tremendous potential in motion graphic wasted…
here are some examples with slope/aspect/height generated vertex group.(the graph you see is the graph from the vgedit modifier)
Curves from curve widgets can not be animated.
Their points are representing 2D points.
That is different from Vertex (3D Points) and F-Curves (1D value evaluated according to time).
So, that requires an animation developer to pass time on subject to make it work.
That is not an exception about falloff of VW modifiers.
That is also the case for RGB Curves, Vector Curves nodes or Bevel Profiles.
The fact that work on Custom Bevel Profile was done during 2.8, 2.9 series, postponed the idea to animate them.
Yes. That would help a lot to have an animatable curve widget.
But, in future, the idea of different Curve widgets will probably be replaced by a unique node used for anything.
When would be done modifier nodes was a question without answer at beginning of 2.8 development.
At least, for Vertex Weight modifiers, you can animate a texture influencing VW modifier.
Just linked a bezier to a map_curve with python, updating on frame_pre handler
It’s still crazy to think that this is not supported by default
#there's some ugle try except it there, not sure how to avoid out of bounds error?
"""only left 2 points in the graph"""
c = m.map_curve.curves
iter = 0
while len(c.points) > 2: #(seam that cannot got lower and start from 0 ?)
for p in c.points:
except: #unable to remove points for some reasons
"""create graph from given location matrix"""
for i,p in enumerate(matrix):
x,y,*h = p
curve.points[i].location = [x,y]
if h: #handle support, only "VECTOR" or "AUTO"
curve.points[i].handle_type = h
"""get matrix from curve verts"""
matrix = 
depsgraph = bpy.context.evaluated_depsgraph_get()
eo = o.evaluated_get(depsgraph)
ob = eo.to_mesh(preserve_all_data_layers=True, depsgraph=depsgraph)
for v in ob.vertices:
x = v.co.x
y = v.co.y
""" clean o splines data"""
for spline in o.data.splines:
"""vector linear interpolation"""
return v1*k + v2*(1-k)
def update_bezier_from_matrix(o,matrix,name=""): #o = bpy.data.curves
"""update bezier data"""
handle_care = False
#create curve if needed
if o is None:
bpy.ops.curve.primitive_bezier_curve_add(location=(0, 0, 0),scale=(1, 1, 1))
o = bpy.context.object
o.name = "SCATTER_GRAPH_OBJECT"
# if name:
# o.name = "SCATTER_GRAPH_OBJECT " + name
#clean curve splines
s = o.data.splines.new(type="BEZIER")
points = s.bezier_points
for i ,pt in enumerate(matrix) :
x,y,*h = pt
#add points if needed
try: _ = points[i]
#change handle position
P = points[i]
P.co = (x,y,0)
#change handle type
if h is not None:
P.handle_left_type = h
P.handle_right_type = h
if not handle_care:
#if handle set to auto, scale will be too large, need to scale down
#cannot scale down handle on auto, they need to be on free type
#if directly doing action right in loop above, weird api behavior. not possible.
for P in s.bezier_points:
CO = P.co
P.handle_left = linear_interpolation(P.handle_left, CO, 0.2,)
P.handle_right = linear_interpolation(P.handle_right, CO, 0.2,)
Not yet I’m still really busy on my main project
but i’m curious that no official devs took a look at this issue.
Also it seems that the vgedit modifier graphs are quite different from the other graphs editors.
not sure why there’s such difference, imo everything need to be centralized in one and only graph editor