20 anos se passaram desde o lançamento da primeira versão 3D do KOMPAS - V5.11. Durante esse período, percebemos que as necessidades de nossos usuários estão crescendo proporcionalmente aos recursos do KOMPAS-3D, assim como a funcionalidade do KOMPAS está se expandindo proporcionalmente às necessidades dos usuários. Apenas um problema: construindo a parte tecnológica por muitos anos, encontramos o problema de produtividade ao trabalhar com grandes projetos complexos. Agora, essa linha foi superada e estamos prontos para contar como conseguimos acelerar o KOMPAS-3D em mais de 30 operações básicas.

Paciência não pode ser acelerada
Como entendemos que era hora de "acelerar"?
Se há 12 anos havia trabalho suficiente com montagens de até vários milhares de componentes, agora os usuários do KOMPAS querem fazer projetos complexos para 300.000 componentes em uma montagem, e alguns milhões serão poucos.
A evolução dos projetos dos usuários do KOMPAS-3D: no lado esquerdo do equipamento de moagem e rotor para remoção de neve dos tratores K-700A, K-703MBA , no lado direito a Instalação de Gás a Vapor PGU-410 MW . Se for difícil de ver, clique na imagem.No ServiceDesk - suporte técnico - recebemos solicitações no estilo "Não consigo abrir minha fábrica de manhã" e "o modelo foi aberto, mas não roda".
Há apenas uma conclusão - o COMPAS exigiu uma revisão séria.
Primeiras mudanças
A principal tarefa é aumentar o desempenho do sistema ao trabalhar com montagens grandes. E para aumentar não por 10-30% condicionais, mas várias vezes.
Para resolver esses problemas, em 2015, formamos um grupo de trabalho para acelerar o KOMPAS-3D. Uma espécie de esquadrão de resposta rápida de programadores, testadores e analistas.
Nossa equipe de velocidadeAJUDA: trabalhamos na aceleração antes - essas são otimizações e novas funções que nos permitem resolver alguns dos problemas ao trabalhar com montagens grandes. No entanto, as tarefas não eram tão ambiciosas como são agora, e o trabalho não era tão volumoso.
Como você escolheu os critérios de aceleração?
Nós escolhemos 5 direções para aceleração:
- renderização (rotação, movimento e zoom da imagem do modelo),
- adicionando componentes a uma montagem grande
- abertura de montagem
- edição em montagens,
- projeção
Ao escolher essas áreas, contamos com várias fontes:
- própria experiência e pesquisa,
- análise de pedidos de suporte técnico e análise da base de erros (em nossas ferramentas existe um rótulo especial "desempenho", onde são observados problemas críticos para o desempenho),
- resultados da pesquisa de usuários (os usuários geralmente preenchem esses questionários nos eventos da ASCON),
poderes superiores .
Aqui estamos discutindo algo.Juntamente com a formação do grupo de trabalho, criamos nosso próprio espaço de informações - uma base de conhecimento - anotamos todas as tarefas ali, coletamos e sistematizamos idéias em possíveis áreas de aceleração. Como resultado, os requisitos começaram a se formar com cenários para trabalhos futuros, graças aos quais foi possível controlar o desempenho.
Outro axioma que adotamos ao trabalhar na versão: a produtividade não pode ser simplesmente tomada e aprimorada, e depois esquecida. Era necessário medir e registrar o estado atual, do qual poderíamos repelir. Naquele momento, o ponto de partida era a versão V16 (nossa história ainda está em 2015), que precisava ser controlada por scripts de nosso TK. O desempenho de vários pontos-chave foi controlado manualmente, mas agora esse processo é automatizado graças ao POI.
Anton Sidyakin, programador, líder de equipe:
“Automatizamos os processos graças ao sistema introduzido - POI (Pontos de Interesse). Essas são tags especiais localizadas no código fonte. Segundo eles, executando scripts no KOMPAS-3D descritos pela linguagem do usuário, é possível obter um relatório compreensível não apenas para o programador, mas também para analistas com testadores e ajuda a descobrir o que o KOMPAS-3D faz em um determinado momento e quanto tempo é gasto nele. Em seguida, essas informações podem ser processadas automaticamente e comparadas com os dados de origem ".

Resultados de testes de desempenho automáticos. A propósito, quem já leu esse lugar agora sabe que a placa KDPV é um símbolo da nossa equipe de aceleradores. Eles consideram código lento como código lento)
Quais modelos foram usados para comparação?
Decidimos nos concentrar em modelos de usuários reais que atendam aos critérios de "grandes montagens".
O
banco de dados de modelos da competição Aces de modelagem 3D de computador foi de grande benefício.
Abaixo estão as capturas de tela de nossos modelos favoritos. Obviamente, isso não é tudo e, além disso, estamos confiantes de que os principais modelos dos últimos anos se familiarizarão em breve e a KOMPAS trabalhará com eles não no limite, mas em seu modo regular de alta velocidade.
Quando foi necessário carregar ainda mais o sistema, além desses modelos, também foi utilizada uma peculiar "mistura pré-fabricada", por exemplo:
Também usamos modelos sintéticos: em alguns casos, certos problemas são mais pronunciados e são mais convenientes para depuração e teste.
Sobre desenvolvimento e resultados alcançados
Desenhando
Primeiro, eles procuraram acelerar a renderização (isso também foi solicitado pela maioria dos usuários que participaram da pesquisa).
A velocidade de renderização é crítica em todos os processos em que o modelo está posicionado ou sua exibição é alterada. E isso não é apenas a rotação, movimento ou zoom do modelo. A velocidade de renderização também é importante nos processos em que a imagem do modelo é atualizada:
- Adicionando um componente a uma montagem
- seleção de objetos básicos para posicionamentos (faces, arestas, etc.),
- realce de partes selecionadas do modelo (componentes, faces),
- alterar a visibilidade dos objetos (ocultar / mostrar o componente).
E esses estão longe de todos os casos em que o subsistema de visualização é usado. Portanto, está claro por que a aceleração da renderização se tornou uma prioridade para nós.
Ao mesmo tempo, era importante não apenas usar os recursos das placas de vídeo modernas e produtivas, mas também não esquecer aqueles que usam hardware não tão forte e moderno.
O resultado do trabalho foi a implementação de duas opções de renderização:
- Básico - Ativa as extensões Open GL 2.0. Menos exigente no desempenho da placa de vídeo. Dá boa aceleração de renderização,
- “Melhorado” - usa as extensões modernas do OpenGL 4.5. Exigente sobre as características da placa de vídeo. Oferece aceleração máxima de renderização em mapas modernos
Dica:
Renderize as configurações da v18.Por padrão, "Detecção automática" funciona - a opção desejada é selecionada com base nas extensões OpenGL suportadas.
Yuri Korchagin, programador:
“No problema da exibição de cenas grandes, fica claro que muitos recursos são gastos em percorrer a cena e calcular os parâmetros com os quais a primitiva deve ser exibida.
Outro problema está associado a um grande número de chamadas de desenho (chamadas à API do OpenGL, que levam à saída da geometria para o buffer do quadro).
O estado inicial também assumiu a transferência de todos os dados para a placa de vídeo da RAM. E esses são milhões de triângulos no caso de uma grande montagem.
As correções cosméticas não puderam ser dispensadas aqui, pois era necessário um aumento múltiplo de produtividade. Portanto, foi decidido reescrever amplamente o módulo de visualização.
O primeiro passo foi usar a memória de vídeo para armazenar em cache os dados do desenho (triangulação, estrutura de arame, faces). Ao mover esses dados para a GPU, conseguimos um aumento de 2-3 vezes no FPS.
Isto foi seguido pela criação de um modelo de dados adaptado para visualização. Ou seja, nos livramos das solicitações de um modelo 3D, que pode consumir bastante recursos, o que também deu seu efeito positivo.
O próximo passo foi estudar a qualidade e o volume da triangulação. Frequentemente, pequenos detalhes eram exibidos com precisão excessiva e vice-versa - em determinadas situações, em vez de superfícies lisas, o usuário via um modelo "picado" na tela.
Decidimos usar vários níveis de detalhe e aplicar a aproximação das primitivas levando em consideração o desvio angular. Dessa maneira, dois pássaros com uma cajadada foram mortos: eles melhoraram a qualidade e eliminaram a carga excessiva na GPU ".
Spoiler: Sobre a triangulação
Especificado por Nikita Batyanov, engenheira analítica:
“Para uma exibição mais correta e geralmente agradável dos modelos, decidimos complementar os parâmetros de triangulação com um desvio angular máximo. Anteriormente, usamos apenas o parâmetro de desvio linear máximo.
Deixe-me lembrá-lo: para que a placa de vídeo desenhe nossas representações teóricas dos objetos, é necessário dividi-las em triângulos. Quanto mais triângulos houver, mais a imagem parecerá "ideal", mas mais forte será a carga na placa de vídeo.
O algoritmo de triangulação que usa o desvio angular máximo permite exibir com mais precisão alguns modelos, sem aumentar o número de triângulos tanto quanto se apenas o desvio linear máximo fosse usado.
"Podemos desenhar objetos menores em relação às dimensões de todo o modelo, enquanto exageramos um pouco o número de triângulos".
Yuri Korchagin, programador:
“Bem, exibir o modelo se tornou mais rápido, mas não tanto quanto gostaríamos. Nesse estágio, percebemos que não podíamos tirar mais proveito dessa abordagem.
Por outro lado, o uso das abordagens mais recentes exigirá as placas de vídeo mais atualizadas, o que contradiz os requisitos de compatibilidade e alguns usuários claramente não vão gostar. Portanto, as melhorias descritas acima tornaram-se disponíveis como uma opção de renderização "Básica".
E então a diversão começou ... "
Na próxima parte, continuamos nossa história sobre renderização e também mostramos os resultados da medição da velocidade de renderização durante a rotação da montagem, cálculos do MTC, adição de componentes à montagem e informamos sobre a aparência de um tipo de carga parcial.
E para a sobremesa, eles deixaram um vídeo para você comparar a velocidade de renderização durante a rotação, redimensionamento e mudança do redutor de uma usina marítima.
O fim da primeira parte. Para ser continuado .