- Rafafouille
Scripts python en retard d'une image ?
Lun 14 Oct - 21:27
Re-bonjour,
En train de bosser sur une animation (toujours la même depuis mes 2 derniers posts), j'utilise un script Python qui met à jour la position d'une armature à chaque image, à partir de calculs plus ou moins complexes.
En gros : l'armature s'adapte à la position d'un autre objet aux alentours (donc mon script s'appuie sur les coordonnées d'un autre objet pour savoir comment déformer l'armature)
Pour ce faire, je passe par la fonction bpy.app.handlers.frame_change_post (également testé avec la fonction bpy.app.handlers.frame_change_pre)
En soit, mon script fonctionne, mais l'armature semble avoir une image de retard.
D'où ma question : y a-t-il une image de retard entre le moment où un script change des paramètres, et le moment où ça apparait à l'écran ? Faut-il faire une mise à jour de quelque chose pour que la modification soit prise en compte à la bonne image courante ? (J'ai utilisé depsgraph.update(), mais sans véritablement comprendre à quoi ça sert.)
Merci d'avance pour vos conseils.
En train de bosser sur une animation (toujours la même depuis mes 2 derniers posts), j'utilise un script Python qui met à jour la position d'une armature à chaque image, à partir de calculs plus ou moins complexes.
En gros : l'armature s'adapte à la position d'un autre objet aux alentours (donc mon script s'appuie sur les coordonnées d'un autre objet pour savoir comment déformer l'armature)
Pour ce faire, je passe par la fonction bpy.app.handlers.frame_change_post (également testé avec la fonction bpy.app.handlers.frame_change_pre)
En soit, mon script fonctionne, mais l'armature semble avoir une image de retard.
D'où ma question : y a-t-il une image de retard entre le moment où un script change des paramètres, et le moment où ça apparait à l'écran ? Faut-il faire une mise à jour de quelque chose pour que la modification soit prise en compte à la bonne image courante ? (J'ai utilisé depsgraph.update(), mais sans véritablement comprendre à quoi ça sert.)
Merci d'avance pour vos conseils.
- Redstar
- Localisation : Belgique
Re: Scripts python en retard d'une image ?
Ven 15 Nov - 11:17
Bonjour Rafafouille,
Dans l'optique que ça puisse aider quelqu'un d'autre.
Dans l'optique que ça puisse aider quelqu'un d'autre.
- Pistes à explorer:
Quand on utilise bpy.app.handlers.frame_change_post ou frame_change_pre pour mettre à jour des objets ou des armatures en Python, il peut effectivement se produire un décalage d’une image, surtout avec des calculs basés sur les coordonnées d'autres objets. Ce problème vient souvent de la façon dont Blender gère la mise à jour de la scène et des dépendances entre les objets.
Voici quelques pistes pour résoudre ce décalage d'image :
Vérifiez l’ordre de mise à jour dans le graphique de dépendance (depsgraph) : Blender utilise un graphique de dépendance (depsgraph) pour gérer l'ordre de calcul des transformations et des modifications dans la scène. L'appel à depsgraph.update() peut être utile, mais il ne garantit pas toujours que l'armature est mise à jour exactement au bon moment. Il peut être préférable de s'assurer que votre script est correctement ordonné pour éviter ce retard.
Forcez l'actualisation de l'armature : Après avoir modifié la position ou les transformations d'une armature, vous pouvez essayer de forcer l'actualisation de celle-ci avec armature_object.update_tag() suivi de bpy.context.view_layer.update(). Cela peut aider à synchroniser les transformations.
Utilisez les matrices de transformation directement : Si possible, évitez d'utiliser des objets comme référence pour la transformation et utilisez plutôt leurs matrices de transformation (matrix_world ou matrix_basis). Cela peut parfois contourner le problème de latence, car les matrices sont souvent mises à jour directement.
Évitez les calculs dépendant d'objets animés dans le même handler : Parfois, il est utile de calculer les coordonnées de l'objet référent avant le frame change handler, dans une variable temporaire. Cela évite les dépendances circulaires qui peuvent entraîner des décalages d'images.
Utilisez une frame offset si nécessaire : Si malgré tout l'armature reste décalée d’une image, vous pouvez tester en ajoutant un léger décalage de frame dans vos calculs, même si ce n'est qu’une solution temporaire.
Un exemple de code pour forcer l'actualisation pourrait ressembler à ceci :
- Code:
import bpy
def update_armature(scene):
target_object = bpy.data.objects["NomDeVotreObjet"]
armature_object = bpy.data.objects["NomDeVotreArmature"]
# Mise à jour de la position de l'armature en fonction de l'objet cible
armature_object.location = target_object.location
# Force l'actualisation de l'armature
armature_object.update_tag()
bpy.context.view_layer.update()
bpy.app.handlers.frame_change_post.clear()
bpy.app.handlers.frame_change_post.append(update_armature)
Rafafouille aime ce message
- Rafafouille
Re: Scripts python en retard d'une image ?
Ven 15 Nov - 12:17
Merci pour toutes ces pistes !
Il y a tellement de choses à prendre en compte que c'est bien d'avoir un résumé comme celui-ci.
bon, j'avais déjà compilé ma vidéo. Si vous voulez la voir, elle est là :
.
Mais je la re-ferai à l'occasion, avec ces conseils.
Merci encore !
Il y a tellement de choses à prendre en compte que c'est bien d'avoir un résumé comme celui-ci.
bon, j'avais déjà compilé ma vidéo. Si vous voulez la voir, elle est là :
.
Mais je la re-ferai à l'occasion, avec ces conseils.
Merci encore !
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum