Короче говоря..
Я бы думал об этом через науку.
Как мы все знаем, снег - это дождь и наоборот, за исключением того, что они имеют различные твердые состояния из-за изменений температуры.
Изменения температуры могут быть связаны с ветрами.
Быстрый Google для "что вызывает ветер" дал мне ответ от Ответов:
«Сила градиента давления, возникающая из-за неравномерного нагрева земной поверхности. Как только она движется, сила Кориолиса возникает из-за вращения Земли с целью ее отклонения (прямо в северном полушарии, слева в южном полушарии)».
Да, не лучший источник для научных вопросов, но это дает идею.
Итак, теоретически, вам нужен только ветер сейчас. Это может быть случайным, или, может быть, как-то написано в вашей среде, которая нагревается из-за некоторых событий.
Поднимите ветер прямо сейчас, примените к вашей текущей позиции и случайным образом или с помощью сценариев сделайте из него облака. Чем плотнее облако, тем больше вероятность и плотность дождя. Если температура достаточно низкая, дождь превращается в снег. Переместите облако вокруг и сделайте его "не таким плотным" с этим ветром.
Что касается дисплея, это ваше дело, просто кешируйте состояния падающих частиц, if rain -> use water drop texture
и if snow -> use snowflake texture
. Используйте ветер, чтобы заставить эти частицы двигаться в соответствии с направлением ветра (да, вы должны хранить это тоже где-нибудь), чтобы сделать его немного более реалистичным.
И с этим вы можете расширить на все. Например, если падает снег, а снежинки падают рядом с источником тепла, снова измените текстуру частиц на дождь.
На самом деле множество возможностей, это просто простая концепция.
PS Что касается града, посмотрите, что делает это, расширьте понятие для такой среды.
Веселись, удачи.