Um conjunto de técnicas para evitar pedidos explícitos tem o nome de Transparência Independente dos Pedidos (OIT, abreviado).
Existem muitas técnicas de OIT.
Historicamente, um é o peeling de profundidade . Nesta abordagem, você primeiro renderiza os fragmentos / pixels mais frontais e, em seguida, encontra o mais próximo do encontrado na etapa anterior e assim por diante, continuando com a "camada" necessária. É chamado de descascamento em profundidade, porque a cada passo você "descasca" uma camada de profundidade. Toda a sua camada pode ser recombinada normalmente de trás para frente. Para implementar esse algoritmo, você precisa ter uma cópia do buffer de profundidade.
Outro conjunto de técnicas são as misturas OIT. Um dos mais recentes e interessantes é o OIT Blended Weighted, proposto por McGuire e Bavoil . Basicamente, aplica uma soma ponderada para todas as superfícies que ocupam um dado fragmento. O esquema de ponderação que eles propõem é baseado no espaço da câmera Z (como uma aproximação à oclusão) e na opacidade.
A idéia é que, se você pode reduzir o problema a uma soma ponderada, não se importa muito com o pedido.
Além do artigo original, um ótimo recurso para detalhes de implementação e problemas do OIT ponderado misturado está no blog de Matt Pettineo . Como você pode ler em seu post, essa técnica não é uma bala de prata. O principal problema é que o esquema de ponderação é central e precisa ser ajustado de acordo com a sua cena / conteúdo. A partir de seus experimentos, embora a técnica pareça funcionar bem para a opacidade relativamente baixa e média, ela falha quando a opacidade se aproxima de 1 e, portanto, não pode ser usada em materiais onde grande parte da superfície é opaca (ele é o exemplo da folhagem).
Novamente, tudo se resume a como você ajusta seus pesos de profundidade e encontrar aqueles que se encaixam perfeitamente em seus casos de uso não é necessariamente trivial.
Quanto ao que é necessário para o OIT Blended Ponderado, nada mais que dois destinos de renderização extras. Uma que você preencha com a cor alfa pré-multiplicada (cor * alfa) e alfa, ambas ponderadas de acordo. O outro apenas para os pesos.