Leve seus aplicativos PixiJS para o próximo nível com estratégias e técnicas avançadas
Esta postagem aborda as diferentes maneiras de otimizar melhor a renderização de vários elementos dentro do pixiJS em termos de CPU/Memória. Por exemplo, considerando a diferença entre renderizar novamente cada quadro sem qualquer cache - que funciona bem em termos de uso da CPU - ou armazenar em cache um gráfico renderizado na memória. Isso aumentará o uso de memória proporcionalmente ao número de gráficos na cena.
Existem várias estratégias para lidar com essas otimizações. Digno de nota é o Design Orientado a Dados, que apresenta um conjunto radicalmente alternativo de abordagens da forma mais tradicionalmente comum de programação Orientada a Objetos.
Outras formas importantes incluem: selecionar e utilizar formatos muito mais estruturados - NativeArrays em C# e TypedArrays em TypeScript, por exemplo. Isso permitirá um gerenciamento muito maior de buffers de memória, o que pode limitar falhas de cache, mas que também requer experiência significativa em engenharia e/ou personalização.Nesta postagem, focarei em um método de trabalho de otimização para um ambiente WebGL com PixiJS: a abordagem orientada a objetos, incluindo as melhores práticas. Isso fornecerá a você um meio bem organizado para aumentar a velocidade e a eficiência em seus aplicativos PixiJS.
Em meu próximo artigo, falarei sobre outra forte abordagem de otimização: a abordagem Entidade-Componente-Sistema. A abordagem ECS é surpreendentemente orientada a dados e oferece uma nova visão quando se trata de otimizar PixiJS em ambientes de alto desempenho. Continue no Medium para este artigo, onde, em profundidade, abordo os detalhes da abordagem ECS.
Lembre-se sempre de que sempre há algo que pode ser feito melhor na tentativa de otimizar e melhorar ainda mais o desempenho do seu aplicativo Pixi. Por melhor, não significa mais otimizado ou mais rápido. A melhor solução é uma questão de equilíbrio entre a quantidade de tempo que você investe em uma otimização e o retorno desse investimento para garantir que você possa cumprir os prazos do projeto, mas com otimização suficiente para satisfazer qualquer usuário em potencial sem expandir demais seus recursos.
Abordagem Orientada a Objetos
Esta seção é baseada em dicas oficiais, vale a pena conferir!
O resto da nossa discussão girará em torno de Pixi Graphics, Sprites, Meshes e quando usar um Particle Container em vez do Pixi Container padrão. Este capítulo deve lhe dar uma visão clara de como tudo pode ser usado de forma otimizada em um contexto orientado a objetos para que seus projetos PixiJS sejam funcionais e renderizados com a maior eficiência.
Compreendendo o funcionamento interno dos gráficos Pixi
const graphics = new PIXI.Graphics(); graphics.beginFill(0xff0000); graphics.drawRect(0, 0, 200, 100); graphics.endFill();O que é importante nesta implementação simples, entretanto, é o que acontece “nos bastidores”. Ao criar esse tipo de gráfico, Pixi cria algo chamado objeto GraphicsGeometry. Esse objeto assume a forma e o tamanho com base nas dimensões e propriedades especificadas para a forma que você está desenhando. O objeto Geometry final é então armazenado dentro de um GeometryList dentro do objeto Graphics.
Observe que cada vez que você desenha algo com a ajuda do PIXI.Graphics, GeometryList é atualizado. Às vezes, você só quer limpar esta lista, mas ao mesmo tempo manter seu objeto Graphics vivo - é aí que o método .clear() entra em ação. Saber como esse processo funciona irá ajudá-lo muito ao usar o Pixi, pois afeta diretamente como o Pixi irá manipular e renderizar os gráficos em seu aplicativo.
Técnicas de otimização para gráficos Pixi
Passando GraphicsGeometry como referência
Desenhe tudo em um objeto gráfico
Em vez de renderizar novamente 100 gráficos individuais, o PixiJS pode tirar um 'instantâneo' deles e renderizá-los como um único bitmap. É assim que você pode implementar:
const graphics = new PIXI.Graphics(); graphics.beginFill(0xff0000); graphics.drawRect(0, 0, 200, 100); graphics.endFill();Consideração sobre uso de memória
Em resumo, cacheAsBitmap é uma ferramenta eficaz para otimizar o desempenho em PixiJS, especialmente para gráficos estáticos ou raramente atualizados. Ele simplifica a renderização tratando gráficos complexos como bitmaps únicos, mas é essencial equilibrar isso com as implicações do consumo de memória.
Por que Sprites costumam ser mais eficientes que gráficos no PixiJS
Criando Sprites a partir de uma única textura
Limitações e soluções criativas
Por exemplo:
const graphics = new PIXI.Graphics(); graphics.beginFill(0xff0000); graphics.drawRect(0, 0, 200, 100); graphics.endFill();Com esse método, .tint() permite colorir o sprite sem acionar uma nova renderização completa, já que a tonalidade é aplicada como um efeito de sombreamento adicional diretamente na GPU.
Usando 100k Sprites no Particle Container
Para ler mais sobre como otimizar o PixiJS, recomendo fortemente um artigo esclarecedor de um dos criadores originais do PixiJS, que se aprofunda na técnica renderTexture.
Você pode encontrá-lo aqui
Uau! Se você chegou até aqui, quero agradecer sinceramente por permanecer comigo neste mergulho profundo na otimização do PixiJS. Espero que você tenha achado os insights e técnicas compartilhados aqui valiosos para seus projetos. Fique ligado no meu próximo artigo, onde explorarei a abordagem Entity-Component-System (ECS) e o poder dos NativeArrays com ainda mais detalhes. Esses métodos levarão seus aplicativos PixiJS a novos patamares de desempenho e eficiência. Obrigado pela leitura e até a próxima!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3