Faites passer vos applications PixiJS au niveau supérieur grâce à des stratégies et techniques avancées
Cet article passe en revue les différentes manières d'optimiser au mieux le rendu de plusieurs éléments dans pixiJS en termes de CPU/mémoire. Par exemple, en considérant la différence entre restituer chaque image sans aucune mise en cache (ce qui fonctionne bien en termes d'utilisation du processeur) ou mettre en cache un graphique rendu en mémoire. Cela augmentera l'utilisation de la mémoire proportionnellement au nombre de graphiques dans la scène.
Il existe un certain nombre de stratégies pour gérer de telles optimisations. Il convient de noter en particulier la conception orientée données, qui présente un ensemble d'approches radicalement différentes de la méthode de programmation orientée objet plus traditionnellement courante.
D'autres moyens majeurs incluent : l'élimination et l'utilisation de formats beaucoup plus structurés - NativeArrays en C# et TypedArrays en TypeScript, par exemple. Ceux-ci permettront une gestion bien plus poussée des tampons mémoire, ce qui peut limiter les échecs de cache, mais qui nécessite également une expérience significative en ingénierie et/ou personnalisation.
Dans cet article, je me concentrerai sur une méthode de travail d'optimisation pour un environnement WebGL avec PixiJS : l'approche orientée objet, incluant les meilleures pratiques. Cela vous fournira un moyen bien organisé d'augmenter la vitesse et l'efficacité de vos applications PixiJS.
Dans mon prochain article, je parlerai d'une autre approche d'optimisation forte : l'approche Entité-Composant-Système. L'approche ECS est étonnamment orientée données et offre un nouveau regard lorsqu'il s'agit d'optimiser PixiJS dans des environnements hautes performances. Continuez sur Medium pour cet article où, en profondeur, j'entre dans le vif du sujet de l'approche ECS.
N'oubliez jamais qu'il y a toujours quelque chose à faire de mieux pour tenter d'optimiser et d'améliorer encore les performances de votre application Pixi. Par meilleur, cela ne signifie pas le plus optimisé ou le plus rapide. La meilleure solution est une question de compromis entre le temps que vous investissez dans une optimisation et le retour sur investissement pour vous assurer que vous pouvez respecter les délais du projet, mais avec suffisamment d'optimisation pour, espérons-le, satisfaire tous les utilisateurs potentiels sans sur-étendre vos ressources. &&&]
Approche orientée objetCette section est basée sur des conseils officiels, ça vaut le coup de vérifier !
Le reste de notre discussion portera sur les graphiques Pixi, les sprites, les maillages et quand utiliser un conteneur de particules au lieu du conteneur Pixi par défaut. Ce chapitre devrait vous donner une vision claire de la façon dont tout peut être utilisé de manière optimale dans un contexte orienté objet afin que vos projets PixiJS soient fonctionnels et rendus avec la plus grande efficacité.
Comprendre le fonctionnement interne de Pixi Graphics
const graphics = new PIXI.Graphics(); graphics.beginFill(0xff0000); graphics.drawRect(0, 0, 200, 100); graphics.endFill();Ce qui est important dans cette mise en œuvre simple, cependant, c'est ce qui se passe « sous le capot ». En créant ce type de graphique, Pixi crée quelque chose appelé un objet GraphicsGeometry. Cet objet prend la forme et la taille en fonction des dimensions et des propriétés que vous spécifiez pour la forme que vous dessinez. L'objet Geometry final est ensuite stocké dans une GeometryList au sein de l'objet Graphics.
Notez que chaque fois que vous dessinez quelque chose à l'aide de PIXI.Graphics, GeometryList est mis à jour. Parfois, vous souhaitez simplement effacer cette liste, tout en gardant votre objet Graphics en vie. C'est là que la méthode .clear() entre en jeu. Connaître le fonctionnement de ce processus vous aidera grandement lors de l'utilisation de Pixi, car cela affecte directement la façon dont Pixi gérera et restituera les graphiques dans votre application.
Techniques d'optimisation pour Pixi Graphics
Passer GraphicsGeometry comme référence
Dessinez un objet graphique tout-en-un
Au lieu de restituer 100 graphiques individuels, PixiJS peut en prendre un « instantané » et les restituer sous forme de bitmap unique. Voici comment vous pouvez mettre en œuvre :
const graphics = new PIXI.Graphics(); graphics.beginFill(0xff0000); graphics.drawRect(0, 0, 200, 100); graphics.endFill();Considération sur l'utilisation de la mémoire
En résumé, cacheAsBitmap est un outil efficace pour optimiser les performances dans PixiJS, notamment pour les graphiques statiques ou rarement mis à jour. Il simplifie le rendu en traitant les graphiques complexes comme des bitmaps uniques, mais il est essentiel d'équilibrer cela avec les implications en matière d'empreinte mémoire.
Pourquoi les sprites sont souvent plus efficaces que les graphiques dans PixiJS
Créer des sprites à partir d'une seule texture
Limites et solutions créatives
Par exemple:
const graphics = new PIXI.Graphics(); graphics.beginFill(0xff0000); graphics.drawRect(0, 0, 200, 100); graphics.endFill();Avec cette méthode, .tint() vous permet de colorer le sprite sans déclencher un nouveau rendu complet, car la teinte est appliquée comme un effet de shader supplémentaire directement sur le GPU.
Utiliser 100 000 sprites dans un conteneur de particules
Pour en savoir plus sur l'optimisation de PixiJS, je recommande fortement un article perspicace de l'un des créateurs originaux de PixiJS, qui approfondit la technique de renduTexture.
Vous pouvez le trouver ici
Wow ! Si vous êtes arrivé jusqu'ici, je tiens à vous remercier sincèrement d'être resté à mes côtés tout au long de cette plongée approfondie dans l'optimisation PixiJS. J'espère que vous avez trouvé les idées et les techniques partagées ici utiles pour vos projets. Restez à l'écoute pour mon prochain article, dans lequel j'explorerai l'approche Entity-Component-System (ECS) et la puissance de NativeArrays de manière encore plus détaillée. Ces méthodes propulseront vos applications PixiJS vers de nouveaux sommets en termes de performances et d'efficacité. Merci d'avoir lu et à la prochaine !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3