Im
letzten Teil haben wir über die Geburt von KOMPAS-3D v18 gesprochen, etwas über die Auswahl von Kriterien und Modellen zum Testen neuer Funktionen, und auch das Thema Rendern in der „Basic“ -Version angesprochen.
Fahren wir mit der Geschichte über die Renderoption „Verbessert“ fort.
Anrufe zeichnen
Alexander Tulup, Programmierer:
„Das Hauptproblem bei der Anzeige großer Szenen ist mit einer großen Anzahl von sogenannten„ Zeichnungsaufrufen “verbunden. Die alte Version des Renderings basiert auf dem mathematischen Datenmodell. Daher wurde für jedes Grundelement - Punkte, Kanten, Flächen - eine separate Methode für seine Anzeige aufgerufen.
Für jeden Ziehungsaufruf führt OpenGL (Treiber) eine Reihe von Überprüfungen durch und übersetzt gleichzeitig die eingehenden Befehle in ein Format, das die Grafikkarte versteht. Danach werden die Anrufe zur Warteschlange hinzugefügt und bereits zur Ausführung gesendet.

GPU-Befehlsübertragungsschema in OpenGL ( Quelle )
Mit einer großen Anzahl von Details wächst die Anzahl der Anrufe an die CPU so stark, dass die Daten einfach keine Zeit haben, auf der Grafikkarte anzukommen. Es kommt vor, dass eine sehr starke Grafikkarte auf die gleiche Weise wie eine mittlere oder schwächere Karte „langsamer“ wird.
Sie können damit umgehen, indem Sie die Anzahl der Renderings (Zustandsübergänge) reduzieren - nach Material gruppieren, gemeinsame Geometrie kombinieren ( Instanzen ) usw.
Wir sollten nicht vergessen, dass wir von der ganzen Szene nur einen bestimmten Teil davon sehen. Hier sind Algorithmen zum Erkennen unsichtbarer Objekte anwendbar (Kegelstumpf-Keulen, Okklusions-Keulen usw.).
Inspiriert vom Beispiel von The Road to One Million Draws und AZDO haben wir uns für einen eher ungewöhnlichen Weg entschieden: Zustandsänderungen auf der CPU-Seite so weit wie möglich zu beseitigen . Jetzt ist fast alles auf der Grafikkarte erledigt. Alle erforderlichen Attribute werden direkt aus dem Videospeicher übernommen, während vom Shader selbst ( Shader ) gezeichnet wird . Dies wurde durch die Erhöhung des Videospeichers ( VRAM ) und das Aufkommen von SSBO ermöglicht .

1.000.000 Würfel
Zu den Vorteilen dieses Ansatzes: Die Anzeigegeschwindigkeit ist sehr hoch geworden. Die Geschwindigkeit wird nur durch die Funktionen der GPU begrenzt, nämlich die Datenmenge, die sie verarbeiten kann.
Es ermöglichte auch eine recht effiziente Implementierung von Beschneidungsmechanismen für unsichtbare Objekte. Die Ergebnisse der Sichtbarkeitsprüfung werden direkt im Videospeicher aufgezeichnet und von dort aus die Zeichenbefehle gebildet. Auf der CPU-Seite müssen Sie also nicht warten.
Einer der Hauptnachteile dieses Ansatzes ist die hohe Komplexität der Entwicklung. Unter Berücksichtigung des gewählten Ansatzes muss viel neu umgesetzt werden. Außerdem mussten wir uns häufig mit einer Situation auseinandersetzen, in der der gleiche Shader-Code auf Grafikkarten verschiedener Hersteller unterschiedlich oder gar nicht funktionierte. Oft wurde dies durch Aktualisieren des Treibers "behandelt", aber manchmal war es nach einem langen Debugging notwendig, den Code neu zu schreiben.
Natürlich sind auch die Anforderungen an die Grafikkarte gestiegen. Die Unterstützung von OpenGL 4.5 ist ein Schlüssel, aber nicht die einzige Voraussetzung.
Nachfolgend präsentieren wir die Ergebnisse der Rendergeschwindigkeit während der Baugruppendrehung. Denken Sie daran, dass 24 Bilder pro Sekunde (fps) als bequeme Indikatoren für das menschliche Auge gelten.
Im Folgenden wurden Messungen an einem PC mit der folgenden Konfiguration durchgeführt:
CPU: Intel Core i7-6700K 4,00 GHz
RAM: 32 GB
GPU: NVidia Quadro P2000
Betriebssystem: Microsoft Windows 10 x64 Professional
Tabelle 1. Bildrate (Bilder pro Sekunde, fps) bei verschiedenen Modellen. Mehr ist besser. Anzeigemodus: Halbton + Drahtmodell, vereinfachter Modus deaktiviert, Anti-Aliasing-Qualität: mittel (MSAA 8x)Hinzufügen von Komponenten zu einer großen Baugruppe
Das Szenario mit dem Hinzufügen von Komponenten zu einer großen Baugruppe entwickelte sich schließlich zum sogenannten komplexen Test, der in Tabelle 2 beschrieben ist.
Tabelle 2. Szenario mit Hinzufügen von Komponenten zu einer großen Baugruppe. Testkriterien.Kriterium | Kriterium Beschreibung |
Geschwindigkeit beim Öffnen von Dateien | Die der Baugruppe hinzugefügte Komponente muss von der Festplatte geladen werden |
Geschwindigkeit rendern | Die Baugruppe und die eingefügte Komponente müssen positioniert sein. Dazu müssen Sie das Bild drehen / verschieben / zoomen |
Objektauswahlgeschwindigkeit | Um Partner zu erstellen, müssen Sie die grundlegenden Objekte auswählen: Flächen, Ebenen, Kanten usw. |
Synchronisationsgeschwindigkeit mit dem Build-Baum | Die der Baugruppe und ihren Schnittstellen hinzugefügte Komponente muss im Konstruktionsbaum dargestellt werden |
Spezifikationsmodul Synchronisationsgeschwindigkeit | Die der Baugruppe hinzugefügte Komponente muss in der Spezifikation berücksichtigt werden. |
In der Tabelle sehen Sie die Punkte (Zeichnen, Öffnen), die von Anfang an als separate Beschleunigungsrichtungen ausgewählt wurden. Verbesserungen erforderten jedoch andere Komponenten.
Die Synchronisation mit einem Baum nahm erhebliche Zeit in Anspruch. Wir haben das Problem durch die Implementierung eines Teilupdates gelöst.
Eine weitere Schwierigkeit war der signifikante Einfluss der Spezifikation auf die Leistung von KOMPAS-3D. In einigen komplexen Testszenarien war diese Komponente die Hauptkomponente (50% oder mehr).
SpezifikationDie Spezifikation ist das KOMPAS-3D-Systemmodul, das für die Erstellung des gleichnamigen Konstruktionsdokuments verantwortlich ist. Es wird von einem separaten Team entwickelt.
Insbesondere beschleunigte das Team die Synchronisation während des Einfügens, indem es die internen Mechanismen des Spezifikationsmoduls neu gestaltete.
Einige Ergebnisse
Fügen Sie der Baugruppe "Reduzierer des Schiffskraftwerks" Komponenten hinzu.
Umfassender Test für die Baugruppe "Reduzierstück eines Schiffskraftwerks".
Die Zahlen zeigen: 1 - Halterung, 2 - Unterlegscheibe, 3 - Schraube.Tabelle 3. Einfügungszeit von Komponenten in einer großen Baugruppe in Sekunden. Weniger ist besser.Komponente | Aktion | Zeit s |
V16.1 | v17.1 | v18 |
Einfügen Komponente Halterung
 | Laden | 2.0 | 3.0 | 2.2 |
Wechseln Sie in den Pairing-Modus | 0,6 | 0,4 | 0,4 |
Erste Paarung | Erste Objektauswahl | 0,4 | 1,0 | 0,2 |
Die Wahl des zweiten Objekts | 0,5 | 1,1 | 0,2 |
Wählen Sie die richtige Paarung | 3.8 | 3.6 | 1,0 |
Zweite Paarung | Erste Objektauswahl | 0,5 | 1.4 | 0,5 |
Die Wahl des zweiten Objekts | 0,5 | 1.4 | 0,2 |
Wählen Sie die richtige Paarung | 3.6 | 3.0 | 1,2 |
Dritte Paarung | Erste Objektauswahl | 0,5 | 0,5 | 0,5 |
Die Wahl des zweiten Objekts | 0,3 | 1,1 | 0,3 |
Wählen Sie die richtige Paarung | 3,7 | 3.2 | 1,1 |
Bestätigen Sie die Erstellung des Insert | 7.8 | 5.2 | 2,3 |
Total Bracket Insert | 24.2 | 24.6 | 10.1 |
Einfügen Unterlegscheiben aus der Bibliothek Standard Produkte

| Erste Paarungsauswahl | 6.4 | 2,4 | 0,4 |
Auswahl des zweiten Paares | 4.2 | 3,1 | 0,4 |
Bestätigen Sie die Erstellung des Insert | 15.7 | 9.2 | 4.4 |
Insgesamt für Einsatzscheiben | 26.3 | 14.7 | 5.2 |
Einfügen Schrauben
 | Laden | 2.0 | 2.7 | 2.0 |
Wechseln Sie in den Pairing-Modus | 0,5 | 0,5 | 0,5 |
Erste Paarung | Erste Objektauswahl | 0,4 | 1,0 | 0,2 |
Die Wahl des zweiten Objekts | 0,4 | 1,1 | 0,2 |
Wählen Sie die richtige Paarung | 3.4 | 2.7 | 1,0 |
Zweite Paarung | Erste Objektauswahl | 0,4 | 1,2 | 0,4 |
Die Wahl des zweiten Objekts | 0,5 | 0,5 | 0,4 |
Wählen Sie die richtige Paarung | 3,7 | 2.9 | 1,0 |
Dritte Paarung | Erste Objektauswahl | 0,5 | 1,0 | 0,5 |
Die Wahl des zweiten Objekts | 0,5 | 1,0 | 0,2 |
Wählen Sie die richtige Paarung | 4.2 | 3.9 | 1,2 |
Bestätigen Sie die Erstellung des Insert | 32,5 | 5,4 | 2.2 |
Insgesamt für das Einsetzen der Schrauben | 49 | 21,2 | 9.8 |
Das vollständige Einfügen der drei Komponenten | 99,5 | 60.5 | 25.1 |
Ein umfassender Test kann als eines der Bearbeitungsszenarien der Baugruppe betrachtet werden (aus der Anzahl der gängigen).
Darüber hinaus wurde der Wiederaufbau der Baugruppe beschleunigt. Wenn Sie jetzt einen Vorgang bearbeiten, wird die gesamte Baugruppe nicht vollständig neu erstellt - nur die geänderten Objekte werden aktualisiert. Um die abhängigen Operationen zu bestimmen, dh jene Operationen, deren Ergebnis durch das Ergebnis der geänderten Operation beeinflusst werden könnte, wird ein spezieller Algorithmus verwendet, der Verbindungen zwischen Operationen, Körpern und Einfügungen herstellt.
Baugruppen öffnen
Die Hauptidee, um das Lesen von Dateien zu beschleunigen, besteht darin, KOMPAS-3D so zu gestalten, dass nur das gelesen wird, was der Benutzer gerade benötigt.
Zum Beispiel:
- schreibgeschützte aktuelle Ausführung für Baugruppeneinsätze,
- Lesen Sie für Download-Typen nur die erforderlichen Informationen: Triangulation oder Triangulation + Ergebnisse ( B-rep ).
All dies erforderte eine Verfeinerung der Datenstruktur in der Datei, damit ihre einzelnen Teile gelesen werden konnten.
Anton Sidyakin, Programmierer, Teamleiter:
„Die KOMPAS-3D-Datei ist seit einiger Zeit ein Archiv, in dem mehrere Servicedateien zusammengefasst sind. Eine davon enthält Modell- / Baugruppendokumentdaten, die in einer Baumstruktur organisiert sind. Die Möglichkeit, in dieser Struktur zu navigieren, war bereits vorhanden. Zum teilweisen Lesen war es notwendig, die Unabhängigkeit der Teile voneinander zu gewährleisten. Daher sollten die erhaltenen Teile nicht aufeinander bezogen sein, da sonst der Teil mit dem Link "minderwertig" geworden wäre.
Infolgedessen war es für Details möglich, die Leistung vom Dokument und voneinander zu trennen. In Baugruppen wird der Behälter für Einsätze und Partner separat hervorgehoben. Innerhalb der Ausführungen war es auch möglich, die Anfangsdaten für die Konstruktion und die Ergebnisse in Form von Triangulation und Körpern zu trennen.

Wenn es sich um vereinfachte Ladetypen handelt, wird die bearbeitbare Baugruppe vollständig geladen, und nur die Triangulation und je nach Typ die Grenzdarstellung (B-rep) werden aus ihren Einfügungen geladen. Das Anzeigen von Einfügungen mit geänderten externen Variablen in diesem Modus stellte einige Schwierigkeiten dar, da sie zuvor im laufenden Betrieb durch erneutes Erstellen während des Lesens erhalten wurden und bei vereinfachten Ladetypen keine Daten dafür vorliegen. Die Lösung bestand darin, die Ergebnisse des Wiederaufbaus solcher Einsätze in die Baugruppe aufzuschreiben. Dies gab Beschleunigung und aufgrund des Mangels an Wiederaufbau.
Die beschriebene Aufteilung des Dokuments in Teile erlaubte das Laden nur der in den Beilagen ausgewählten Leistungen in die Baugruppe.
Das teilweise Lesen beschleunigte nicht nur das Öffnen von Dateien, sondern reduzierte auch den Ressourcenverbrauch - vor allem den Arbeitsspeicher.
Basierend auf den Verbesserungen erschien eine neue Art der Baugruppenbelastung - "Teilweise". Bei dieser Art des Ladens werden nur Ergebnisse (Körper, Flächen) und Triangulationen von der Datei abgezogen. Das teilweise Laden ermöglicht das Erstellen von Paarungen und ist in Bezug auf die Funktionalität dem vollständigen Laden von Komponenten nahe.
Nach der Implementierung von Verbesserungen beim teilweisen Lesen wird die Erstellung benutzerdefinierter Ladetypen vielversprechend.
HinweisBenutzerdefinierte Starttypen sind Kombinationen von Systemmethoden zum Laden einer Komponente. Diese Funktion ist nicht neu, aber Verbesserungen in Version 18 ermöglichen es Ihnen, erhebliche Vorteile aus ihrer Verwendung zu ziehen.
Für Komponenten, die für zukünftige Builds nicht wichtig sind, kann der Lasttyp "Leer" angewendet werden. Dies können Komponenten sein, die in anderen verborgen sind („vnutryanka“). In Version 18 werden Komponenten (und ganze Baugruppen) mit dem Starttyp "Leer" fast sofort geöffnet.
Tabelle 4. Öffnungszeiten für Baugruppen mit den Starttypen "Leer" und "Dimension" in Sekunden. Weniger ist besser.Die verbleibenden Komponenten, die zum Verständnis des Erscheinungsbilds des Produkts benötigt werden oder als Stützobjekte für die weitere Konstruktion verwendet werden, können „voll“ oder „teilweise“ geladen werden.
Als Werkzeug zum Vorbereiten benutzerdefinierter Starttypen können Sie mit neuen Befehlen „unsichtbare“ Komponenten auswählen. Wir wenden den Befehl an und verwenden dann das Kontextmenü, um die Art des Ladens für die ausgewählten Komponenten in "Leer" zu ändern.
Projektion
Bei der Beschleunigung der Projektion haben wir uns die Frage gestellt, die am Eingang des mathematischen Kerns empfangenen Daten zu filtern.
Zunächst haben wir uns entschlossen, unsichtbare Komponenten / Körper zu filtern. Zu diesem Zweck wurde der Okklusions-Keulungsmechanismus verwendet, mit dem Sie herausfinden können, ob der zu projizierende Körper sichtbar ist oder sich schließt und sich in einem anderen Körper befindet. Dieser Vorgang wird an der Seite der Grafikkarte ausgeführt.
Der größte Effekt wird beim Erstellen von Projektionen von Modellen mit einer großen Anzahl von Komponenten erzielt, die in geschlossenen Volumes versteckt sind, zum Beispiel:
- komplexe Antriebe, Getriebe usw.
- Verkehrsmittel,
- Gebäude
- Schränke mit elektrischer Ausrüstung.
Für die Aufnahme ist die Option "Grobe Projektion" verantwortlich. Der Name ist kein Zufall - relativ kleine Teile (z. B. ein Bolzen im Maßstab eines Kraftwerks) dürfen nicht im Montagemaßstab projiziert werden. Für viele Benutzer ist dieser Sachverhalt geeignet, insbesondere bei der Erstellung von Maßzeichnungen und allgemeinen Zeichnungen.
Lesen Sie mehr über die Option Grobe Projektion.Die Option ist nur für Standardprojektionen verfügbar. Für die Angabe von Bildern (Abschnitte, Abschnitte, Remote-Ansichten) ist "Grobe Projektion" nicht erforderlich.
Auch ohne diese Option ist die Projektion im Vergleich zu V16 und V17 spürbar schneller. Dies wurde durch Verbesserungen auf der Seite des mathematischen Kerns unterstützt.
Tabelle 5. Zeit zum Erstellen von drei Standardprojektionen in Sekunden. Weniger ist besser.Ebenfalls in Version 18 wurde die Möglichkeit des Wiederaufbaus einzelner assoziativer Arten implementiert.
In einer Zeichnung mit vielen assoziativen Ansichten hat der Benutzer die Möglichkeit, einzelne irrelevante Ansichten neu zu erstellen. Zum Beispiel die, zu der er Anmerkungen hinzufügen möchte. Sie können auch die Ansichten angeben, die mit aktivierter Option "Grobe Projektion" erstellt wurden.
Erstellen Sie eine einzelne Ansicht neu Diese Funktion gilt nicht für explizite Beschleunigungen, ermöglicht dem Benutzer jedoch Zeitersparnis.
Das Ergebnis der Arbeiten zur Beschleunigung der Projektion des Modells Vakuumtechnologische Installation in der Zeichnung:
Im nächsten Teil werden wir beschreiben, wie wir die Berechnung der Massenzentrierungseigenschaften (MTC) beschleunigt haben, über den Beitrag des geometrischen Kerns von c3dlabs zur COMPAS-3D- Leistung , Änderungen im C3D-Modeler und darüber, welche Hardware für v18 geeignet ist.