In breve..
Lo penserei attraverso la scienza.
Come tutti sappiamo, la neve è pioggia e viceversa, tranne che hanno diversi stati solidi a causa delle variazioni di temperatura.
I cambiamenti di temperatura possono essere associati ai venti.
Un rapido Google per "che cosa causa il vento" mi ha dato una risposta da Answers.com:
"La forza del gradiente di pressione, che deriva dal riscaldamento irregolare della superficie terrestre. Una volta che è in movimento, la forza di Coriolis nasce dalla rotazione terrestre per deviarla (proprio nell'emisfero settentrionale, a sinistra nell'emisfero meridionale)."
Sì, non è la migliore fonte di domande scientifiche, ma dà l'idea.
Quindi, in teoria, ora hai solo bisogno del vento. Potrebbe essere casuale o potrebbe anche essere in qualche modo scriptato nel tuo ambiente che si riscalda a causa di alcuni eventi.
Prendi il vento ora, applica la tua posizione attuale e, casualmente o attraverso un modo scritto, crea nuvole da esso. Più densa è la nuvola, maggiore è la probabilità e la densità della pioggia. Se la temperatura è abbastanza bassa, la pioggia diventa neve. Muovi la nuvola e rendila "non così densa" con quel vento.
Per quanto riguarda il display, dipende da te, basta memorizzare nella cache gli stati delle particelle che cadono if rain -> use water drop texture
e if snow -> use snowflake texture
. Usa il vento per far muovere queste particelle in base alla direzione del vento (sì, dovresti conservare anche questa, da qualche parte) per renderla un po 'più realistica.
E con questo puoi espandere tutto. Ad esempio, se cade la neve e i fiocchi di neve cadono vicino a una sorta di fonte di calore, cambia di nuovo la trama delle particelle in pioggia.
Molte possibilità in realtà, questo è solo un concetto semplice.
PS Per quanto riguarda la grandine, guarda cosa li rende, espandi il concetto di tale ambiente.
Buon divertimento, buona fortuna.