So I was looking through the rastertek website,and I found this snippet:

If the light intensity is greater than zero we will do specular light calculations. if(lightIntensity > 0.0f) { Here is where we sample the specular map for the intensity of specular light at this pixel. // Sample the pixel from the specular map texture. specularIntensity = shaderTextures[2].Sample(SampleType, input.tex); In the reflection calculation we use the bump map normal instead of the regular input normal. // Calculate the reflection vector based on the light intensity, normal vector, and light direction. reflection = normalize(2 * lightIntensity * bumpNormal - lightDir); // Determine the amount of specular light based on the reflection vector, viewing direction, and specular power. specular = pow(saturate(dot(reflection, input.viewDirection)), specularPower); Now that we have the amount of specular light at this pixel we then multiply it by the specular intensity from the specular map to get a final value. // Use the specular map to determine the intensity of specular light at this pixel. specular = specular * specularIntensity; // Add the specular component last to the output color. color = saturate(color + specular); } return color; }

// Calculate the amount of light on this pixel based on the bump map normal value. lightIntensity = saturate(dot(bumpNormal, lightDir));

reflection = normalize(2 * lightIntensity * bumpNormal - lightDir);

All my interest is in that line. First,why multiply the vector in the first place,if you'll normalize it later.Second,why multiply by 2?(just for a better effect?) And finally,why multiply by lightIntensity too? I know that the dot product gives a result that is connected with the length of the vectors but still...i can't connect it all out.