20 Jahre sind seit der Veröffentlichung der ersten 3D-Version von KOMPAS - V5.11 vergangen. In dieser Zeit haben wir festgestellt, dass die Bedürfnisse unserer Benutzer proportional zu den Funktionen von KOMPAS-3D wachsen, ebenso wie die Funktionalität von KOMPAS proportional zu den Anforderungen der Benutzer erweitert wird. Nur ein Haken: Beim langjährigen Aufbau des technologischen Teils stießen wir bei der Arbeit mit komplexen Großprojekten auf das Leistungsproblem. Jetzt ist diese Linie überwunden und wir sind bereit zu erzählen, wie wir es geschafft haben, KOMPAS-3D in mehr als 30 grundlegenden Operationen zu beschleunigen.

Geduld kann nicht beschleunigt werden
Wie haben wir verstanden, dass es Zeit ist, „zu beschleunigen“?
Wenn vor 12 Jahren genug Arbeit mit Baugruppen mit bis zu mehreren tausend Komponenten vorhanden war, möchten KOMPAS-Benutzer jetzt komplexe Projekte mit 300.000 Komponenten in einer Baugruppe durchführen, und einige Millionen werden wenige sein.
Die Entwicklung der KOMPAS-3D-Anwenderprojekte: links Schneeräum- und Rotorausrüstung für die Traktoren K-700A, K-703MBA , rechts die Dampfgasanlage PGU-410 MW . Wenn es schwer zu sehen ist, klicken Sie auf das Bild.In ServiceDesk - Technischer Support - haben wir Anfragen im Stil "Ich kann meine Fabrik morgens nicht öffnen" und "Das Modell wurde geöffnet, aber es dreht sich nicht" erhalten.
Es gibt nur eine Schlussfolgerung: COMPAS musste ernsthaft überarbeitet werden.
Erste Änderungen
Die Hauptaufgabe besteht darin, die Systemleistung bei der Arbeit mit großen Baugruppen zu steigern. Und nicht um konventionelle 10-30% zu steigern, sondern um ein Vielfaches.
Um diese Probleme zu lösen, haben wir 2015 eine Arbeitsgruppe zur Beschleunigung von KOMPAS-3D gebildet. Eine Art schnell reagierende Gruppe von Programmierern, Testern und Analysten.
Unser Speed-TeamHILFE: Wir haben bereits an der Beschleunigung gearbeitet - dies sind sowohl Optimierungen als auch neue Funktionen, mit denen wir einige der Probleme bei der Arbeit mit großen Baugruppen lösen können. Die Aufgaben waren jedoch nicht so ehrgeizig wie jetzt und die Arbeit war nicht so umfangreich.
Wie haben Sie die Kriterien für die Beschleunigung gewählt?
Wir haben 5 Richtungen für die Beschleunigung gewählt:
- Rendern (Drehen, Bewegen und Zoomen des Modellbildes),
- Hinzufügen von Komponenten zu einer großen Baugruppe
- Montageöffnung
- Bearbeitung in Baugruppen,
- Projektion.
Bei der Auswahl dieser Bereiche stützten wir uns auf mehrere Quellen:
- eigene Erfahrung und Forschung,
- Analyse von Anfragen nach technischem Support und Analyse der Fehlerbasis (in unseren Tools gibt es ein spezielles Label „Leistung“, bei dem leistungskritische Probleme festgestellt werden),
- Ergebnisse der Benutzerumfrage (Benutzer füllen solche Fragebögen normalerweise bei ASCON-Veranstaltungen aus),
höhere Mächte .
Hier diskutieren wir etwas.Zusammen mit der Bildung der Arbeitsgruppe haben wir unseren eigenen Informationsraum geschaffen - eine Wissensbasis - wir haben alle Aufgaben dort niedergeschrieben, Ideen in möglichen Bereichen der Beschleunigung gesammelt und systematisiert. Infolgedessen bildeten sich Anforderungen mit Szenarien für die weitere Arbeit, dank derer die Leistung gesteuert werden konnte.
Ein weiteres Axiom, das wir bei der Arbeit an der Version übernommen haben: Produktivität kann nicht einfach genommen und verbessert und dann vergessen werden. Es war erforderlich, den aktuellen Zustand zu messen und aufzuzeichnen, von dem wir uns dann abstoßen konnten. Zu dieser Zeit war der Ausgangspunkt die Version V16 (unsere Geschichte ist noch im Jahr 2015), die durch Skripte aus unserer TK gesteuert werden musste. Die Leistung mehrerer wichtiger Punkte wurde manuell gesteuert, aber jetzt wird dieser Prozess dank des POI automatisiert.
Anton Sidyakin, Programmierer, Teamleiter:
„Wir haben die Prozesse dank des eingeführten Systems - POI (Points of Interests) - automatisiert. Dies sind spezielle Tags im Quellcode. Wenn Sie Skripte in KOMPAS-3D ausführen, die von der Benutzersprache beschrieben werden, erhalten Sie einen Bericht, der nicht nur für den Programmierer, sondern auch für Analysten mit Testern verständlich ist und hilft, herauszufinden, was KOMPAS-3D zu einem bestimmten Zeitpunkt tut und wie viel Zeit dafür aufgewendet wird. Diese Informationen können dann automatisch verarbeitet und mit den Quelldaten verglichen werden. "

Ergebnisse der automatischen Leistungsprüfung. Übrigens, wer an dieser Stelle gelesen hat, weiß jetzt, dass die KDPV-Platte ein Symbol unseres Beschleunigerteams ist. Sie betrachten langsamen Code als langsamen Code.
Welche Modelle wurden zum Vergleich herangezogen?
Wir haben uns entschlossen, uns auf echte Benutzermodelle zu konzentrieren, die den Kriterien "großer Baugruppen" entsprechen.
Die
Datenbank mit Modellen des Computer 3D-Modeling Aces Competition war von großem Nutzen.
Unten finden Sie Screenshots unserer Lieblingsmodelle. Das ist natürlich noch nicht alles, und darüber hinaus sind wir zuversichtlich, dass die Topmodelle der letzten Jahre bald bekannt werden und KOMPAS nicht am Limit, sondern im regulären Hochgeschwindigkeitsmodus mit ihnen arbeiten wird.
Wenn das System noch mehr geladen werden musste, wurde zusätzlich zu diesen Modellen auch ein eigenartiges „vorgefertigtes Durcheinander“ verwendet, zum Beispiel:
Wir haben auch synthetische Modelle verwendet: In einigen Fällen sind bestimmte Probleme bei ihnen ausgeprägter und sie sind bequemer zum Debuggen und Testen zu verwenden.
Über Entwicklung und erzielte Ergebnisse
Zeichnen
Zunächst versuchten sie, das Rendern zu beschleunigen (dies wurde auch von der Mehrheit der an der Umfrage teilnehmenden Benutzer angefordert).
Die Rendergeschwindigkeit ist in allen Prozessen von entscheidender Bedeutung, in denen das Modell positioniert ist oder sich die Anzeige ändert. Und dies ist nicht nur die Drehung, Bewegung oder das Zoomen des Modells. Die Rendergeschwindigkeit spielt auch in den Prozessen eine Rolle, in denen das Modellbild aktualisiert wird:
- Hinzufügen einer Komponente zu einer Baugruppe
- Auswahl grundlegender Objekte für Partner (Flächen, Kanten usw.),
- Hervorheben ausgewählter Teile des Modells (Komponenten, Flächen),
- Ändern Sie die Sichtbarkeit von Objekten (Verstecken / Anzeigen der Komponente).
Und dies ist weit entfernt von allen Fällen, in denen das Visualisierungssubsystem verwendet wird. Daher ist klar, warum das Rendern von Beschleunigung für uns zu einer Priorität geworden ist.
Gleichzeitig war es wichtig, nicht nur die Fähigkeiten produktiver moderner Grafikkarten zu nutzen, sondern auch diejenigen zu vergessen, die nicht so starke und moderne Hardware verwenden.
Das Ergebnis der Arbeit war die Implementierung von zwei Rendering-Optionen:
- Grundlegend - Aktiviert Open GL 2.0-Erweiterungen. Weniger anspruchsvoll für die Leistung von Grafikkarten. Gibt eine gute Renderbeschleunigung,
- "Verbessert" - verwendet die modernen Erweiterungen von OpenGL 4.5. Anspruchsvolle Eigenschaften der Grafikkarte. Bietet maximale Renderbeschleunigung auf modernen Karten
Hinweis:
Rendereinstellungen für v18.Standardmäßig funktioniert "Auto Detect" - die gewünschte Option wird basierend auf den unterstützten OpenGL-Erweiterungen ausgewählt.
Yuri Korchagin, Programmierer:
„Bei dem Problem der Leistung beim Anzeigen großer Szenen ist klar, dass viele Ressourcen für das Umrunden der Szene und das Berechnen der Parameter aufgewendet werden, mit denen das Grundelement angezeigt werden soll.
Ein weiteres Problem ist mit einer großen Anzahl von Draw-Aufrufen verbunden (Aufrufe der OpenGL-API, die zur Ausgabe von Geometrie an den Frame-Puffer führen).
Der Ausgangszustand nahm auch die Übertragung aller Daten vom RAM auf die Grafikkarte an. Und das sind Millionen von Dreiecken bei einer großen Baugruppe.
Auf kosmetische Korrekturen konnte hier nicht verzichtet werden, da eine mehrfache Produktivitätssteigerung erforderlich war. Daher wurde beschlossen, das Visualisierungsmodul weitgehend neu zu schreiben.
Der erste Schritt bestand darin, den Videospeicher zum Zwischenspeichern von Zeichnungsdaten (Triangulation, Drahtmodell, Flächen) zu verwenden. Durch das Verschieben dieser Daten auf die GPU gelang es uns, die FPS um das 2-3-fache zu erhöhen.
Anschließend wurde ein zur Visualisierung angepasstes Datenmodell erstellt. Das heißt, wir haben Anfragen nach einem 3D-Modell beseitigt, das sehr ressourcenintensiv sein kann, was sich auch positiv auswirkte.
Der nächste Schritt bestand darin, die Qualität und das Volumen der Triangulation zu untersuchen. Oft wurden kleine Details mit übermäßiger Genauigkeit angezeigt und umgekehrt - in bestimmten Situationen sah der Benutzer anstelle glatter Oberflächen ein „gehacktes“ Modell auf dem Bildschirm.
Wir haben uns entschieden, mehrere Detailebenen zu verwenden und die Approximation von Primitiven unter Berücksichtigung der Winkelabweichung anzuwenden. Auf diese Weise wurden zwei Fliegen mit einer Klappe geschlagen: Sie verbesserten die Qualität und beseitigten die übermäßige Belastung der GPU. "
Spoiler: Über Triangulation
Spezifiziert von Nikita Batyanov, einem Analytiker:
„Für eine korrektere und allgemein angenehmere Darstellung der Modelle haben wir beschlossen, die Triangulationsparameter durch eine maximale Winkelabweichung zu ergänzen. Bisher haben wir nur den Parameter für die maximale lineare Abweichung verwendet.
Ich möchte Sie daran erinnern: Damit die Grafikkarte unsere theoretischen Darstellungen von Objekten zeichnen kann, müssen sie in Dreiecke zerlegt werden. Je mehr solche Dreiecke es gibt, desto mehr sieht das Bild als „ideal“ aus, aber desto stärker wird die Grafikkarte belastet.
Mit dem Algorithmus zum Aufteilen in Dreiecke unter Verwendung der maximalen Winkelabweichung können Sie einige Modelle genauer anzeigen, ohne die Anzahl der Dreiecke so stark zu erhöhen, als ob nur die maximale lineare Abweichung verwendet würde.
"Wir können Objekte zeichnen, die im Verhältnis zu den Abmessungen des gesamten Modells kleiner sind, während wir die Anzahl der Dreiecke leicht überbewerten."
Yuri Korchagin, Programmierer:
„Nun, die Anzeige des Modells ist schneller geworden, aber nicht so viel, wie wir möchten. Zu diesem Zeitpunkt wurde uns klar, dass wir mit diesem Ansatz nicht mehr anfangen können.
Andererseits erfordert die Verwendung der neuesten Ansätze die aktuellsten Grafikkarten, was den Kompatibilitätsanforderungen widerspricht und einigen Benutzern eindeutig nicht gefällt. Daher sind die oben beschriebenen Verbesserungen als "Basic" -Rendering-Option verfügbar geworden.
Und dann begann der Spaß ... "
Im nächsten Teil setzen wir unsere Geschichte über das Rendern fort und zeigen auch die Ergebnisse der Messung der Rendergeschwindigkeit während der Baugruppendrehung, MTC-Berechnungen, des Hinzufügens von Komponenten zur Baugruppe und des Auftretens eines Teillasttyps.
Zum Nachtisch haben sie ein Video hinterlassen, in dem Sie die Rendergeschwindigkeit während der Rotation, Skalierung und Verschiebung des Reduzierers eines Seekraftwerks vergleichen können.
Das Ende des ersten Teils. Fortsetzung folgt .