But Why is GeForce Slower?

GeForce is slow because it hits its hardware limit. Hardware always has a limit, a limit introduced by the implementation (the actual hardware pipeline) and its clock frequency. There is only so much that hardware can do. Now, what the peak test numbers show is that the GeForce processor takes a serious dive with each added light. Some of you may be wondering about that after all NVIDIA has been promoting. We have eight hardware lights. Let's have a look at a graph directly from NVIDIA's own OpenGL Optimization FAQ:





What do we notice? A decrease when non-infinite lights are used (almost drastic - it drops to half!), and a steady decrease for every light you add. Remember the claimed 15 million polygons per second? This graph shows that the High-End Quadro doesn't even reach 14 million polygons per second while using only one infinite light and infinite observer (best case - simplest math). Hmm, sounds to me like NVIDIA has been spreading "benchmarketing" numbers. Luckily Benchmarketing is a thing that is generally accepted.

What are Infinite Lights?

Lights involve mathematical calculations. Now these calculations use various components as input. Generating those inputs can be easy or simple depending on the situation. Some of the inputs used for lighting calculations are positions of the light source, direction of the light, position of the observer, direction between the viewer and the vertex, and normal vector at the vertex position. You probably need even more, but I just want to explain to you why infinite lights are faster.

One of the base operations of infinite lights involves the direction of the light. This is where things can become either easy, or more complex. Take an object like the sun. The sun emits light in all directions, but we are very, very far away from the sun. So almost all light beams from the sun hitting the earth are parallel. This is what is known as a directional light source. All light beams have the same direction. Now since the calculations needed for lighting are based on this direction, it becomes very easy if this direction remains constant for all vertices of an object.

Now what if a light source is much closer, like, say, a light bulb. A light bulb also emits light in all directions, but these directions are no longer parallel and thus are not constant! This means that before you can do the light operations you need to search for the light direction. This is extra work, and extra work costs money, so there you have it. Such non-parallel light sources are point lights and spots. Spots are actually even more complex, but I'll ignore that for now.

Now, What About That Infinite Viewer?

Well, it's more or less the same. If you are very far away from the view direction (which is also part of the light equations), it remains pretty much constant, while if an object is close, your view direction changes per vertex. So again, more math is needed if the viewer is not very far away from the object. We could mention here that this is where optimizations can be done. The decision between local or infinite viewer is a simple switch. If you want quality, you make the switch sooner. If you want speed, you make the witch later (but you lose some image quality). It is possible that hardware and software do this differently. Even different hardware might do this at different moments.

So, the bottom line is this: if only directional light sources are used and the observer is rather far away from the object (unless you want to cheat and use an approximation), you have high-speed lights on GeForce Hardware. If the observer is not infinite, your performance halves. The performance also halves if you use spotlights or point lights. Below, the table contains the actual maximum throughput numbers taken from NVIDIA (numbers are Mpolygons/sec according to NVIDIA - make that Mvertices/sec after you read another one of my articles)

Number of Lights

Inf. lights/inf viewer

Inf. lights/local viewer

Local lights

1

12,5

5,68

5,68

2

8,93

5,68

5

3

6,25

4,63

4,46

4

4,8

3,57

3,47

5

3,9

2,91

2,91

6

3,29

2,45

2,45

7

2,84

2,12

2,11

8

2,5

1,86

1,86


The thing that amazes me most is that, to the public, NVIDIA says that developers should use as many lights as possible, while their optimization FAQ says this:

Q. How many lights should I use?
A. In general, as few as possible…

Anyone who doubts that marketing crap exists today, here is some solid proof!