Hängt von den Partikeln ab. Der Normalenvektor ist ja nicht die Lösung für alles, sondern nur ein Arbeitsmittel für bestimmte Szenarien. Ganz konkret: die Normale benutzt Du, wenn Du eine solide geschlossene Oberfläche beleuchten willst.
Wenn Dein Partikel also ein Festkörper ist, kannst Du dem einfach ne NormalMap mitgeben und die Normalen darin anhand der aktuellen Ausrichtung (wahrscheinlich zur Kamera) für die Lichtberechnung nehmen.
Wenn Dein Partikel ein selbstleuchtendes Ding wie z.B. ein Funken oder eine brennende Gaswolke eines Feuers ist, brauchst Du gar keine Beleuchtung. Das Eigenleuchten der Materie überdeckt selbst die Reflektionen direkter Sonneneinstrahlung.
Wenn Dein Partikel eine Rauchwolke, Nebel oder sowas darstellen soll, hast Du ein Problem. In der echten Physik kommt Licht von den Lichtquellen und von überall sonst, wo Oberflächen Licht reflektieren. Das Licht dringt in die Materiewolken ein, wird mit dem Vordringen immer weiter gestreut, und absorbiert. Teile des Lichtes kommen evtl. unbeeinträchtigt hinten wieder raus, die daraus entstehende Verdunklung wird auf den Oberflächen dahinter als "Wolkenschatten" oder "Rauchschatten" sichtbar. Teile des Lichtes werden an verschiedenen Stellen auf dem Weg durch die Wolke reflektiert und gelangen danach unbeeinträchtigt ins Auge des Betrachters - das würdest Du als "beleuchtet" wahrnehmen. Und Teile des Lichts werden in der Wolke reflektiert, dann nach ein paar Metern vielleicht absorbiert oder nochmal reflektiert usw.
Für die Athmosphäre als "globalen" Spezialfall einer Lichtausbreitung in teilnehmendem Medium gibt es dafür ja unzählige Speziallösungen. Das Atmospheric Scattering kann man über vereinfachte mathematische Modelle berechnen, die die frequenzabhängige Absorption des Lichtes in der Luft ganz gut hinbekommen. Stichwort Mie-Raleigh. Die Streuung des Lichts in der Luft, so dass Teile des Lichtes das Betrachter-Auge erreichen, wird meist als rein optisches Spektakel als "God Rays" umgesetzt. Das Fehlen von genau dieser gestreuten Lichtenergie auf der Empfängeroberfläche wird als Wolkenschatten implementiert. Die Summe all dieser Einzeleffekte verletzt üblicherweise das Energieerhaltungsgesetz, aber eine wirklich globale konsistente Lösung ist aktuell halt einfach nicht möglich.