J'écris un système de particules et je voudrais trouver une astuce pour réaliser un mélange alpha correct sans trier les particules car:
- Chaque particule est un sprite ponctuel dans un seul maillage et je ne peux pas utiliser la capacité de graphe de scène pour trier les nœuds transparents. Cependant, le nœud système doit être correctement trié.
- La position des particules est calculée sur le shader à partir de la vitesse initiale, de l'accélération et du temps. Afin de trier le système, je devrais effectuer tous ces calculs sur le processeur, ce que je veux éviter.
- Trier des centaines de particules par rapport à la position de la caméra et les télécharger sur les coutures GPU de chaque image pour un fonctionnement silencieux et intensif.
Le test alpha semble être assez rapide sur GLES 2.0 et fonctionne très bien pour les textures non transparentes mais "masquées". Pourtant, cela ne suffit pas pour les particules semi-transparentes.
Comment voulez-vous gérer cela?
opengl
opengl-es
particles
transparency
Stepan Zastupov
la source
la source
Réponses:
Voici ce que je ferais.
Étape 1: ne triez pas. Simplement fais-le. Voyez si c'est un problème. Probablement pas.
Étape 2: Limitez les particules dans celles qui n'ont pas vraiment besoin d'être triées, telles que:
Juste des solides (avec éventuellement des bords alpha à couvrant)
Juste des bits additifs
Étape 3: si plus est nécessaire, divisez le rendu des particules en bits qui doivent être devant et le reste, et effectuez le rendu en plusieurs passes (pourrait corriger la fumée complexe, par exemple)
Étape 4: si plus est encore nécessaire, ou si vous avez besoin d'une solution générale, une chose qui vous vient à l'esprit serait d'utiliser les TRM pour effectuer un tri très approximatif du seau N; rendre les particules dans N surfaces de sortie et les composer dans une passe séparée.
Tout autre élément nécessiterait plus d'informations sur votre cas d'utilisation spécifique. Mais je suis quasiment sûr que vous n'avez pas vraiment besoin de l'indépendance des commandes après tout. Utilisez juste assez de particules au hasard et ça ira =)
la source
N'écrivez simplement pas dans le tampon de profondeur lors du rendu des particules. Cela leur permettra d'être tous rendus et mélangés les uns avec les autres. Cependant, vous devez toujours effectuer des tests de profondeur afin qu'ils puissent être correctement occlus par la géométrie dans la scène.
la source
L'utilisation de l'ordre de mélange additif n'a pas d'importance:
Cela suppose que votre texture de sprite a un fond transparent.
la source