[PYTHON] So erhöhen Sie die Verarbeitungsgeschwindigkeit der Erfassung der Scheitelpunktposition

Dieser Artikel ist der 7. Tagesartikel von ** Maya Advent Calender 2019 **.

Wenn Sie in Maya ein Modellierungswerkzeug erstellen, erhalten Sie möglicherweise die Scheitelpunktposition des ausgewählten Objekts. In einem Modell mit einer großen Anzahl von Scheitelpunkten ist es jedoch langsam, alle Scheitelpunktpositionen mit ** MEL ** oder ** cmds ** zu erfassen. Dies ist eine Ebene, die die Modellierungsarbeit behindert. ** Open Maya ** wird oft eingeführt, um die Verarbeitungsgeschwindigkeit zu erhöhen, aber es ist ein hoher Schwellenwert für mich, und ich habe mich gefragt, ob es eine Möglichkeit gibt, die Verarbeitungsgeschwindigkeit mit ** cmds ** zu erhöhen.

Vorherige Schreibweise

Ich habe so geschrieben.

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]

Wenn Sie es jedoch auf diese Weise erhalten, wird es viel Zeit in Anspruch nehmen, wenn das Objekt viele Eckpunkte hat.

Versuchen Sie, die Verarbeitungsgeschwindigkeit zu messen

Erstellen Sie zunächst eine sehr schöne Kugel mit ** Unterteilungsachse ** und ** Unterteilungshöhe ** in der Szene, beide ** 200 **.

Die Anzahl der Eckpunkte beträgt ** 39802 **.

Wählen Sie diese Kugel aus und messen Sie das obige Skript mit dem Zeitmodul von Python.

Es dauerte ungefähr 2 Sekunden. Bei dieser Geschwindigkeit wird die Modellierungsarbeit behindert.

Neue Schreibweise

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)

Das ** fl ** -Flag des ** ls ** -Befehls wird entfernt, und die Liste der erfassten Scheitelpunkte wird gemeinsam dem Argument von ** xform ** übergeben. Lassen Sie uns nun die Verarbeitungsgeschwindigkeit erneut messen.

** Ungefähr 0,06 Sekunden! Es ist ungefähr 33 mal schneller. ** **.

Durch eine Liste durch XYZ ersetzen

Wenn Sie sich jedoch die zurückgegebenen Werte ansehen, handelt es sich um ein eindimensionales Array. Um also dieselben Werte wie bei der Verarbeitung mit for zurückzugeben, müssen Sie den folgenden Code hinzufügen und ihn für jedes XYZ durch ein zweidimensionales Array ersetzen.

vert_pos = [vert_pos[i:i + 3] for i in range(0, len(vert_pos), 3)]

Zusammenfassung

Wie oben erwähnt, war es ein Verfahren, um die Verarbeitungsgeschwindigkeit der Scheitelpunktpositionserfassung zu erhöhen.

Es ist ein sehr kleiner Artikel, aber es war eine Entdeckung für mich, also habe ich ihn aufgeschrieben. Maya hat eine Funktion, die eine solche Liste als Argument verwenden kann, und sie kann viel schneller sein als die Verarbeitung mit for, oder sie kann schneller sein, indem Doppelspurigkeiten beim Geben einer Liste beseitigt werden.

Soweit ich sehen kann, kann ich nicht sehen, ob das Argument in der offiziellen Dokumentation aufgeführt werden kann, daher ist es mühsam, es zu testen ...

Wenn Sie Fehler oder unklare Punkte in dem Artikel haben, würde ich es begrüßen, wenn Sie sie aufschreiben könnten. Bis zum Ende Danke fürs Lesen.

Recommended Posts

So erhöhen Sie die Verarbeitungsgeschwindigkeit der Erfassung der Scheitelpunktposition
So erhöhen Sie die Achse
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
Berücksichtigen Sie die Verarbeitungsgeschwindigkeit, um den Bildpuffer mit numpy.ndarray zu verschieben
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
Wie man die schöne Suppeninstanziierung beschleunigt
So überprüfen Sie die Version von Django
[Python] So legen Sie die Position und Größe der Fensteranzeige von matplotlib fest
So berechnen Sie die Volatilität einer Marke
So finden Sie den Bereich des Boronoi-Diagramms
Über die Verarbeitungsgeschwindigkeit von SVM (SVC) von Scikit-Learn
So messen Sie die Leitungsgeschwindigkeit vom Terminal aus
Ich habe die Verarbeitungsgeschwindigkeit der numpy eindimensionalisierung überprüft
Wie man die Portnummer des xinetd-Dienstes kennt
So ermitteln Sie die Anzahl der Stellen in Python
Die Entscheidung von scikit-learn Wie man ein Holzmodell visualisiert
[Blender] So legen Sie die Auswahlelemente von EnumProperty dynamisch fest
[Python] Zusammenfassung, wie die Farbe der Figur angegeben wird
Wie man das Dokument der magischen Funktion (Linienmagie) trifft
So greifen Sie auf die globale Variable des importierten Moduls zu
[Selen] Wie wird der relative Pfad des Chromedriver angegeben?
Ich möchte die Sicherheit der SSH-Verbindung erhöhen
Eine einfache Möglichkeit, die Verarbeitungsgeschwindigkeit einer von Linux erkannten Festplatte zu messen
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Erhöhen Sie die Geschwindigkeit der Monte-Carlo-Methode zur Implementierung von Cython-Ausschnitten.
[Ubuntu] So löschen Sie den gesamten Inhalt des Verzeichnisses
So finden Sie die optimale Anzahl von Clustern für k-means
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
So testen Sie die Attribute, die durch add_request_method of pyramid hinzugefügt wurden
Verwendung des Generators
Berechnen des aus ABC134-D gelernten Rechenaufwands
(Hinweis) So übergeben Sie den Pfad Ihres eigenen Moduls
Wie man die Ergebnisse von FreeSurfer ~ aparc, aseg, wmparc ~ zusammenfasst
So führen Sie die Exportfunktion des GCP-Datenspeichers automatisch aus
Versuchen Sie, die Geschwindigkeit von Zeitraffervideos automatisch anzupassen (Teil 2).
So sehen Sie den Inhalt der ipynb-Datei des Jupyter-Notizbuchs
So ermitteln Sie den Skalierungskoeffizienten eines bipolaren Wavelets
Wie benutzt man den Dekorateur?
So starten Sie die erste Projektion
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge
So bestimmen Sie die Existenz eines Selenelements in Python
So ändern Sie die Protokollstufe von Azure SDK für Python
So implementieren Sie Java-Code im Hintergrund von Red Hat (Linux ONE)
Wie Sie die interne Struktur eines Objekts in Python kennen
So ändern Sie die Farbe nur der mit Tkinter gedrückten Taste
So erhalten Sie die ID von Type2Tag NXP NTAG213 mit nfcpy
[Python] Wie man den Bruchteil einer natürlichen Zahl mit hoher Geschwindigkeit erhält
[EC2] So installieren Sie Chrome und den Inhalt jedes Befehls
So überprüfen Sie die Speichergröße einer Variablen in Python
Erstellen Sie das Thema von Pythonista 3 wie Monokai (wie Sie Ihr eigenes Thema erstellen)
[Python] So erhalten Sie den ersten und den letzten Tag des Monats
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
[TensorFlow 2] So überprüfen Sie den Inhalt von Tensor im Diagrammmodus
[Linux] Deaktivieren der automatischen Aktualisierung der Datei /etc/resolv.conf (AmazonLinux2)
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
So überwachen Sie den Ausführungsstatus von sqlldr mit dem Befehl pv
Verwendung von Jupyter am Frontend von Spacon ITO
Die erste künstliche Intelligenz. So überprüfen Sie die installierte Version von Tensorflow.
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen