Alien Swarm uses this to calc it's specular values (bundled with the rim light values, too) - calculated once per light and then added together; void SpecularAndRimTerms( const float3 vWorldNormal, const float3 vLightDir, const float fSpecularExponent, const float3 vEyeDir, const bool bDoSpecularWarp, in sampler…