Licht ist immer so eine Sache bei Shadern. Das liegt zum einen daran das man keine echten Schleifen bei Shader 1.0 - 2.0 gibt und das die Anzahl der Lichtquellen eh Variabel ist. Was das ganze noch erschwert.
Fragment Linking ist hier ein gutes Stichwort.
Eine weitere Möglichkeit ist hier Multipassing. Gutes Beispiel auch hier das Licht. Man rendert das Modell ganz Normal. Sollte es von Licht beleuchtet werden, setzt man eine Lichtquelle, rendert das Modell noch einmal und das für alle Lichter. Oder nur für die n nächsten.
Ein bissel komplexer wirds wenn das Modell z.B. Paralax-Mapping oder vergleichbare Techniken nutzt. Hier muss das Modell der Engine mitteilen, das es n Lichtquellen brauch. Eben soviele wie im Schader vorgesehen sind. Meist wohl nur eine. Die Engine fragt das ab und liefert dem Modell die Lichtquelle, die das Modell am meisten beeinflust.
Problem dabei ist, das man Unterschiedliche Lichter haben kann. Z.B. Point Light, Directional Lights, etc. Auch hier kann das Fragment Linking ansetzen.