54 lines
1.4 KiB
GLSL
54 lines
1.4 KiB
GLSL
varying vec3 vViewPosition;
|
|
|
|
#ifndef FLAT_SHADED
|
|
|
|
varying vec3 vNormal;
|
|
|
|
#endif
|
|
|
|
|
|
struct BlinnPhongMaterial {
|
|
|
|
vec3 diffuseColor;
|
|
vec3 specularColor;
|
|
float specularShininess;
|
|
float specularStrength;
|
|
|
|
};
|
|
|
|
void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
|
|
|
|
#ifdef TOON
|
|
|
|
vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;
|
|
|
|
#else
|
|
|
|
float dotNL = saturate( dot( geometry.normal, directLight.direction ) );
|
|
vec3 irradiance = dotNL * directLight.color;
|
|
|
|
#endif
|
|
|
|
#ifndef PHYSICALLY_CORRECT_LIGHTS
|
|
|
|
irradiance *= PI; // punctual light
|
|
|
|
#endif
|
|
|
|
reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );
|
|
|
|
reflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;
|
|
|
|
}
|
|
|
|
void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
|
|
|
|
reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );
|
|
|
|
}
|
|
|
|
#define RE_Direct RE_Direct_BlinnPhong
|
|
#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong
|
|
|
|
#define Material_LightProbeLOD( material ) (0)
|