Je sais que cette question peut sembler un peu facile à répondre, mais cela me rend fou. Il y a trop de situations possibles qu'un bon mécanisme de mélange alpha devrait gérer, et pour chaque algorithme auquel je pense, il manque quelque chose.
Voici les méthodes auxquelles j'ai pensé jusqu'à présent:
Tout d'abord, je pensais au tri des objets par profondeur, celui-ci échoue simplement parce que les objets ne sont pas des formes simples, ils peuvent avoir des courbes et peuvent boucler les uns dans les autres. Je ne peux donc pas toujours dire lequel est le plus proche de la caméra.
Ensuite, j'ai pensé à trier les triangles, mais celui-ci pourrait également échouer, je ne sais pas comment le mettre en œuvre.Il existe un cas rare qui pourrait à nouveau causer un problème, dans lequel deux triangles se traversent. Encore une fois, personne ne peut dire lequel est le plus proche.
La prochaine chose était d'utiliser le tampon de profondeur, au moins la principale raison pour laquelle nous avons un tampon de profondeur est à cause des problèmes de tri que j'ai mentionnés, mais maintenant nous obtenons un autre problème. Étant donné que les objets peuvent être transparents, dans un seul pixel, plusieurs objets peuvent être visibles. Alors, pour quel objet dois-je stocker la profondeur de pixels?
J'ai alors pensé que je ne pouvais peut-être stocker que la profondeur d'objet la plus frontale, et en utilisant cela, déterminer comment mélanger les prochains appels de dessin à ce pixel. Mais encore une fois, il y avait un problème, pensez à deux plans semi-transparents avec un plan solide au milieu d'eux. J'allais rendre le plan solide à la fin, on peut voir le plan le plus éloigné. Notez que j'allais fusionner tous les deux plans jusqu'à ce qu'il ne reste qu'une seule couleur pour ce pixel. Évidemment, je peux également utiliser des méthodes de tri pour les mêmes raisons que celles expliquées ci-dessus.
Enfin, la seule chose que j'imagine pouvoir travailler est de rendre tous les objets dans différentes cibles de rendu, puis de trier ces calques et d'afficher la sortie finale. Mais cette fois, je ne sais pas comment mettre en œuvre cet algorithme.