#define Specular_Phong(normal, view, light, materialPower) pow(saturate(dot(reflect(-light, normal), view)), materialPower) // Phong Reflection Model
#define Specular_BlinnPhong(normal, view, light, materialPower) pow(saturate(dot(normal, normalize(light + view))), materialPower * 4) // Blinn (Phong) Reflection Model
#define Specular_TorranceSparrow(normal, view, light, materialPower) exp(-2 * materialPower * pow(acos(saturate(dot(normal, normalize(light + view)))), 2)) // Blinn (Torrance-Sparrow/Gauss) Reflection Model
#define Specular_TrowbridgeReitz(normal, view, light, materialPower) pow(1 / (1 + (1 - pow(saturate(dot(normal, normalize(light + view))), 2)) * materialPower), 2) // Blinn (Trowbridge-Reitz) Reflection Model
#define Specular_Lyon(normal, view, light, materialPower) pow(1 - saturate(dot(normalize(light + view) - normal, normalize(light + view) - normal) * materialPower / 2), 3) // Lyon/Blinn halfway method