1 Archivos adjunto(s)
Necesito un script para bakear animación de bones manejados por constraints
Caronte: la teoría es tuya. Acabo de ver que en el caso que la malla tuviera algún shape key anterior no funcionaria. Aquí el addon modificado.
Archivo adjunto 146420
Solo tengo una duda con este script:
Bpy, data, shape_keys[key].key_blocks[:].
El nombre [key] del shape key es siempre el mismo o se modifica, o pueden haber varios nombres?
Porque está hecho en el supuesto que siempre se llame key.
-- IMÁGENES ADJUNTAS --
https://foro3d.com/attachment.php?attachmentid=146420
Necesito un script para bakear animación de bones manejados por constraints
Cita:
Acabo de ver que en el caso que la malla tuviera algún shape key anterior no funcionaria. Solo tengo una duda con este script:
Bpy, data, shape_keys[key].key_blocks[:].
El nombre [key] del shape key es siempre el mismo o se modifica, o pueden haber varios nombres?
Porque está hecho en el supuesto que siempre se llame key.
Si, key debe ser invariable. Pero no sé muy bien lo que quieres hacer con eso. Ten en cuenta que en Bpy, data, shape_keys están todas las shape keys (de todos los posibles objetos, no solo del que estamos procesando).
Edito: no, me equivoqué. Key se llama la del primer objeto, key.001 la segunda.
Necesito un script para bakear animación de bones manejados por constraints
Lo que quiero con eso es saber el número de shape keys que tiene en. Total el objeto seleccionado para pasar por todos los index y darle los.
Valores a los que yo quiera.
Con esto sabríamos el nombre del shape key del objeto seleccionado.
Bpy, context, active_objeto, active_shape_key, id_data, name.
Necesito un script para bakear animación de bones manejados por constraints
Acabo de darme cuenta de que este script además sirve para solucionar un gran problema al usar Motion Blur (imprescindible en producciones reales) con emparentamientos retardados (Slow parent).
Problema: el Mb tiene en cuenta el frame anterior para calcularse, por lo tanto cuando usamos Slow parent, el Mb no funciona bien o no lo hace en absoluto.
Solución: usamos este script para bakear la animación y. Listo.
Necesito un script para bakear animación de bones manejados por constraints
Cita:
Con esto sabríamos el nombre del shape key del objeto seleccionado. Bpy, context, active_objeto, active_shape_key, id_data, name.
Vaya, bien, con eso y key_blocks ya lo resuelves entonces.
Por cierto, mirando el código, veo que se recorren dos veces todas las frames.
Ya que las estas recoriendo una vez para aplicar el modificador, ¿por qué no aprovechas para recorrer las shape keys? salvo que haya algún detalle que se me escapa.
Me refiero a dejar el execute () tal que así:
Código:
Def execute (self, context):
Frame_antes = context, scene, frame_current.
Objeto = context, object.
For frame_idx in range (context, scene, frame_start, context, scene, frame_end +1, context, scene, frame_step):
Context, scene, frame_set(frame=frame_idx).
Modificadores = objeto, modifiers[:].
Bpy, ops, object, modifier_copy(modifier = self, candidato, name).
Nuevo_mod = (set(objeto, modifiers) - Set(modificadores)), pop().
Objeto, modifiers[nuevo_mod, name].name = bakebone.+str(frame_idx).
Bpy, ops, object, modifier_move_up(modifier=bakebone.+str(frame_idx)).
Bpy, ops, object, modifier_apply(apply_as =shape, modifier=bakebone.+str(frame_idx)).
For shape_idx in range (len(objeto, active_shape_key, id_data.key_blocks)):
Objeto, active_shape_key_index = shape_idx.
If objeto, active_shape_key, name == bakebone.+str(frame_idx):
Objeto, active_shape_key, value = 1.0.
Objeto, active_shape_key.keyframe_insert(value, frame = frame_idx).
Elif bakebone in objeto, active_shape_key, name:
Objeto, active_shape_key, value = 0.0.
Objeto, active_shape_key.keyframe_insert(value, frame = frame_idx).
Bpy, ops, object, modifier_remove (modifier = self, candidato, name).
Context, scene, frame_set(frame=frame_antes).
Return {finished}.
Necesito un script para bakear animación de bones manejados por constraints
Esto no funciona bien ahora: If objeto, active_shape_key, name == bakebone.+str(frame_idx): Objeto, active_shape_key, value = 1.0.
Objeto, active_shape_key.keyframe_insert(value, frame = frame_idx).
Elif bakebone in objeto, active_shape_key, name:
Objeto, active_shape_key, value = 0.0.
Objeto, active_shape_key.keyframe_insert(value, frame = frame_idx).
Pone a todas las shape las pone a 1.
Necesito un script para bakear animación de bones manejados por constraints
Claro, al principio del bucle habría que poner la Shape Key anterior a cero (índice-1), comprobando antes que no sea la primera vuelta del bucle porque si no intentara poner a cero una Shape Key inexistente (índice negativo).
Necesito un script para bakear animación de bones manejados por constraints
Así me funciona, me he hecho un lío, pero creo que funciona. Mañana lo mirare bien para asegurarme.
Código:
Def execute (self, context):
Frame_antes = context, scene, frame_current.
Objeto = context, object.
For frame_idx in range (context, scene, frame_start, context, scene, frame_end +1, context, scene, frame_step):
Context, scene, frame_set(frame=frame_idx).
Modificadores = objeto, modifiers[:].
Bpy, ops, object, modifier_copy(modifier = self, candidato, name).
Nuevo_mod = (set(objeto, modifiers) - Set(modificadores)), pop().
Objeto, modifiers[nuevo_mod, name].name = bakebone.+str(frame_idx).
Bpy, ops, object, modifier_move_up(modifier=bakebone.+str(frame_idx)).
Bpy, ops, object, modifier_apply(apply_as =shape, modifier=bakebone.+str(frame_idx)).
If len(objeto, active_shape_key, id_data.key_blocks)>2:
Objeto, active_shape_key_index = len(objeto, active_shape_key, id_data.key_blocks)-2.
Objeto, active_shape_key, value = 0.0.
Objeto, active_shape_key.keyframe_insert(value, frame = frame_idx).
For shape_idx in range (len(objeto, active_shape_key, id_data.key_blocks)):
Objeto, active_shape_key_index = shape_idx.
If objeto, active_shape_key, name == bakebone.+str(frame_idx):
If shape_idx>1:
Objeto, active_shape_key, value = 0.0.
Objeto, active_shape_key.keyframe_insert(value, frame = frame_idx-1).
Objeto, active_shape_key, value = 1.0.
Objeto, active_shape_key.keyframe_insert(value, frame = frame_idx).
Bpy, ops, object, modifier_remove (modifier = self, candidato, name).
Context, scene, frame_set(frame=frame_antes).
Return {finished}
1 Archivos adjunto(s)
Necesito un script para bakear animación de bones manejados por constraints
Vaya, si. Viendo el código inicial, está claro que quitando los bucles dejaba de tener sentido.
-- IMÁGENES ADJUNTAS --
https://foro3d.com/attachment.php?attachmentid=146556
Necesito un script para bakear animación de bones manejados por constraints
Si el objeto tiene shape_keys con keyframes no funciona, los shapes que tenía dejan de funcionar bien.
Necesito un script para bakear animación de bones manejados por constraints
Sí, para que te respetara los shape keys iniciales habría quehacer una primera pasada para copiarla y guardarse los valores, y en la siguiente en la que se le aplican los nuevos, sumar los valores de los anteriores.
Qué fácil es hablar.
1 Archivos adjunto(s)
Necesito un script para bakear animación de bones manejados por constraints
Creo que (otra vez, jaj) [size=7"]lo tengo: Salva los shape_keys anteriores, lo que no se bien es si funcionara bien con lo del Motion Blur que decía Caronte.
Bueno probarlo y ver si da algún problema.
Archivo adjunto 146630
-- IMÁGENES ADJUNTAS --
https://foro3d.com/attachment.php?attachmentid=146630