dimanche 5 août 2012

maya python vector

    Salut salut.
Je cherchais comment avoir la distance entre deux vertex quand je me suis rendu compte que dans python on travail pas avec des vecteurs, on fait tout avec les listes et les tuples. Alors que en Mel on a bien des variables de types vector:
vector $vect1 = <<0,1,0>>;
vector $vect2 = <<1,3,0>>;
vector $vect3 = $vect1 + $vect2;
// Result: <<1, 4, 0>>  // 


Alors comment faire la même chose en python dans maya ? En utilisant l'API et la class MVector, au passage voici le script qui permet d'avoir le vecteur distance entre deux vertex:
import maya.cmds as m
import maya.OpenMaya as om

vX = m.pointPosition("pCube1.vtx[2]")
vX = m.pointPosition("pCube1.vtx[3]")

vXx = om.MVector(vX[0], vX[1], vX[2])
vYy = om.MVector(vY[0], vY[1], vY[2])

vZz =  vYy - vXx

print vZz.x
print vZz.y
print vZz.z


English version:

jeudi 2 août 2012

bake animation nParticle on locators


    Ici mon objectif est de faire une simulation avec nParticles et d'y instancier un petit rig de sphere, première étape: faire la simu avec des nParticles Ball de mm taille que les spheres finals, deuxième étapes: récupérer les position de chaque particule a chaque image, troisième étapes: réattribuer ces positions a des locators (aussi nombreux que les particles) et pour finir parenter les rigs (ou autre node non simulable), dupliqué en bon nombre, aux locators.

En image:


pph264 from colin laubry on Vimeo.

et voici le script que j'ai du écrire pour faire tout cela.

#recuperation de la derniere image
endFrame = cmds.playbackOptions(q = True, maxTime = True)

#recuperation de la premiere image
startFrame = cmds.playbackOptions(q = True, minTime = True)

#recuperation de la selection, dans l'ordre nParticle Instance de base
sel = cmds.ls(sl = True)
part = sel[0]
inst = sel[1]

#nom des futurs instances dupliques
new = ("newInstance_"+part+"_")

#alignement et freeze de l'instance de base
cmds.pointConstraint(part, inst, mo = False)
cmds.pointConstraint(part, inst, rm = True)
cmds.makeIdentity(inst, apply=True, t=1, r=1, s=1, n=0)

#pour chaque frame
for i in range(startFrame, endFrame):
    #deplacement du curseur de la timeline
    cmds.currentTime(i)
    #recuperation du nombre de particles
    nPart = cmds.nParticle(part, ct = True, q = True )
    print i
    #pour chaque particle
    for j in range(1, nPart+1):
        #test de l'existence pour pas dupliquer a chaque frame
        if cmds.objExists((new+str(j))) == 0:
            #duplication de linstance de base
            dup = cmds.duplicate(inst, n = (new+str(j)))
        #recuperation de la position de chaque particle
        posPP = cmds.nParticle(part, at = 'position', id = j, q = True )
        #Attribution de la position a linstance duplique
        cmds.setAttr((new+str(j)+".tx"), posPP[0])
        cmds.setAttr((new+str(j)+".ty"), posPP[1])
        cmds.setAttr((new+str(j)+".tz"), posPP[2])
        #creation de keyframe
        cmds.setKeyframe(new+str(j)+".tx")
        cmds.setKeyframe(new+str(j)+".ty")
        cmds.setKeyframe(new+str(j)+".tz")


English Version:

Pendant ce temps-lá chez FrameStudio ...



...ca tremble !



fr expression from colin laubry on Vimeo.

Pour faire ceci j'ai du me remettre en peu au mel et creer une expression noise sur chaque petit cube qui forme le gros cube. Qui de bien fou, juste une petit subtilité que j'ai découvert pour tester l'existence d'un object:

if ( `objExists $nomTest` ) {}

Voici l'expression en entiere:




//interrupteur attr
float $of = `getAttr "nurbsCircle1.onOff"`;
//boucle pour chaque petit cube
for ( $i=1; $i<99; ++$i ){
 //nom des petits cubes
 string $cu = "pCube" + $i;
 //test existence du nom
 if ( `objExists $cu` ) {
  //random value
  float $ra = `rand 1 3`;
    
     float $ran = 1+((noise(time)*$ra)/10)*$of;
    
  //application au scale
      scale -a $ran $ran $ran $cu;

  }

 else{
 //rien mm pas un string ca evite les ralentissements
 }
  
    
}





Pour le reste, j'ai ajouté trois wave deformer sur le gros cube pour avoir ce "flottement", Pour la spherification j'ai utilisé le sculpt deformer.

dimanche 15 juillet 2012

Bug maya python

Et voila un petit report de bug python maya.  J’étais tranquille entrain de faire un light lister quand je suis tombé sur ca:
sel = cmds.ls(type = 'pointLight')
cmds.select(sel)


Quand Maya exécute ces deux lignes de codes il sélectionne aussi les volumes light, Pas très pratique pour light lister encore plus pour un light lister qui liste par type de light.

C'est fou, avec la fonction:
   cmds.ls() 
Maya distingue pas la différence entre les point et les volumes light. Le truc lolilol c'est que pour contourner le problème j'ai simplement eu besoin de faire une condition par type.
    sel = cmds.ls(type = 'pointLight')
    lss = []
    for i  in sel:
        if cmds.nodeType(i) == 'pointLight':
            lss.append(i)
    cmds.select(lss)


vendredi 13 juillet 2012

Bake vertex


Et VOILA mon dernier né:
un script qui bake un mesh par les vertex, qui enregistre les info en une séquence de fichiers et qui peut baker a partir de cette séquence de fichiers.

Ce script qui n'est pas fou m'a quand même permis d'approfondir le système de class et de découvrir le cPickle qui permet d’écrire des données (list, dict, fonction ...) en binaire ou en ASCII sur un fichier. L'avantage, je suppose, est certainement sur des traitement de donnée en masse, mais je trouve que sa création de fichier I/O est quand même plus simple que en passant par les fonctions file.

Le seul problème c'est qu'il est assez lent  quand il rencontre un très grands nombres de vertex, c'est du a la lenteur de la fonction xform. J'ai cru comprendre que en passant par l' API de maya j'aurais de meilleurs performances mais je n'ai pas encore plongé le nez dans l'API donc pour l'instant je garde ma fonction xform a deux balles.

Si ça intéresse, une fois qu'il sera "bullet proof"je le mettrais a disposition en téléchargement.

Petite vidéo de présentation:



bakescript from colin laubry on Vimeo.

Pendant ce temps-lá chez FrameStudio

Explosion de papier trop cool:
    -ground rigging
    -blendshape
    -particles
    -rigidbody



FR Shot04 anim v26 CL from colin laubry on Vimeo.

    La vrai première fois que je fais des fx dans maya et ben les particles c'est le bordel, il n'y a même pas de mesher, la loose, j'ai du adapter un script trouvé sur le net mondial. Je précise que c'est les vieilles particles pas les nParticles.
    Pour les simu physique sa marche bien et c'est rapide.

L'anim des bonhomme, c'est Fanny.b.