Cet article est l'article du 7ème jour de ** Maya Advent Calender 2019 **.
Lorsque vous créez un outil de modélisation dans Maya, vous pouvez obtenir la position du sommet de l'objet sélectionné. Cependant, dans un modèle avec un grand nombre de sommets, il est lent d'acquérir toutes les positions de sommets avec ** MEL ** ou ** cmds **, ce qui est un niveau qui gêne le travail de modélisation. ** Open Maya ** est souvent présenté comme un moyen d'augmenter la vitesse de traitement, mais c'est un seuil élevé pour moi, et je me demandais s'il y avait un moyen d'augmenter la vitesse de traitement avec ** cmds **.
J'écrivais de cette façon.
from maya import cmds
sel_obj = cmds.ls(sl=True)
verts = cmds.ls(sel_obj[0] + '.vtx[*]', fl=True)
vert_pos = [cmds.xform(vert, t=True, ws=True, q=True) for vert in verts]
Cependant, si vous l'obtenez de cette manière, cela prendra beaucoup de temps si l'objet a de nombreux sommets.
Tout d'abord, créez une très belle sphère avec ** Axe de subdivisions ** et ** Hauteur de subdivisions ** dans la scène, toutes deux ** 200 **.
Le nombre de sommets est ** 39802 **.
Sélectionnez cette sphère et mesurez le script ci-dessus en utilisant le module de temps de Python.
Cela a pris environ 2 secondes. À cette vitesse, le travail de modélisation sera entravé.
from maya import cmds
sel_obj = cmds.ls(sl=True)
verts = cmds.ls(sel_obj[0] + '.vtx[*]')
vert_pos = cmds.xform(verts, t=True, ws=True, q=True)
L'indicateur ** fl ** de la commande ** ls ** est supprimé et la liste des sommets acquis est collectivement donnée à l'argument de ** xform **. Maintenant, mesurons à nouveau la vitesse de traitement.
** Environ 0,06 seconde! C'est environ 33 fois plus rapide. ** **
Cependant, en regardant les valeurs renvoyées, il s'agit d'un tableau unidimensionnel, donc pour renvoyer les mêmes valeurs que lors du traitement avec for, il est nécessaire d'ajouter le code suivant et de le remplacer par un tableau bidimensionnel pour chaque XYZ.
vert_pos = [vert_pos[i:i + 3] for i in range(0, len(vert_pos), 3)]
Comme mentionné ci-dessus, il s'agissait d'une méthode pour augmenter la vitesse de traitement de l'acquisition de la position des sommets.
C'est un tout petit article, mais c'était une découverte pour moi, alors je l'ai écrit. Maya a une fonction qui peut prendre une telle liste comme argument, et cela peut être beaucoup plus rapide que le traitement avec for, ou cela peut être plus rapide en éliminant la duplication lors de la fourniture d'une liste.
Autant que je sache, je ne peux pas voir si l'argument peut être répertorié dans la documentation officielle, c'est donc un problème de le tester ...
Si vous avez des erreurs ou des points peu clairs dans l'article, je vous serais reconnaissant de bien vouloir les noter. Jusqu'à la fin Merci d'avoir lu.
Recommended Posts