12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- varying vec3 vViewPosition;
- #ifndef FLAT_SHADED
- varying vec3 vNormal;
- #endif
- struct BlinnPhongMaterial {
- vec3 diffuseColor;
- vec3 specularColor;
- float specularShininess;
- float specularStrength;
- };
- #if NUM_RECT_AREA_LIGHTS > 0
- void RE_Direct_RectArea_BlinnPhong( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
- vec3 matDiffColor = material.diffuseColor;
- vec3 matSpecColor = material.specularColor;
- vec3 lightColor = rectAreaLight.color;
- float roughness = BlinnExponentToGGXRoughness( material.specularShininess );
- // Evaluate Lighting Equation
- vec3 spec = Rect_Area_Light_Specular_Reflectance(
- geometry,
- rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,
- roughness,
- ltcMat, ltcMag );
- vec3 diff = Rect_Area_Light_Diffuse_Reflectance(
- geometry,
- rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );
- // TODO (abelnation): note why division by 2PI is necessary
- reflectedLight.directSpecular += lightColor * matSpecColor * spec / PI2;
- reflectedLight.directDiffuse += lightColor * matDiffColor * diff / PI2;
- }
- #endif
- 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_Direct_RectArea RE_Direct_RectArea_BlinnPhong
- #define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong
- #define Material_LightProbeLOD( material ) (0)
|