Tras terminar el cursillo de shaders, ya no tengo tan claro la manera de estructurar el sistema gráfico en relación al árbol de nodos de la escena. Y la principal culpa la tienen los sistemas de partículas. Originalmente, mi idea era tener un árbol de nodos independientes, a los cuales se les ‘enganchaban’ los nodos gráficos, de sonido, etc. Algo similar a lo que tiene el motor Ogre.

No es una solución que me guste, porque añade una capa de abstracción más, que incordia un poco al usuario final. Además no facilita la ordenación de la geometría (para los objetos transparentes, por ejemplo). Básicamente, todo ese tinglado estaba hecho para poder hacer sistemas de partículas de forma sencilla, pudiendo aprovechar los cálculos una vez y dibujarlos cientos de veces. Evidentemente, todos los sistemas de partículas que referenciasen al original serían iguales, pero no es algo que se note demasiado y la imagen de cientos de partículas en pantalla bien lo valía.

Sin embargo parece que mover los cálculos de las partículas a la GPU es una práctica bastante común. Lo malo es que los shaders, al no almacenar estado alguno, tienen que realizar los cálculos en cada iteración, por lo que no sirve de nada hacer lo que tenía pensado. He leído artículos de sistemas de partículas sobre la XBox 360 y ahí se puede hacer que la salida de un vertex shader no vaya al pixel shader, sino a memoria, lo que resulta idóneo para hacer cálculos ‘en bruto’ como los necesarios para mover partículas.

Ahora creo que simplificaré un poco la parte de la escena y puede que limite que cada nodo gráfico solo se pueda ‘pegar’ a un nodo de la escena. Eso simplificará mucho la organización y además no perderé funcionalidad, ya que si paso los cálculos al shader ya la habré perdido de todos modos. Pero al final lo fundamental es que vaya más rápido, no importa cómo y espero que así lo consiga.

También he barajado usar point sprites, pero no encuentro demasiada documentación sobre el tema, y he oído bastantes quejas sobre problemas al asignar tamaños grandes a las partículas. Aunque parecen una buena opción, a ver si consigo encontrar algún tutorial un poco reciente que me aclare las cosas.