А сколько лайтов-то, один?
Чем 3 разных шейдера не угодили?
видимо не один.
ну, в общем, вариантов очень много, и тут всегда есть над чем подумать. идеального решения нет.
можно иметь несколько вариаций шейдера с разными комбинациями. можно их руками написать, можно составлять из кусков кода автоматически.
если максимальное число лайтов мало, можно юзать #ifdef, если не очень мало, то генерация шейдеров становится уже целой отдельной большой задачей. свои изыскания в этой области описывал тут:
http://ndotl.wordpress.com/2014/10/1...shader-system/
можно делать деферед - тогда всё намного проще в этом плане.