[PYTHON] Comment augmenter la vitesse de traitement de l'acquisition de la position des sommets

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 **.

Façon précédente d'écrire

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.

Essayez de mesurer la vitesse de traitement

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é.

Nouvelle façon d'écrire

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. ** **

Remplacer par une liste par XYZ

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)]

Résumé

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

Comment augmenter la vitesse de traitement de l'acquisition de la position des sommets
Comment augmenter l'axe
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
Considérez la vitesse de traitement pour déplacer le tampon d'image avec numpy.ndarray
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
Comment accélérer la belle instanciation de soupe
Comment vérifier la version de Django
[Python] Comment spécifier la position d'affichage de la fenêtre et la taille de matplotlib
Comment calculer la volatilité d'une marque
Comment trouver la zone du diagramme de Boronoi
À propos de la vitesse de traitement de SVM (SVC) de scikit-learn
Comment mesurer la vitesse de la ligne depuis le terminal
J'ai vérifié la vitesse de traitement de la numpy unidimensionnelle
Comment connaître le numéro de port du service xinetd
Comment obtenir le nombre de chiffres en Python
La décision de scikit-learn Comment visualiser un modèle en bois
[Blender] Comment définir dynamiquement les sélections EnumProperty
[Python] Résumé de la façon de spécifier la couleur de la figure
Comment frapper le document de Magic Function (Line Magic)
Comment accéder à la variable globale du module importé
[Selenium] Comment spécifier le chemin relatif de chromedriver?
Je souhaite augmenter la sécurité de la connexion SSH
Un moyen simple de mesurer la vitesse de traitement d'un disque reconnu par Linux
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
Augmentez la vitesse de la méthode Monte Carlo de l'implémentation de découpage Cython.
[Ubuntu] Comment supprimer tout le contenu du répertoire
Comment trouver le nombre optimal de clusters pour les k-moyennes
python3 Mesurez la vitesse de traitement.
Comment tester les attributs ajoutés par add_request_method de pyramid
Comment utiliser le générateur
Comment calculer la quantité de calcul appris de ABC134-D
(Note) Comment passer le chemin de votre propre module
Comment résumer les résultats de FreeSurfer ~ aparc, aseg, wmparc ~
Comment exécuter automatiquement la fonction d'exportation de GCP Datastore
Tentative d'ajuster automatiquement la vitesse des vidéos accélérées (partie 2)
Comment voir le contenu du fichier ipynb du notebook Jupyter
Comment trouver le coefficient de mise à l'échelle d'une ondelette bipolaire
Comment utiliser le décorateur
Comment démarrer la première projection
Comment connecter le contenu de la liste dans une chaîne de caractères
Comment déterminer l'existence d'un élément sélénium en Python
Comment modifier le niveau de journalisation d'Azure SDK pour Python
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
Comment connaître la structure interne d'un objet en Python
Comment changer la couleur du seul bouton pressé avec Tkinter
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy
[Python] Comment obtenir la fraction d'un nombre naturel à grande vitesse
[EC2] Comment installer Chrome et le contenu de chaque commande
Comment vérifier la taille de la mémoire d'une variable en Python
Créez le thème de Pythonista 3 comme Monokai (comment créer votre propre thème)
[Python] Comment obtenir le premier et le dernier jour du mois
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
[TensorFlow 2] Comment vérifier le contenu de Tensor en mode graphique
[Linux] Comment désactiver la mise à jour automatique du fichier /etc/resolv.conf (AmazonLinux2)
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
Comment afficher le résultat de sortie de la commande man Linux dans un fichier
Comment surveiller l'état d'exécution de sqlldr avec la commande pv
Comment utiliser Jupyter sur le frontal de Spacon ITO
La première intelligence artificielle. Comment vérifier la version de Tensorflow installée.
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique