Problema con Transformation Constraint en Blender al conectar con múltiples Vertex

Sumatra - 10/06/2021 22:51
¡Hola!

Tengo un pequeño problema en Blender con el que me he quedado atascado a la hora de escribir un código sencillo.

Tengo un grid llamado "Template" con 577 grupos de vértices y, por otro lado, tengo 577 "empties". A todos estos "empties" les he asignado una restricción de transformación para conectarlos con cada grupo de vértices del objeto "Template"... o al menos eso pensaba.

Al mirar las propiedades de cualquiera de esas restricciones, veo que el grupo de vértices al que están conectados es siempre el mismo.

Lo que necesito es que la restricción de transformación de, por ejemplo, "Empty" tenga asignado el grupo de vértices "groupy.000" del objeto "Template".

Que la restricción de transformación de "Empty.001" tenga asignado el grupo de vértices "groupy.001" del objeto "Template".

Que la restricción de transformación de "Empty.002" tenga asignado el grupo de vértices "groupy.002" del objeto "Template".

Y así sucesivamente hasta llegar a que la restricción de transformación de "Empty.577" tenga asignado el grupo de vértices "groupy.577" del objeto "Template".

Obviamente, hacer esto a mano sería una tortura, pero no sé programar en Python.

Me pregunto si alguien que sepa del tema podría orientarme. Esto me suena como si alguien que sabe programar pudiera resolverlo en 2 minutos.

¿Alguna ayuda?
3dpoder - 12/04/2023 11:46
Puedes crear un script en Python que recorra cada "empty" y le asigne automáticamente la restricción de transformación correspondiente. Deberías utilizar un bucle que vaya desde el "empty" 0 hasta el 577, y dentro del bucle asignarle la restricción de transformación correspondiente.

Podría ser algo así, el siguiente código primero selecciona el objeto "Template" con los grupos de vértices, luego recorre todos los empties y les asigna la restricción de transformación correspondiente. Dentro del bucle, crea el nombre del empty correspondiente y lo selecciona, crea el nombre del grupo de vértices correspondiente y lo selecciona del objeto "Template", crea una nueva restricción de transformación en el empty seleccionado, y finalmente asigna el objeto "Template" como objetivo y el grupo de vértices correspondiente como subobjetivo de la restricción.

[CODE]import bpy

# Seleccionar el objeto "Template" con los grupos de vértices
template = bpy.data.objects["Template"]

# Recorrer todos los empties y asignarles la restricción de transformación correspondiente
for i in range(0, 577):
empty_name = "Empty." + str(i).zfill(3) # Crear el nombre del empty correspondiente
empty = bpy.data.objects[empty_name] # Seleccionar el empty correspondiente
vertex_group_name = "groupy." + str(i).zfill(3) # Crear el nombre del grupo de vértices correspondiente
vertex_group = template.vertex_groups[vertex_group_name] # Seleccionar el grupo de vértices correspondiente del objeto "Template"
constraint = empty.constraints.new(type='TRANSFORM') # Crear una nueva restricción de transformación en el empty
constraint.target = template # Asignar el objeto "Template" como objetivo de la restricción
constraint.subtarget = vertex_group_name # Asignar el grupo de vértices correspondiente como subobjetivo de la restricción
[/CODE]

"Copy Transform" en Blender

Otra forma de solucionar el problema sería utilizar la herramienta de "Copy Transform" en Blender, la cual te permite copiar la posición y rotación de un objeto a otro. Para utilizarla en tu caso, deberías seleccionar el objeto "Template", luego seleccionar el primer "empty", presionar Shift y seleccionar el último "empty", y luego presionar Ctrl+C para copiar la transformación. De esta forma, cada "empty" tendría la misma posición y rotación que el objeto "Template", y podrías ajustar cada restricción de transformación individualmente.

Vertex Weight Helper

Podrías utilizar un addon de Blender llamado "Vertex Weight Helper", el cual te permite asignar restricciones de transformación a grupos de vértices de forma más sencilla. Para utilizarlo, deberías seleccionar el objeto "Template", ir a la pestaña de "Vertex Groups" en el panel de propiedades, seleccionar el grupo de vértices que quieres asignar a un "empty", presionar el botón de "Copy Vertex Group", seleccionar el "empty" correspondiente y presionar el botón de "Paste Vertex Group". De esta forma, cada "empty" tendría la restricción de transformación correspondiente.