Thank you very much for that.
I will try it and maybe it will do the trick.
I wonder however if it updates objects when their matrices depend on other objects not included in selection (parenting, constraints, etc).
Anyway, thank you very much, I'll see if it improves anything.


Bartek Skorupa

www.bartekskorupa.com



On 2012-01-21, at 11:54, Campbell Barton wrote:

frame_set() updates all layers of the scene which I expect is the problem here,

there could be an optional argument to pass a layer list to
frame_set()  but this doesn't necessarily help if the current scene
layers are not setup efficiently.

looking into this you could update only the objects you want like this...

# objects to update
objects = bpy.context.selected_objects
scene = bpy.context.scene
start = scene.frame_start
end = scene.frame_end
for frame in range (start, end + 1):
   scene.frame_current = frame
   for obj in objects:
       obj.update_tag(refresh={'OBJECT'})  # 'DATA' too if you care
about geometry
   scene.update()
   '''
   .... all the magic that needs data for each frame ....
   '''


On Sat, Jan 21, 2012 at 7:56 PM, Bartek Skorupa
<bartekskor...@bartekskorupa.com> wrote:
1. Take any scene that plays back 1 frame per second or so. (I can't
upload any example now, but I'm sure everybody has such scene
somewhere). Many objects (2000?, 3000?), constraints, shapekeys,
armatures, curves etc.
2. No matter if the layers are active or not, no matter what the draw
mode is etc - it is slow. I can place all of my obs in layer 2,
activate only empty layer 1, and it doesn't influence the speed.
3. Even if frame_set() is as fast as playback - I'm not happy. 250
frames - 1 frame per second = 250sec. = 4 minutes. Who wants to wait 4
minutes?

Bartek Skorupa

www.bartekskorupa.com


On 2012-01-21, at 00:58, Campbell Barton wrote:

Hi Bartek,

Would you be able to upload a test scene which is unusably slow?
can't see why this would be any slower then playing back the animation
(if anything should be faster since it doesn't have to draw).

On Sat, Jan 21, 2012 at 9:58 AM, Bartek Skorupa
<bartekskor...@bartekskorupa.com> wrote:
Hi,

I'd like to draw your attention to frame_set(i) method.
In many scripts we have to refresh the scene several times, sometimes we need to collect some data for every frame in the whole animation.
In such cases the only way I know in blender's python is to set the
frame using bpy.context.scene.frame_set(frame)
Almost every exporter that base on baking the data and exporting them
as "keyframe for every frame" use this kind of loop:

start = bpy.context.scene.frame_start
end = bpy.context.scene.frame_end
for frame in range (start, end + 1):
    bpy.context.scene.frame_set(frame)
    '''
    .... all the magic that needs data for each frame ....
    '''

My exporter to Adobe After Effects (io_export_after_effects.py) does
exactly the same.

The issue here is that setting the frame sometimes takes ages.
I was once advised to use bpy.context.frame_current = frame
Well... It's very fast, but doesn't do the trick. It sets the frame, but doesn't update the scene and in most cases - this is what we want
- We want to have our scene refreshed for every frame.

bpy.context.scene.frame_set(frame) method is so slow, that many
exporters become almost useless or if not useless - very badly
perceived because of their performance.
The process of simple export to After Effects can sometimes take
several minutes and this is definitely not the performance we are
looking for.
I looked through many existing exporters and they all use this
method,
so I suppose I'm not the only one facing "frame_set" speed issue.
Does anyone know other method to achieve refreshing the scene for
every frame, but not that slow?

Isn't this performance a bug of some kind?

I'd appreciate any help.

Cheers,
Bartek Skorupa

www.bartekskorupa.com

_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers



--
- Campbell
_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers

_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers



--
- Campbell
_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers

_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers

Reply via email to