Most “standard” real-time lighting models are based on either a Blinn-Phong or Phong specular reflection model.

Dirty Rumor #1:

Phong is often touted as being more accurate because it uses the actual reflection vector, whereas Blinn makes use of the half-angle vector. I have seen several posts saying things along the lines of “you should use the hlsl reflect() function to get the true phong reflection instead of using the half-angle vector”.  Seems reasonable, right? 🙂

The funny thing is, it’s not! According to verification against observed data, Blinn is actually more visually accurate at reproducing specular reflections in a lot of cases. It should be noted, however, that Blinn is actually more expensive to calculate than Phong is for multiple light sources (for single light sources it is cheaper).

Dirty Rumor #2

A lot of people seem to think that as long as the input vectors are normalized, the half-angle vector (H) can be calculated as:

(EyeVector + LightVector) / 2

This is wrong! The vector that is returned will not be normalized in many cases. I have no idea why this fallacy continues to propagate. The correct way to calculate H is:

half-vector calculation

Please, tell your friends.  🙂