Resultados 1 al 2 de 2

Sacar rotación de un hueso con IK

  1. #1
    Fecha de ingreso
    Sep 2008
    Mensajes
    186

    Blender Sacar rotación de un hueso con IK

    Muy buenas, a ver si alguien me puede ayudar. Estoy intentando sacar la rotación de un hueso en una cadena IK en Blender 2.5.4.

    De un hueso en cadena FK no tengo problema.

    Bpy, data, objects[armature].pose, Bones[bone.001].rotation_cuaternión.

    Así me da la rotación y la puedo copiar a otro hueso en FK, pero el problema me viene en que esto no funciona en una cadena IK.
    ¿Cómo podría sacar la matriz de rotación o lo que sea del hueso en la cadena IK? Gracias de antemano.

  2. #2
    Fecha de ingreso
    Dec 2025
    Mensajes
    0
    Para obtener la rotación de un hueso controlado por IK en Blender, necesitas acceder a su matriz de pose después de que las dependencias (como el solver IK) hayan sido evaluadas. En versiones actuales de Blender (como la serie 4.x), el proceso es conceptualmente similar pero más robusto.

    Primero, debes asegurarte de que el contexto de la pose está actualizado. Para ello, debes evaluar la dependencia del objeto armadura en la escena. Esto se hace obteniendo la versión evaluada del objeto a través del evaluador de dependencias (Depsgraph). La rotación en IK no se almacena directamente en la propiedad rotation_quaternion del hueso en pose hasta después de esta evaluación.

    Aquí está el método principal. Necesitas obtener el objeto de armadura evaluado. Usa bpy.context.depsgraph para esto. Por ejemplo: depsgraph = bpy.context.evaluated_depsgraph_get() y luego armadura_evaluada = objeto_armadura.evaluated_get(depsgraph). Esto te da una copia de la armadura con todos los modificadores y constrains (como IK) aplicados.

    Luego, accede a los huesos de pose desde esta armadura evaluada. La ruta sería algo como: armadura_evaluada.pose.bones[tu_hueso].matrix_basis. De esta matriz, puedes extraer la rotación como cuaternión, Euler o lo que necesites. Por ejemplo, para obtener un cuaternión: rot_quat = armadura_evaluada.pose.bones[tu_hueso].matrix_basis.to_quaternion().

    Es crucial usar el hueso desde la armadura evaluada, no desde el objeto original. El objeto original (bpy.data.objects) no refleja el estado tras la solución IK a menos que se actualice el contexto. Este método funciona para huesos en cadenas IK, FK o bajo cualquier constraint.

    Para un script concreto, dentro de un operador o en la consola Python, la estructura básica sería crear o obtener el depsgraph, luego la armadura evaluada, y luego consultar la matriz del hueso específico. Recuerda que el nombre del hueso debe ser una cadena de texto correcta.

    Si necesitas la rotación en el espacio mundial, usa matrix en lugar de matrix_basis. La propiedad matrix_basis da la transformación relativa al hueso padre en la pose, mientras que matrix da la transformación en espacio mundial. Elige según dónde quieras aplicar después esa rotación.

Temas similares

  1. 3ds Max Segmentos de un hueso de armature
    Por rgisbert en el foro Animación y Rigging
    Respuestas: 4
    : 05-08-2018, 12:33
  2. Problema con armado de hueso
    Por Gabriel_Arg en el foro Programas de Diseño 3D y CAD
    Respuestas: 4
    : 15-01-2011, 00:44
  3. 3ds Max Cómo eliminar un hueso del bípedo y como desplazar un hueso del bípedo
    Por franki-max en el foro Animación y Rigging
    Respuestas: 7
    : 05-12-2009, 03:55
  4. 3ds Max Rotación parcial de un hueso con respecto a otro
    Por mcapu en el foro Animación y Rigging
    Respuestas: 2
    : 09-07-2008, 15:18
  5. 3ds Max ¿Los huesos de la rodilla deben animarse manualmente o siguen al resto de
    Por cartooon10 en el foro Animación y Rigging
    Respuestas: 12
    : 25-03-2006, 17:33