[Bf-animsys] BlenRig 5 needs your help :)

Ton Roosendaal ton at blender.org
Mon Mar 16 09:31:01 CET 2015


Hi,

This is really strange...

Bastien:
- ED_object_constraint_update() was added for the game engine by Benoit, it's code for his robotics IK solver (remove fake constraints). I am not sure if this so nice to keep.
- I really hope no other updates are done by constraint adding code in Python...
  
Sergey:
- The new despgraph could allow partial rebuilds (add/remove node)
- depsgraph can also tag itself invalid, so it rebuilds on first use.
- py calls should not force animation updates ever btw.

JP:
- explain why you need so many constraints?
- please next time use the bf-animsys list.

-Ton-

--------------------------------------------------------
Ton Roosendaal  -  ton at blender.org   -   www.blender.org
Chairman Blender Foundation - Producer Blender Institute
Entrepotdok 57A  -  1018AD Amsterdam  -  The Netherlands



On 15 Mar, 2015, at 23:03, Bastien Montagne wrote:

> Time explode because until you assign a target, the constraint is invalid (and hence, disabled), so update process is shorter, I guess.
> 
> Actually, you could try to set constraints' targets in an ultimate, separated pass, this could makes things a bit quicker…
> 
> Le 15/03/2015 22:21, Juan Pablo Bouza a écrit :
>> Thanks for the reply Mont!
>> 
>> Yes, I didn't know about the TIMEIT thing, but I tried adding cProfile in every line, hehe. I got the same result as you did, it started in 0.000 and it increased up to 0.025 seconds.... so for the 80k lines of code, that's a big problem.
>> 
>> About the amount of constraints, they are about 4000.
>> 
>> To add a little bit more of info, the other day with slikdigit, we tried object unlink, then add the constraint, then object link, but it was the same. I also tried running the script with the armature in a layer that was not visible, but again, no change.
>> 
>> One thing I do notice is that if I add only the constraints with their names, targets and the slider influence, it takes only 20 seconds. Once the constraints are added, if you start filling in their options, timing is about 0.004 seconds per line, and then it starts increasing and increasing. So my question, if it is of any help, is... why does performance decrease when you start adding info to the constraints, when the constraints are already added. If the 4000 constraints are already present, why does performance decrease with each option you fill in? shouldn't it take a constant amount of time per line, let's say 0.004 seconds, as it updates 4000 constraints each time? What difference does it make that constraints have options in them or not?
>> 
>> This rig doesn't have many more constraints than rigify for instance, I wonder why rigify loads in 20 seconds, and my rig in 20 minutes :D
>> 
>> 2015-03-15 16:55 GMT-03:00 Bastien Montagne <montagne29 at wanadoo.fr>:
>> Hi Pablo,
>> 
>> Issue is actually quite simple, a simple TIMEIT in C code handling constraints update callback (ED_object_constraint_update()) shows that *at the beginning* each run takes about 0.1ms (on my machine)… After only ten constraints have been added, we are already at 0.3ms - imagine what it becomes after 20k constraints!
>> 
>> There is nothing you can do from python side (at least, I see nothing).
>> 
>> Campbell, Sergey, this is a bit similar to issue we have with adding tens of thousands of objects in a scene from py - update callbacks ran on each and every step end up taking way too much time. Seems like time to think about a way to disable (temporarily) updates from python? Though this could be tricky, guess we'd need some kind of 'stack' to stash all pending updates… :/
>> 
>> Or maybe it’s just that constraints update (especially for bones/armatures) are doing way too much things, things that should be deferred to actual DAG execution?
>> 
>> Le 15/03/2015 18:19, Juan Pablo Bouza a écrit :
>> 
>> Hi guys!
>> 
>> After 2 weeks of work and a lot of learning I've successfully managed to translate every single                   component of my rig into python.
>> 
>> My idea is to finally be able to release BlenRig as an addon, so I needed to be able to create the rig in a procedural way with python, in order for the user to just press a button and make the rig appear.
>> 
>> What I did was to create a rig parser that translates everything into python, some of the benefits I find by doing this are:
>> 
>> 1) Being able to update the addon rig by just modifying my rig in blender and then running the rig parser over it (so no need to manually update the python code for creating the rig).
>> 2) Being able to easily add more rig types, like male, female, quadruped, different setups for face rigs, etc
>> 3) Being able to eventually create a system where you can add more limbs, heads and other stuff to the rig by just parsing the body parts.
>> 4) Being able to release BlenRig-Vehicles, with a whole feature set for cars and motorcycles I did for Kiribati.
>> 
>> With that said, I've found a really disturbing bottleneck in the creation of constraints. Ideasman told me to use cProfile, but I wasn't able to figure out how to use it more than for obtaining the overall time of execution (you know I'm a programming ignorant :))
>> 
>> Well, I'm attaching a blend with the rig in it and a script called "add_bone_constraints.py" in it. On my i7 computer, the whole process of adding the constraints take 20 minutes!!!!!!!!!
>> 
>> The code is pretty basic as you will see... I can't do much more. But well, constraints are the only bottleneck I found, cause creating the whole bone rig, adding bone properties, ID properties, custom bone shapes and drivers, are all operations that take less than a second...
>> 
>> >From some tests I did, I noticed that only creating the constraints doesn't take long, 3 seconds or so. The problem comes when you start adding the different constraint options and parameters. I don't really know what blender is doing here, maybe you find some kind of refresh bug, or maybe you'll be able to give me a magical line of code that will increase speed! :D
>> 
>> Just in case you want to see where my constraint code comes from, in the blend file I also included a script called "parse_bone_constraints.py". If you run it on the armature that is in Layer 10, you'll obtain the lines for constraints creation.
>> 
>> Well, I hope someone can help me out with this, I'm not in a big hurry, as I have a couple of months ahead before I can do a proper release, but addressing this early show stopper would be ideal :)
>> 
>> Cheers! And sorry for the inconvenience!
>> 
>> 
> 




More information about the Bf-animsys mailing list