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 texturee 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.