Pada bagian
terakhir, kami berbicara tentang kelahiran KOMPAS-3D v18, sesuatu tentang pemilihan kriteria dan model untuk menguji fungsi-fungsi baru, dan juga menyentuh pada topik rendering dalam versi "Basic".
Mari kita lanjutkan dengan cerita tentang opsi render "Peningkatan".
Menggambar panggilan
Alexander Tulup, programmer:
“Masalah utama kinerja menampilkan adegan besar terkait dengan sejumlah besar yang disebut“ panggilan gambar ”. Versi lama dari rendering dibangun di atas model data matematika. Jadi, untuk setiap primitif - titik, tepi, wajah - metode terpisah dipanggil untuk tampilan.
Untuk setiap panggilan draw, OpenGL (driver) melakukan serangkaian pemeriksaan, secara bersamaan menerjemahkan perintah yang masuk ke dalam format yang dimengerti kartu video, setelah itu panggilan ditambahkan ke antrian dan sudah dikirim untuk dieksekusi.

Skema transfer perintah GPU di OpenGL ( sumber )
Dengan sejumlah besar detail, jumlah panggilan ke CPU bertambah banyak sehingga data tidak memiliki waktu untuk sampai pada kartu video. Kami mendapatkan situasi di mana pada kartu video yang sangat kuat itu "melambat" dengan cara yang sama seperti pada medium atau lebih lemah.
Anda dapat mengatasinya dengan mengurangi jumlah rendering (transisi negara) - kelompok demi materi, menggabungkan geometri umum ( instancing ), dll.
Kita tidak boleh lupa bahwa dari keseluruhan adegan kita hanya melihat sebagian saja. Algoritma untuk mendeteksi objek yang tak terlihat berlaku di sini (frustum culling, oklusi culling, dll.)
Terinspirasi oleh contoh The Road to One Million Draws dan AZDO , kami memutuskan untuk mengambil jalan yang agak tidak biasa: singkirkan sebanyak mungkin perubahan status di sisi CPU. Sekarang hampir semuanya dilakukan pada kartu grafis. Semua atribut yang diperlukan diambil langsung dari memori video sambil menggambar dari shader itu sendiri ( shader ), yang dimungkinkan berkat peningkatan memori video ( VRAM ) dan munculnya SSBO .

1.000.000 dadu
Keuntungan dari pendekatan ini: kecepatan tampilan menjadi sangat tinggi. Kecepatan hanya dibatasi oleh kemampuan GPU, yaitu jumlah data yang dapat diproses.
Ini juga memungkinkan cukup efisien menerapkan mekanisme kliping untuk objek yang tak terlihat. Hasil pemeriksaan visibilitas direkam langsung dalam memori video, dan dari sana perintah menggambar dibuat berdasarkan padanya. Artinya, di sisi CPU, Anda tidak perlu menunggu.
Salah satu kelemahan utama dari pendekatan ini adalah kompleksitas pembangunan yang tinggi. Banyak yang harus diimplementasikan lagi, dengan mempertimbangkan pendekatan yang dipilih. Selain itu, kami sering harus berurusan dengan situasi di mana kode shader yang sama bekerja secara berbeda atau tidak bekerja sama sekali pada kartu video dari produsen yang berbeda. Seringkali ini "dirawat" dengan memperbarui driver, tetapi kadang-kadang setelah lama debugging perlu untuk menulis ulang kode.
Secara alami, persyaratan untuk kartu video juga meningkat. Dukungan untuk OpenGL 4.5 adalah kuncinya, tetapi bukan satu-satunya persyaratan.
Di bawah ini kami sajikan hasil kecepatan rendering selama rotasi perakitan. Ingat bahwa 24 frame per detik (fps) dianggap sebagai indikator nyaman bagi mata manusia.
Selanjutnya, pengukuran dilakukan pada PC dengan konfigurasi berikut:
CPU: Intel Core i7-6700K 4,00 GHz
RAM: 32 Gb
GPU: NVidia Quadro P2000
OS: Microsoft Windows 10 x64 Professional
Tabel 1. Frame rate (bingkai per detik, fps) pada berbagai model. Lebih banyak lebih baik. Mode tampilan: Halftone + kerangka gambar, mode sederhana dinonaktifkan, kualitas anti-aliasing: sedang (MSAA 8x)Menambahkan Komponen ke Majelis Besar
Skenario dengan penambahan komponen ke rakitan besar akhirnya berkembang menjadi apa yang disebut uji kompleks, yang dijelaskan pada Tabel 2.
Tabel 2. Skenario dengan menambahkan komponen ke rakitan besar. Kriteria pengujian.Kriteria | Deskripsi Kriteria |
Kecepatan buka file | Komponen yang ditambahkan ke rakitan harus dimuat dari disk |
Kecepatan render | Perakitan dan komponen yang dimasukkan harus diposisikan, untuk ini Anda perlu memutar / memindahkan / memperbesar gambar |
Kecepatan pemilihan objek | Untuk membuat pasangan, Anda harus memilih objek dasar: wajah, pesawat, tepi, dll. |
Kecepatan sinkronisasi dengan struktur pohon | Komponen yang ditambahkan ke perakitan dan interface-nya harus diwakili di pohon konstruksi |
Modul Spesifikasi Kecepatan Sinkronisasi | Komponen yang ditambahkan ke rakitan harus dipertimbangkan dalam spesifikasi. |
Dalam tabel Anda dapat melihat poin (gambar, pembukaan), yang sejak awal dipilih sebagai arah akselerasi yang terpisah. Tetapi perbaikan membutuhkan komponen lain.
Waktu yang signifikan diambil dengan sinkronisasi dengan pohon. Kami memecahkan masalah dengan menerapkan pembaruan sebagian.
Kesulitan lain adalah dampak signifikan dari spesifikasi pada kinerja KOMPAS-3D. Dalam beberapa skenario pengujian yang kompleks, komponen ini adalah yang utama (50% atau lebih).
SpesifikasiSpesifikasinya adalah modul sistem KOMPAS-3D, yang bertanggung jawab atas pembentukan dokumen desain dengan nama yang sama. Ini dikembangkan oleh tim terpisah.
Secara khusus, tim mempercepat sinkronisasi selama penyisipan dengan mendesain ulang mekanisme internal modul spesifikasi.
Beberapa hasil
Tambahkan komponen ke unit "Peredam pembangkit listrik kapal".
Tes komprehensif untuk perakitan "Peredam pembangkit listrik laut."
Angka-angka menunjukkan: 1 - braket, 2 - mesin cuci, 3 - baut.Tabel 3. Waktu penyisipan komponen dalam rakitan besar dalam hitungan detik. Lebih sedikit lebih baik.Komponen | Aksi | Waktu s |
V16.1 | v17.1 | v18 |
Masukkan komponen Bracket
 | Memuat | 2.0 | 3.0 | 2.2 |
Beralih ke mode berpasangan | 0,6 | 0,4 | 0,4 |
Pasangan pertama | Seleksi Objek Pertama | 0,4 | 1,0 | 0,2 |
Pilihan objek kedua | 0,5 | 1,1 | 0,2 |
Pilih pasangan yang tepat | 3.8 | 3.6 | 1,0 |
Pasangan kedua | Seleksi Objek Pertama | 0,5 | 1.4 | 0,5 |
Pilihan objek kedua | 0,5 | 1.4 | 0,2 |
Pilih pasangan yang tepat | 3.6 | 3.0 | 1,2 |
Pasangan ketiga | Seleksi Objek Pertama | 0,5 | 0,5 | 0,5 |
Pemilihan objek kedua | 0,3 | 1,1 | 0,3 |
Pilih pasangan yang tepat | 3,7 | 3.2 | 1,1 |
Konfirmasikan Penciptaan Sisipan | 7.8 | 5.2 | 2,3 |
Masukkan Braket Total | 24.2 | 24.6 | 10.1 |
Masukkan mesin cuci dari perpustakaan standar produk

| Pilihan pemasangan pertama | 6.4 | 2,4 | 0,4 |
Pilihan pasangan kedua | 4.2 | 3,1 | 0,4 |
Konfirmasikan Penciptaan Sisipan | 15.7 | 9.2 | 4.4 |
Total untuk Mesin Cuci Insert | 26.3 | 14.7 | 5.2 |
Masukkan baut
 | Memuat | 2.0 | 2.7 | 2.0 |
Beralih ke mode berpasangan | 0,5 | 0,5 | 0,5 |
Pasangan pertama | Seleksi Objek Pertama | 0,4 | 1,0 | 0,2 |
Pilihan objek kedua | 0,4 | 1,1 | 0,2 |
Pilih pasangan yang tepat | 3.4 | 2.7 | 1,0 |
Pasangan kedua | Seleksi Objek Pertama | 0,4 | 1,2 | 0,4 |
Pilihan objek kedua | 0,5 | 0,5 | 0,4 |
Pilih pasangan yang tepat | 3,7 | 2.9 | 1,0 |
Pasangan ketiga | Seleksi Objek Pertama | 0,5 | 1,0 | 0,5 |
Pilihan objek kedua | 0,5 | 1,0 | 0,2 |
Pilih pasangan yang tepat | 4.2 | 3.9 | 1,2 |
Konfirmasikan Penciptaan Sisipan | 32,5 | 5,4 | 2.2 |
Total untuk penyisipan Bolt | 49 | 21,2 | 9.8 |
Total penyisipan ketiga komponen | 99.5 | 60.5 | 25.1 |
Tes komprehensif dapat dianggap sebagai salah satu skenario pengeditan perakitan (dari jumlah umum).
Selain itu, pembangunan kembali perakitan dipercepat. Sekarang, jika Anda mengedit operasi, seluruh unit tidak akan sepenuhnya dibangun kembali - hanya objek yang diubah akan diperbarui. Untuk menentukan operasi dependen, yaitu operasi tersebut, yang hasilnya dapat dipengaruhi oleh hasil operasi yang diubah, algoritma khusus digunakan yang membangun koneksi antara operasi, badan dan sisipan.
Majelis pembukaan
Gagasan utama untuk meningkatkan kecepatan membaca file adalah membuat KOMPAS-3D hanya membaca apa yang dibutuhkan pengguna saat ini.
Sebagai contoh:
- hanya baca eksekusi saat ini untuk sisipan perakitan,
- untuk tipe unduhan, baca hanya informasi yang diperlukan: triangulasi atau triangulasi + hasil ( B-rep ).
Semua ini memerlukan penyempurnaan struktur data dalam file sehingga masing-masing bagian dapat dibaca.
Anton Sidyakin, programmer, pemimpin tim:
“Untuk beberapa waktu sekarang, file KOMPAS-3D telah menjadi arsip yang menggabungkan beberapa file layanan. Salah satunya berisi model / data dokumen rakitan yang disusun dalam struktur pohon. Kemampuan untuk menavigasi struktur ini sudah ada. Untuk bacaan parsial, perlu untuk memastikan independensi bagian dari satu sama lain. Dengan demikian, bagian yang diterima seharusnya tidak saling merujuk, jika tidak bagian dengan tautan akan menjadi "inferior".
Akibatnya, untuk perincian, dimungkinkan untuk memisahkan kinerja dari dokumen dan dari satu sama lain. Dalam majelis, wadah untuk sisipan dan pasangan disorot secara terpisah. Di dalam eksekusi, juga dimungkinkan untuk memisahkan data awal untuk konstruksi dan hasilnya dalam bentuk triangulasi dan badan.

Jika kita berbicara tentang jenis pemuatan yang disederhanakan, maka rakitan yang dapat diedit dimuat sepenuhnya, dan hanya triangulasi dan, tergantung pada jenisnya, representasi batas (B-rep) dimuat dari sisipannya. Menampilkan sisipan dengan variabel eksternal yang dimodifikasi dalam mode ini menghadirkan beberapa kesulitan, karena sebelumnya diperoleh dengan cepat dengan membangun kembali saat membaca, dan dalam jenis pemuatan yang disederhanakan tidak ada data untuk ini. Solusinya adalah menuliskan hasil membangun kembali sisipan tersebut ke dalam majelis. Ini memberi percepatan dan karena kurangnya pembangunan kembali.
Pembagian dokumen yang dijelaskan ke dalam bagian memungkinkan pemuatan ke dalam rakitan hanya pertunjukan yang dipilih dalam sisipan.
Selain mempercepat pembukaan file, pembacaan parsial juga membantu mengurangi sumber daya yang dikonsumsi - terutama RAM.
Berdasarkan perbaikan, tipe baru pemuatan perakitan muncul - “Sebagian”. Dalam jenis pemuatan ini, hanya hasil (badan, permukaan) dan triangulasi yang dikurangi dari file. Memuat sebagian memungkinkan Anda untuk membuat pasangan dan dekat dalam hal fungsionalitas dengan pemuatan penuh komponen.
Setelah menerapkan peningkatan pada pembacaan parsial, pembuatan jenis pemuatan khusus menjadi menjanjikan.
PetunjukJenis boot khusus adalah kombinasi metode sistem untuk memuat komponen. Fungsi ini bukan hal baru, tetapi peningkatan yang dilakukan pada v18 memungkinkan Anda untuk mendapatkan bonus signifikan dari penggunaannya.
Untuk komponen yang tidak penting untuk pembangunan di masa mendatang, tipe beban "Kosong" dapat diterapkan. Ini mungkin komponen yang tersembunyi di dalam yang lain ("vnutryanka"). Di v18, komponen (dan seluruh rakitan) dengan tipe boot “Empty” terbuka hampir secara instan.
Tabel 4. Waktu pembukaan untuk rakitan dengan jenis boot “Empty” dan “Dimension” dalam hitungan detik. Lebih sedikit lebih baik.Komponen yang tersisa, yang diperlukan untuk memahami penampilan produk atau akan digunakan sebagai objek pendukung untuk konstruksi lebih lanjut, dapat dimuat "Penuh" atau "Sebagian".
Sebagai alat untuk menyiapkan jenis boot khusus, Anda dapat menggunakan perintah baru untuk memilih komponen “tidak terlihat”. Kami menerapkan perintah dan kemudian menggunakan menu konteks untuk mengubah jenis pemuatan untuk komponen yang dipilih menjadi "Kosong".
Proyeksi
Ketika mempercepat proyeksi, kami bertanya pada diri sendiri pertanyaan tentang menyaring data yang diterima pada input dari inti matematika.
Pertama-tama, kami memutuskan untuk menyaring komponen / badan yang tidak terlihat. Untuk tujuan ini, mekanisme oklusi-culling digunakan - ini memungkinkan Anda untuk mengetahui apakah tubuh yang akan diproyeksikan terlihat atau sedang ditutup dan berada di dalam tubuh lain. Operasi ini dilakukan di samping kartu video.
Efek terbesar adalah ketika membuat proyeksi model dengan sejumlah besar komponen yang tersembunyi di dalam volume tertutup, misalnya:
- drive kompleks, gearbox, dll.,
- kendaraan
- bangunan
- lemari dengan peralatan listrik.
Untuk dimasukkan, opsi "Proyeksi kasar" bertanggung jawab. Nama itu tidak disengaja - bagian yang relatif kecil (misalnya, baut pada skala pembangkit listrik) mungkin tidak diproyeksikan pada skala perakitan. Bagi banyak pengguna, keadaan ini akan cocok, terutama dalam hal membuat gambar dimensi dan gambar umum.
Baca lebih lanjut tentang opsi Proyeksi Kasar.Opsi ini hanya tersedia untuk proyeksi standar. Untuk menentukan gambar (bagian, bagian, tampilan jarak jauh) "Proyeksi kasar" tidak terlibat.
Bahkan tanpa menggunakan opsi ini, proyeksi terasa lebih cepat dibandingkan dengan V16 dan v17. Ini dibantu oleh perbaikan di sisi inti matematika.
Tabel 5. Waktu untuk membuat tiga proyeksi standar dalam hitungan detik. Lebih sedikit lebih baik.Juga di v18, kemungkinan membangun kembali spesies asosiatif individu diimplementasikan.
Dalam gambar yang mengandung banyak pandangan asosiatif, pengguna memiliki kesempatan untuk membangun kembali pandangan yang tidak relevan secara individu. Misalnya, yang ingin dia tambahkan penjelasan. Anda juga dapat menentukan tampilan yang dibangun dengan opsi Proyeksi Kasar diaktifkan.
Buat kembali satu tampilan Fitur ini tidak berlaku untuk akselerasi eksplisit, tetapi memungkinkan pengguna untuk menghemat waktu.
Hasil pekerjaan yang dilakukan untuk mempercepat proyeksi pemasangan model teknologi vakum pada gambar:
Pada bagian selanjutnya, kami akan menjelaskan bagaimana kami mempercepat perhitungan karakteristik pemusatan masal (MTC), tentang kontribusi inti geometrik c3dlabs terhadap kinerja COMPAS-3D, perubahan dalam C3D Modeler, dan juga tentang perangkat keras mana yang cocok untuk v18.