Handle zero-length vectors when normalizing and fix ambient light

* Normalizing zero-length vectors can lead to infNaN's
* correct ambient light