Ein Möglich hätt ich noch.
Du fragst einfach die Position des Partikels ab.
Ist er innerhalb der Grenzen, in dem sich zB das Haus befindet, dann dreh einfach ab Z-Position == Höhe des Hauses, die Richtung um.
So spart man sich auch die teure Kollisionserkennung.
Dafür muss man aber den ganzen Level aufteilen. Am besten unteilt man den Level in einen Array mit den Höhenangaben, und prüft danach, wo sich der Partikel befindet. Voila, ohne Kollisionserkennung einen Regen, der nicht durch decken geht.