En la
última parte, hablamos sobre el nacimiento de KOMPAS-3D v18, algo sobre la selección de criterios y modelos para probar nuevas funciones, y también tocamos el tema del renderizado en la versión "Básica".
Continuemos con la historia sobre la opción de representación "Mejorada".
Llamadas de dibujo
Alexander Tulup, programador:
"El principal problema del rendimiento de mostrar escenas grandes está asociado con una gran cantidad de llamadas" llamadas de dibujo ". La versión anterior de la representación se basa en el modelo de datos matemáticos. Por lo tanto, para cada primitivo (puntos, aristas, caras), se requería un método separado para su visualización.
Para cada llamada de sorteo, OpenGL (controlador) realiza una serie de comprobaciones, traduciendo simultáneamente los comandos entrantes a un formato que la tarjeta de video entienda, después de lo cual las llamadas se agregan a la cola y ya se envían para su ejecución.

Esquema de transferencia de comandos de GPU en OpenGL ( fuente )
Con una gran cantidad de detalles, la cantidad de llamadas a la CPU crece tanto que los datos simplemente no tienen tiempo de llegar a la tarjeta de video. Tenemos una situación en la que en una tarjeta de video muy fuerte se "ralentiza" de la misma manera que en una tarjeta mediana o más débil.
Puede lidiar con esto reduciendo el número de representaciones (transiciones de estado): agrupe por material, combine geometría común ( instancias ), etc.
No debemos olvidar que de toda la escena solo vemos una cierta parte de ella. Los algoritmos para detectar objetos invisibles son aplicables aquí (eliminación del frustum, eliminación de oclusiones, etc.)
Inspirados en el ejemplo de The Road to One Million Draws y AZDO , decidimos tomar un camino bastante inusual: deshacerse de los cambios de estado en el lado de la CPU tanto como sea posible. Ahora casi todo se hace en la tarjeta gráfica. Todos los atributos necesarios se toman directamente de la memoria de video mientras se extrae del sombreador ( shader ), lo que fue posible gracias al aumento de la memoria de video ( VRAM ) y la llegada de SSBO .

1,000,000 dados
De las ventajas de este enfoque: la velocidad de visualización se ha vuelto realmente alta. La velocidad está limitada solo por las capacidades de la GPU, es decir, la cantidad de datos que puede procesar.
También permitió implementar de manera bastante eficiente mecanismos de recorte para objetos invisibles. Los resultados de la verificación de visibilidad se registran directamente en la memoria de video, y desde allí se forman los comandos de dibujo en función de ellos. Es decir, en el lado de la CPU, no necesita esperar.
Una de las principales desventajas de este enfoque es la alta complejidad del desarrollo. Mucho tiene que implementarse nuevamente, teniendo en cuenta el enfoque elegido. Además, a menudo tuvimos que lidiar con una situación en la que el mismo código de sombreador funcionaba de manera diferente o no funcionaba en absoluto en las tarjetas de video de diferentes fabricantes. A menudo, esto fue "tratado" actualizando el controlador, pero a veces después de una larga depuración fue necesario reescribir el código.
Naturalmente, los requisitos para la tarjeta de video también aumentaron. El soporte para OpenGL 4.5 es una clave, pero no el único requisito.
A continuación presentamos los resultados de la velocidad de renderizado durante la rotación del ensamblaje. Recuerde que 24 cuadros por segundo (fps) se consideran indicadores cómodos para el ojo humano.
En adelante, las mediciones se tomaron en una PC con la siguiente configuración:
CPU: Intel Core i7-6700K 4.00 GHz
RAM: 32 Gb
GPU: NVidia Quadro P2000
SO: Microsoft Windows 10 x64 Profesional
Tabla 1. Velocidad de cuadros (cuadros por segundo, fps) en varios modelos. Más es mejor. Modo de visualización: medios tonos + estructura metálica, modo simplificado deshabilitado, calidad de suavizado: medio (MSAA 8x)Modelo | Cantidad componentes | Velocidad de fotogramas, fps |
V16.1 | v17.1 | v18 |
 Coche molienda de mosaico
| 2764 | 4.1 | 4.7 | 124,9 |
 PGU-410 | 108337 | 0,3 | 0.4 0.4 | 28,6 |
 Volquete del coche | 17342 | 1,1 | 1.4 | 124,7 |
 Trolebús | 9783 | 1.9 | 2,4 | 124,9 |
 Marea norte central eléctrica | 48445 | 0,3 | 0.5 0.5 | 76,1 |
 Instalación vacío tecnológico | 7189 | 1.9 | 2,3 | 124,9 |
 Reductor de la nave planta de energia | 6414 | 2.6 | 3.6 | 123,9 |
Agregar componentes a un ensamblaje grande
El escenario con la adición de componentes a un conjunto grande finalmente se convirtió en la llamada prueba compleja, que se describe en la Tabla 2.
Tabla 2. Escenario con la adición de componentes a un conjunto grande. Criterios de prueba.Criterio | Descripción del criterio |
Velocidad de apertura de archivo | El componente agregado al ensamblaje debe cargarse desde el disco |
Velocidad de procesamiento | El ensamblaje y el componente insertado deben colocarse, para esto debe rotar / mover / hacer zoom en la imagen |
Velocidad de selección de objetos | Para crear compañeros, debe seleccionar los objetos básicos: caras, planos, aristas, etc. |
Velocidad de sincronización con el árbol de construcción. | El componente agregado al ensamblaje y sus interfaces deben estar representados en el árbol de construcción. |
Velocidad de sincronización del módulo de especificación | El componente agregado al ensamblaje debe considerarse en la especificación. |
En la tabla puede ver los puntos (dibujo, apertura), que desde el principio se seleccionaron como direcciones separadas de aceleraciones. Pero las mejoras requerían otros componentes.
La sincronización con un árbol tomó mucho tiempo. Resolvimos el problema implementando una actualización parcial.
Otra dificultad fue el impacto significativo de la especificación en el rendimiento de KOMPAS-3D. En algunos escenarios de prueba complejos, este componente era el principal (50% o más).
EspecificaciónLa especificación es el módulo del sistema KOMPAS-3D, que es responsable de la formación del documento de diseño del mismo nombre. Es desarrollado por un equipo separado.
En particular, el equipo aceleró la sincronización durante la inserción al rediseñar los mecanismos internos del módulo de especificación.
Algunos resultados
Agregue componentes al ensamblaje "Reductor de la planta de energía del barco".
Prueba exhaustiva para el montaje "Reductor de una central eléctrica marina".
Los números muestran: 1 - soporte, 2 - arandela, 3 - perno.Tabla 3. Tiempo de inserción de componentes en un conjunto grande en segundos. Menos es mejorComponente | Acción | Tiempo s |
V16.1 | v17.1 | v18 |
Insertar componente Soporte
 | Cargando | 2,0 | 3.0 | 2.2 2.2 |
Cambiar al modo de emparejamiento | 0.6 | 0.4 0.4 | 0.4 0.4 |
Primer emparejamiento | Selección de primer objeto | 0.4 0.4 | 1,0 | 0.2 0.2 |
La elección del segundo objeto. | 0.5 0.5 | 1,1 | 0.2 0.2 |
Seleccione el emparejamiento correcto | 3.8 | 3.6 | 1,0 |
Segundo emparejamiento | Selección de primer objeto | 0.5 0.5 | 1.4 | 0.5 0.5 |
La elección del segundo objeto. | 0.5 0.5 | 1.4 | 0.2 0.2 |
Seleccione el emparejamiento correcto | 3.6 | 3.0 | 1,2 |
Tercer emparejamiento | Selección de primer objeto | 0.5 0.5 | 0.5 0.5 | 0.5 0.5 |
La elección del segundo objeto. | 0,3 | 1,1 | 0,3 |
Seleccione el emparejamiento correcto | 3,7 | 3.2 | 1,1 |
Confirmar creación de inserción | 7.8 | 5.2 | 2,3 |
Inserto de soporte total | 24,2 | 24,6 | 10,1 |
Insertar arandelas de la biblioteca estándar productos

| Primera selección de emparejamiento | 6.4 | 2,4 | 0.4 0.4 |
Selección del segundo par | 4.2 4.2 | 3,1 | 0.4 0.4 |
Confirmar creación de inserción | 15,7 | 9.2 | 4.4 |
Total para arandelas de inserción | 26,3 | 14,7 | 5.2 |
Insertar tornillos
 | Cargando | 2,0 | 2.7 | 2,0 |
Cambiar al modo de emparejamiento | 0.5 0.5 | 0.5 0.5 | 0.5 0.5 |
Primer emparejamiento | Selección de primer objeto | 0.4 0.4 | 1,0 | 0.2 0.2 |
La elección del segundo objeto. | 0.4 0.4 | 1,1 | 0.2 0.2 |
Seleccione el emparejamiento correcto | 3.4 | 2.7 | 1,0 |
Segundo emparejamiento | Selección de primer objeto | 0.4 0.4 | 1,2 | 0.4 0.4 |
La elección del segundo objeto. | 0.5 0.5 | 0.5 0.5 | 0.4 0.4 |
Seleccione el emparejamiento correcto | 3,7 | 2.9 | 1,0 |
Tercer emparejamiento | Selección de primer objeto | 0.5 0.5 | 1,0 | 0.5 0.5 |
La elección del segundo objeto. | 0.5 0.5 | 1,0 | 0.2 0.2 |
Seleccione el emparejamiento correcto | 4.2 4.2 | 3.9 | 1,2 |
Confirmar creación de inserción | 32,5 | 5,4 | 2.2 2.2 |
Total para inserción de pernos | 49 | 21,2 | 9,8 |
La inserción total de los tres componentes. | 99,5 | 60,5 | 25,1 |
Una prueba exhaustiva puede considerarse como uno de los escenarios de edición del ensamblaje (a partir del número de los comunes).
Además, la reconstrucción de la asamblea se aceleró. Ahora, si edita una operación, todo el ensamblaje no se reconstruirá por completo, solo se actualizarán los objetos modificados. Para determinar las operaciones dependientes, es decir, aquellas operaciones cuyo resultado podría verse afectado por el resultado de la operación modificada, se utiliza un algoritmo especial que construye relaciones entre operaciones, cuerpos e inserciones.
Ensambles de apertura
La idea principal para aumentar la velocidad de lectura de archivos es hacer que KOMPAS-3D lea solo lo que el usuario necesita en este momento.
Por ejemplo:
- solo lectura de ejecución actual para inserciones de ensamblaje,
- para los tipos de descarga, lea solo la información necesaria: triangulación o triangulación + resultados ( B-rep ).
Todo esto requería un refinamiento de la estructura de datos en el archivo para poder leer sus partes individuales.
Anton Sidyakin, programador, jefe de equipo:
“Desde hace algún tiempo, el archivo KOMPAS-3D ha sido un archivo que combina varios archivos de servicio. Uno de ellos contiene datos de documento de modelo / ensamblaje organizados en una estructura de árbol. La capacidad de navegar esta estructura ya existía. Para una lectura parcial, era necesario garantizar la independencia de las partes entre sí. Por lo tanto, las partes recibidas no deberían haberse referido entre sí, de lo contrario la parte con el enlace se habría convertido en "inferior".
Como resultado, para detalles, fue posible separar el rendimiento del documento y entre sí. En ensamblajes, el contenedor para insertos y compañeros se resalta por separado. Dentro de las ejecuciones, también fue posible separar los datos iniciales para la construcción y los resultados en forma de triangulación y cuerpos.

Si hablamos de tipos simplificados de carga, entonces el ensamblaje editable se carga completamente, y solo la triangulación y, según el tipo, la representación de límites (B-rep) se cargan desde sus inserciones. La visualización de insertos con variables externas modificadas en este modo presentaba algunas dificultades, ya que se obtuvieron previamente sobre la marcha mediante la reconstrucción durante la lectura, y en los tipos simplificados de carga no hay datos para esto. La solución fue anotar los resultados de la reconstrucción de estos insertos en el ensamblaje. Esto dio aceleración y debido a la falta de reconstrucción.
La división descrita del documento en partes permitió cargar en el ensamblaje solo las actuaciones seleccionadas en los insertos.
Además de acelerar la apertura de archivos, la lectura parcial también ayudó a reducir los recursos consumidos, principalmente RAM.
Según las mejoras, apareció un nuevo tipo de carga de ensamblaje: "Parcial". En este tipo de carga, solo los resultados (cuerpos, superficies) y la triangulación se restan del archivo. La carga parcial le permite crear emparejamientos y está cerca en términos de funcionalidad a la carga completa de componentes.
Después de implementar mejoras en la lectura parcial, la creación de tipos de carga personalizados se vuelve prometedora.
PistaLos tipos de arranque personalizados son combinaciones de métodos del sistema para cargar un componente. Esta función no es nueva, pero las mejoras realizadas en v18 le permiten obtener importantes bonificaciones por su uso.
Para componentes que no son importantes para futuras compilaciones, se puede aplicar el tipo de carga "Vacío". Estos pueden ser componentes ocultos dentro de otros ("vnutryanka"). En v18, los componentes (y conjuntos completos) con el tipo de arranque "Vacío" se abren casi instantáneamente.
Tabla 4. Tiempos de apertura para ensamblajes con los tipos de arranque "Vacío" y "Dimensión" en segundos. Menos es mejorModelo | Tipo de descarga | Tiempo de apertura, s |
V16.1 | v17.1 | v18 |
 Instalación vacío tecnológico | Vacio | 12,8 | 11,7 | 2,5 |
Tamaño | 21,2 | 20,8 | 2.6 |
 Reductor de la nave planta de energia | Vacio | 31,0 | 15,9 | 7.2 |
Tamaño | 371,5 | 114,8 | 7.3 |
Los componentes restantes, que son necesarios para comprender el aspecto del producto o se utilizarán como objetos de soporte para la construcción posterior, se pueden cargar "Completo" o "Parcialmente".
Como herramienta para preparar tipos de arranque personalizados, puede usar nuevos comandos para seleccionar componentes "invisibles". Aplicamos el comando y luego usamos el menú contextual para cambiar el tipo de carga de los componentes seleccionados a "Vacío".
Proyeccion
Al acelerar la proyección, nos hicimos la pregunta de filtrar los datos recibidos en la entrada del núcleo matemático.
En primer lugar, decidimos filtrar componentes / cuerpos invisibles. Para este propósito, se utilizó el mecanismo de eliminación de oclusiones: le permite averiguar si el cuerpo que se proyectará es visible o si se está cerrando y está dentro de otro cuerpo. Esta operación se realiza al costado de la tarjeta de video.
El mayor efecto será al crear proyecciones de modelos con una gran cantidad de componentes ocultos dentro de volúmenes cerrados, por ejemplo:
- accionamientos complejos, cajas de cambios, etc.
- vehículos
- edificios
- Armarios con equipo eléctrico.
Para su inclusión, la opción "Proyección aproximada" es responsable. El nombre no es accidental: es posible que no se proyecten piezas relativamente pequeñas (por ejemplo, un tornillo a la escala de una planta de energía) en una escala de ensamblaje. Para muchos usuarios, este estado de cosas se adaptará, especialmente en el caso de crear dibujos dimensionales y dibujos generales.
Lea más sobre la opción de Proyección aproximada.La opción está disponible solo para proyecciones estándar. Para especificar imágenes (secciones, secciones, vistas remotas) "La proyección aproximada" no está involucrada.
Incluso sin usar esta opción, la proyección es notablemente más rápida en comparación con V16 y v17. Esto fue ayudado por mejoras en el lado del núcleo matemático.
Tabla 5. Tiempo para crear tres proyecciones estándar en segundos. Menos es mejorModelo | Tiempo para crear tres proyecciones estándar, s |
V16.1 | v17.1 | v18 Incluido borrador proyección | v18 Apagado borrador proyección |
 Instalación vacío tecnológico | 124,1 | 47,5 | 12,9 | 34,6 |
 Reductor de la nave planta de energia | 256 | 410 | 38,4 | 54,4 |
 Multipropósito unificado cuerpo de caja | 99,9 | 123,4 | 44,9 | 53,5 |
También en v18, se implementó la posibilidad de reconstruir especies asociativas individuales.
En un dibujo que contiene muchas vistas asociativas, el usuario tiene la oportunidad de reconstruir vistas irrelevantes individuales. Por ejemplo, aquel al que quiere agregar anotaciones. También puede especificar las vistas creadas con la opción Proyección aproximada habilitada.
Reconstruir una vista única Esta característica no se aplica a aceleraciones explícitas, pero permite al usuario ahorrar tiempo.
El resultado del trabajo realizado para acelerar la proyección del modelo de instalación tecnológica de vacío en el dibujo:
En la siguiente parte, describiremos cómo aceleramos el cálculo de las características de centrado de masa (MTC), sobre la contribución del núcleo geométrico c3dlabs al rendimiento de COMPAS-3D, los cambios en C3D Modeler y también sobre qué hardware es adecuado para v18.