Well I hadn't thought of the sun vector that way, but that is great advice-- should certainly speed things up, a little at least.
As for the number of faces...I'd like to take a surface and run it with arbitrary granularity; so, thousands. Running my code as it stands for 1000 faces takes on the order of 15 minutes to run.
Making the change you suggested now...