Estoy escribiendo un sistema de partículas y me gustaría encontrar un truco para lograr una combinación alfa adecuada sin clasificar las partículas porque:
- Cada partícula es un sprite puntual en una sola malla y no puedo usar la capacidad del gráfico de escena para ordenar nodos transparentes. Sin embargo, el nodo del sistema debe estar ordenado correctamente.
- La posición de la partícula se calcula en el sombreador a partir de la velocidad inicial, la aceleración y el tiempo. Para ordenar el sistema, tendría que realizar todos estos cálculos en la CPU, que es algo que quiero evitar.
- Clasificar cientos de partículas contra la posición de la cámara y cargarlas en la GPU cada costura del cuadro para que sea una operación silenciosa y pesada.
Las pruebas alfa parecen ser lo suficientemente rápidas en GLES 2.0 y funcionan bien para texturas no transparentes pero "enmascaradas". Aún así, no es suficiente para partículas semitransparentes.
¿Cómo manejarías esto?
opengl
opengl-es
particles
transparency
Stepan Zastupov
fuente
fuente
Respuestas:
Esto es lo que haría.
Paso 1: no ordenar. Simplemente hazlo. A ver si es un problema. Lo más probable es que no lo sea.
Paso 2: limite las partículas de tal manera que realmente no necesiten clasificación, tales como:
Solo sólidos (posiblemente con bordes de alfa a cobertura)
Solo bits aditivos
Paso 3: si se necesita más, divida el renderizado de partículas en bits que deben estar al frente y el resto, y realice el renderizado en varias pasadas (por ejemplo, podría solucionar el humo complejo)
Paso 4: si aún se necesita más, o si necesita una solución general, una cosa que viene a la mente sería usar MRT para obtener una clasificación de cubos de N muy aproximada; renderice las partículas en N superficies de salida y compóngalas en un paso separado.
Cualquier otra cosa requeriría más información sobre su caso de uso específico. Pero estoy bastante seguro de que, después de todo, realmente no necesita la independencia del orden. Simplemente use suficientes partículas al azar y estará bien =)
fuente
Simplemente no escriba en el búfer de profundidad cuando renderice las partículas. Esto les permitirá a todos ser procesados y mezclados entre sí. Sin embargo, aún debe realizar pruebas de profundidad para que puedan ser ocluidas adecuadamente por la geometría en la escena.
fuente
El uso del orden de mezcla aditiva no importa:
Esto supone que la textura de tu sprite tiene un fondo transparente.
fuente