En breve..
Estaría pensando esto a través de la ciencia.
Como todos sabemos, la nieve es lluvia y viceversa, excepto que tienen diferentes estados sólidos debido a los cambios de temperatura.
Los cambios de temperatura pueden estar asociados a los vientos.
Un rápido Google para "lo que causa el viento" me dio una respuesta de Answers.com:
"La fuerza del gradiente de presión, que surge del calentamiento desigual de la superficie de la Tierra. Una vez que está en movimiento, la fuerza de Coriolis surge de la rotación de la Tierra para desviarla (justo en el hemisferio norte, izquierda en el hemisferio sur)".
Sí, no es la mejor fuente de preguntas científicas, pero da la idea.
Entonces, teóricamente, solo necesitas viento ahora. Puede ser aleatorio, o bien, de alguna manera podría estar programado para su entorno que se calienta debido a algunos eventos.
Tome el viento ahora, aplique a su posición actual, y al azar o mediante una secuencia de comandos, haga nubes fuera de él. Cuanto más densa es la nube, mayor es la probabilidad y densidad de lluvia. Si la temperatura es lo suficientemente baja, la lluvia se convierte en nieve. Mueva la nube y hágala "no tan densa" con ese viento.
En cuanto a la pantalla, eso depende de usted, solo guarde en caché los estados de las partículas que caen, if rain -> use water drop texture
y if snow -> use snowflake texture
. Usa el viento para hacer que estas partículas se muevan de acuerdo con la dirección del viento (sí, también debes almacenar esta, en algún lugar) para que sea un poco más realista.
Y con esto puedes expandirte sobre todo. Por ejemplo, si cae nieve y los copos de nieve caen cerca de algún tipo de fuente de calor, cambie la textura de las partículas para que llueva nuevamente.
Muchas posibilidades en realidad, este es solo un concepto simple.
PD: En cuanto al granizo, mira lo que los hace, expande el concepto para dicho entorno.
Que te diviertas, buena suerte.