Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shaders: Refactor BRDF signatures #22475

Merged
merged 1 commit into from
Sep 1, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/js/shaders/MMDToonShader.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in Geometri

reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );

reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;
reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;

}

Expand Down
2 changes: 1 addition & 1 deletion examples/jsm/shaders/MMDToonShader.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in Geometri

reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );

reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;
reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;

}

Expand Down
14 changes: 7 additions & 7 deletions src/renderers/shaders/ShaderChunk/bsdfs.glsl.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ float D_GGX( const in float alpha, const in float dotNH ) {
}

// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
vec3 BRDF_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {
vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {

float alpha = pow2( roughness ); // UE4's roughness

vec3 halfDir = normalize( incidentLight.direction + viewDir );
vec3 halfDir = normalize( lightDir + viewDir );

float dotNL = saturate( dot( normal, incidentLight.direction ) );
float dotNL = saturate( dot( normal, lightDir ) );
float dotNV = saturate( dot( normal, viewDir ) );
float dotNH = saturate( dot( normal, halfDir ) );
float dotVH = saturate( dot( viewDir, halfDir ) );
Expand Down Expand Up @@ -198,12 +198,12 @@ float D_BlinnPhong( const in float shininess, const in float dotNH ) {

}

vec3 BRDF_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {
vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {

vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );
vec3 halfDir = normalize( lightDir + viewDir );

float dotNH = saturate( dot( geometry.normal, halfDir ) );
float dotVH = saturate( dot( geometry.viewDir, halfDir ) );
float dotNH = saturate( dot( normal, halfDir ) );
float dotVH = saturate( dot( viewDir, halfDir ) );

vec3 F = F_Schlick( specularColor, 1.0, dotVH );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in Geometri

reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );

reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;
reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricC

vec3 ccIrradiance = dotNLcc * directLight.color;

clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );
clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );

#endif

Expand All @@ -137,7 +137,7 @@ void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricC

#endif

reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );
reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );


reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
Expand Down