Sé que esta pregunta puede sonar un poco fácil de responder, pero me está volviendo loco. Hay demasiadas situaciones posibles que un buen mecanismo de mezcla alfa debería manejar, y para cada Algoritmo que se me ocurre, falta algo.
Estos son los métodos que he pensado hasta ahora:
En primer lugar, pensé en la ordenación de objetos por profundidad, este simplemente falla porque los objetos no son formas simples, pueden tener curvas y pueden bucle uno dentro del otro. Así que no siempre puedo decir cuál está más cerca de la cámara.
Luego pensé en ordenar triángulos, pero este también podría fallar, aunque no estoy seguro de cómo implementarlo, hay un caso raro que podría causar un problema, en el que dos triángulos se cruzan entre sí. De nuevo, nadie puede decir cuál está más cerca.
Lo siguiente fue usar el buffer de profundidad, al menos la razón principal por la que tenemos buffer de profundidad es por los problemas de clasificación que mencioné pero ahora tenemos otro problema. Como los objetos pueden ser transparentes, en un solo píxel puede haber más de un objeto visible. Entonces, ¿para qué objeto debo almacenar la profundidad de píxeles?
Entonces pensé que tal vez solo podría almacenar la mayor profundidad de objeto frontal, y usar eso determina cómo debería combinar las siguientes llamadas de dibujo en ese píxel. Pero nuevamente hubo un problema, piense en dos planos semitransparentes con un plano sólido en el medio. Iba a renderizar el plano sólido al final, uno puede ver el plano más distante. Tenga en cuenta que iba a fusionar cada dos planos hasta que solo quedara un color para ese píxel. Obviamente, también puedo usar métodos de clasificación por las mismas razones que he explicado anteriormente.
Finalmente, lo único que imagino que es capaz de trabajar es renderizar todos los objetos en diferentes objetivos de renderizado y luego ordenar esas capas y mostrar el resultado final. Pero esta vez no sé cómo puedo implementar este algoritmo.