Foros 3DPoder.  

Bienvenido a Foros 3DPoder..

Usted esta viendo este foro como invitado, no esta registrado todavía, lo que limita su visión del foro. Si quiere unirse gratis a la mayor comunidad del diseño gráfico de habla hispana, tener acceso a publicar y responder mensajes, tener mensajes privados con otros miembros(PM), responder encuestas, publicar sus imágenes para que las vea el resto del mundo, tener acceso a los video_tutoriales, y muchas cosas más, no lo dude. Registrarse es rápido, simple y gratuito, agregate hoy a la mayor comunidad 3D de habla hispana! !

Si usted tiene algún problema con su registro, por favor , díganoslo aquí. 3d




Retroceder   Foros 3DPoder. > :: Infografia y diseño grafico. > Script
Foro3D Galeria Privada Video3D Blueprints Software Blog3DPoder Buscar Empleo Donaciones


Respuesta
 
LinkBack Herramientas Buscar en Tema
Antiguo 30 abr 2008   #1 (enlace permanente)
Administrador
 
Avatar de SHAZAM
 
Fecha de Ingreso: abril-2002
Ubicación: 28.10º N 15.43º W in a blue planet.
Mensajes: 16,468
Blender Baking actions

Script para "bakear" actions, escrito por Vladius para Blender:
(Viene de este hilo)

Código:
#!BPY
"""
Name: 'Bake Active Action'
Blender: 242a
Group: 'Object'
Tooltip: 'Bake constraints to action keys.'
"""
 
__author__ = "vladius"
__url__ = ["vladius.fanatic.ru"]
__version__ = "1.0"
 
__bpydoc__ = """\
"Action Bake let's you bake the current object action's constraints to normal action keys.
 
Usage:
 
Select an object with an active action, and select Bake Active Action from the Object->Scripts
menu of the 3d View.
"""


from Blender import *
from Blender import Types
import sys

def invertMatrix(mtx):
    mtxi= Mathutils.Matrix(mtx)
    mtxi.invert()
    return mtxi

POSE_XFORM= [Object.Pose.LOC,Object.Pose.ROT]



def bakeAction(action,armatureObject):
    """
        Bakes supplied action for supplied armature.
        Returns baked action.
    """
    pose=armatureObject.getPose()
    armature_data=armatureObject.getData();
    pose_bones= pose.bones.values()
    rest_bones= armature_data.bones
 
    
    startFrame= min(action.getFrameNumbers());
    endFrame= max(action.getFrameNumbers());
        
    baked_action = Armature.NLA.NewAction("baked_"+action.getName())

    
    old_quats={}
    old_locs={}
    
    baked_locs={}
    baked_quats={}
    
    action.setActive(armatureObject)
    for current_frame in xrange(startFrame, endFrame+1):
        Redraw()
        
        Set('curframe', current_frame)
        
        for i in range(len(pose_bones)):
            
            bone_name=pose_bones[i].name;

                
                
            rest_bone=rest_bones[bone_name]
            matrix=Mathutils.Matrix(pose_bones[i].poseMatrix)
                #print "pose matrix\n", matrix
            rest_matrix=Mathutils.Matrix(rest_bone.matrix['ARMATURESPACE'])
               #print "rest matrix\n", rest_matrix
            
            parent_bone=rest_bone.parent

            print "Frame:", current_frame
                

            if parent_bone:
                parent_pose_bone=pose.bones[parent_bone.name]
                matrix=matrix*invertMatrix(parent_pose_bone.poseMatrix)
                rest_matrix=rest_matrix*invertMatrix(parent_bone.matrix['ARMATURESPACE'])
            
                #print "before\n", matrix
            print "before quat\n", pose_bones[i].quat;
                
                #print "localised pose matrix\n", matrix
                #print "localised rest matrix\n", rest_matrix
            matrix=matrix*invertMatrix(rest_matrix)
                
                
            old_quats[bone_name]=Mathutils.Quaternion(pose_bones[i].quat);
            old_locs[bone_name]=Mathutils.Vector(pose_bones[i].loc);
                
               
            
            baked_locs[bone_name]=Mathutils.Vector(matrix.translationPart())
            baked_quats[bone_name]=Mathutils.Quaternion(matrix.toQuat())

        baked_action.setActive(armatureObject)
        Set('curframe', current_frame)
        for i in range(len(pose_bones)):
            pose_bones[i].quat=baked_quats[pose_bones[i].name]
            pose_bones[i].loc=baked_locs[pose_bones[i].name]
            pose_bones[i].insertKey(armatureObject, current_frame, POSE_XFORM)
            
        action.setActive(armatureObject)
        Set('curframe', current_frame)

        for name, quat in old_quats.iteritems():
            pose.bones[name].quat=quat
            
        for name, loc in old_locs.iteritems():
            pose.bones[name].loc=loc
            
        
    pose.update()
    return baked_action

def main():
    '''
    Main script driver
    '''    
    # Get current scene
    scene= Scene.GetCurrent()
    # Get current object(must be armature)
    armatureObject= scene.getActiveObject()
    if armatureObject.getType()!='Armature':
        print "Select armature first."
        return
    
    # Get current pose
    
    
    
    """
    for i in range(len(pose_bones)):
        print rest_bones.values()[i].name
        print "head(arm) ", rest_bones.values()[i].head['ARMATURESPACE']
        print "tail(arm) ", rest_bones.values()[i].tail['ARMATURESPACE']
        print "roll(arm) ", rest_bones.values()[i].roll['ARMATURESPACE']
        print "head(bone) ", rest_bones.values()[i].head['BONESPACE']
        print "tail(bone) ", rest_bones.values()[i].tail['BONESPACE']
        print "roll(bone) ", rest_bones.values()[i].roll['BONESPACE']
        print "armature-space\n", rest_bones.values()[i].matrix['ARMATURESPACE']
        print "bone-space\n", rest_bones.values()[i].matrix['BONESPACE']
    """
    
    """
    for i in range(len(pose_bones)):
        print pose_bones[i].name
        print "pose matrix\n", pose_bones[i].poseMatrix
    """
    """
    print "Starting to bake actions"
    actions = Armature.NLA.GetActions()
        
    for action_name, action in actions.iteritems():
        bakeAction(action,pose_bones,rest_bones)
    """
    
    action=armatureObject.getAction()
    
    bakeAction(action,armatureObject)
    


if __name__=="__main__":
    #import rpdb2; rpdb2.start_embedded_debugger("password",True)
    main()
__________________
Obtén enseñanza tradicional en arte y cine. Los ordenadores solo son herramientas. Ellos no pueden tomar decisiones creativas, y solo pueden crear trabajos tan buenos como tus conocimientos y tu experiencia les permita.
Victor Navone
SHAZAM is offline   Responder Con Cita
Respuesta



Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada

Normas de Publicación
Usted no puede publicar nuevos mensajes.
Usted no puede responder mensajes
Usted no puede publicar archivos adjuntos
Usted no puede editar sus mensajes

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks estan habilitado
Pingbacks estan habilitado
Refbacks are habilitado

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Baking con Vray para arquitectura ZerO_SelF_RighTeousNesS Materiales y Texturizado 4 07 may 2008 20:07
¿Donde se ha ido el action baking? Klópes Problemas con Programas 11 02 may 2008 06:26
Blender cada ves mejor vleda Noticias 9 01 mar 2008 18:02
Baking: grabar imágenes generadas Klópes Render, Iluminación y Cámaras 5 29 ene 2008 09:08
Me lio con el DopeSheet y las "poses"???? devnul Problemas con Programas 41 18 ago 2005 16:38

google adsense



La franja horaria es GMT. Ahora son las 21:34.


Powered by: vBulletin, para 3DPoder.com Versión 3.7.0 Beta 4
Derechos de Autor ©2000 - 2008, Jelsoft Enterprises Ltd.
3DPoder.com Foro3d.com © Al servicio de la infografia y el 3D desde 1997.
Mortgage | Car Insurance | Encyclopaedia | Personal Injury Lawyer Los Angeles | Secured Loans
Search Engine Friendly URLs by vBSEO 3.1.0