Skip to content

Commit bd67e49

Browse files
authored
Remove artist-friendly factor of PI from shaders (#22393)
1 parent cd862ca commit bd67e49

11 files changed

+22
-73
lines changed

examples/js/shaders/MMDToonShader.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,6 @@ void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in Geometri
3030
3131
vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;
3232
33-
#ifndef PHYSICALLY_CORRECT_LIGHTS
34-
35-
irradiance *= PI; // punctual light
36-
37-
#endif
38-
3933
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
4034
4135
reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;

examples/jsm/renderers/nodes/functions/BSDFs.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,6 @@ void RE_Direct_BlinnPhong( vec3 lightDirection, vec3 lightColor ) {
9696
float dotNL = saturate( dot( NormalView, lightDirection ) );
9797
vec3 irradiance = dotNL * lightColor;
9898
99-
#ifndef PHYSICALLY_CORRECT_LIGHTS
100-
101-
irradiance *= PI; // punctual light
102-
103-
#endif
104-
10599
ReflectedLightDirectDiffuse += irradiance * BRDF_Lambert( MaterialDiffuseColor.rgb );
106100
107101
ReflectedLightDirectSpecular += irradiance * BRDF_BlinnPhong( lightDirection, MaterialSpecularColor, MaterialSpecularShininess );

examples/jsm/shaders/MMDToonShader.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,6 @@ void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in Geometri
3131
3232
vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;
3333
34-
#ifndef PHYSICALLY_CORRECT_LIGHTS
35-
36-
irradiance *= PI; // punctual light
37-
38-
#endif
39-
4034
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
4135
4236
reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;

src/renderers/WebGLRenderer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ function WebGLRenderer( parameters = {} ) {
895895

896896
} );
897897

898-
currentRenderState.setupLights();
898+
currentRenderState.setupLights( _this.physicallyCorrectLights );
899899

900900
scene.traverse( function ( object ) {
901901

@@ -1033,7 +1033,7 @@ function WebGLRenderer( parameters = {} ) {
10331033

10341034
shadowMap.render( shadowsArray, scene, camera );
10351035

1036-
currentRenderState.setupLights();
1036+
currentRenderState.setupLights( _this.physicallyCorrectLights );
10371037
currentRenderState.setupLightsView( camera );
10381038

10391039
if ( _clippingEnabled === true ) clipping.endShadows();

src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ vIndirectFront += getLightProbeIrradiance( lightProbe, geometry );
4242
getPointLightInfo( pointLights[ i ], geometry, directLight );
4343
4444
dotNL = dot( geometry.normal, directLight.direction );
45-
directLightColor_Diffuse = PI * directLight.color;
45+
directLightColor_Diffuse = directLight.color;
4646
4747
vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
4848
4949
#ifdef DOUBLE_SIDED
5050
51-
vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;
51+
vLightBack += saturate( - dotNL ) * directLightColor_Diffuse;
5252
5353
#endif
5454
@@ -65,13 +65,13 @@ vIndirectFront += getLightProbeIrradiance( lightProbe, geometry );
6565
getSpotLightInfo( spotLights[ i ], geometry, directLight );
6666
6767
dotNL = dot( geometry.normal, directLight.direction );
68-
directLightColor_Diffuse = PI * directLight.color;
68+
directLightColor_Diffuse = directLight.color;
6969
7070
vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
7171
7272
#ifdef DOUBLE_SIDED
7373
74-
vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;
74+
vLightBack += saturate( - dotNL ) * directLightColor_Diffuse;
7575
7676
#endif
7777
}
@@ -87,13 +87,13 @@ vIndirectFront += getLightProbeIrradiance( lightProbe, geometry );
8787
getDirectionalLightInfo( directionalLights[ i ], geometry, directLight );
8888
8989
dotNL = dot( geometry.normal, directLight.direction );
90-
directLightColor_Diffuse = PI * directLight.color;
90+
directLightColor_Diffuse = directLight.color;
9191
9292
vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
9393
9494
#ifdef DOUBLE_SIDED
9595
96-
vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;
96+
vLightBack += saturate( - dotNL ) * directLightColor_Diffuse;
9797
9898
#endif
9999

src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,6 @@ vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {
4444
4545
vec3 irradiance = ambientLightColor;
4646
47-
#ifndef PHYSICALLY_CORRECT_LIGHTS
48-
49-
irradiance *= PI;
50-
51-
#endif
52-
5347
return irradiance;
5448
5549
}
@@ -180,12 +174,6 @@ vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {
180174
181175
vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
182176
183-
#ifndef PHYSICALLY_CORRECT_LIGHTS
184-
185-
irradiance *= PI;
186-
187-
#endif
188-
189177
return irradiance;
190178
191179
}

src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,6 @@ void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in Geometri
1515
float dotNL = saturate( dot( geometry.normal, directLight.direction ) );
1616
vec3 irradiance = dotNL * directLight.color;
1717
18-
#ifndef PHYSICALLY_CORRECT_LIGHTS
19-
20-
irradiance *= PI; // punctual light
21-
22-
#endif
23-
2418
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
2519
2620
reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;

src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -120,24 +120,12 @@ void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricC
120120
121121
vec3 irradiance = dotNL * directLight.color;
122122
123-
#ifndef PHYSICALLY_CORRECT_LIGHTS
124-
125-
irradiance *= PI; // punctual light
126-
127-
#endif
128-
129123
#ifdef CLEARCOAT
130124
131125
float dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );
132126
133127
vec3 ccIrradiance = dotNLcc * directLight.color;
134128
135-
#ifndef PHYSICALLY_CORRECT_LIGHTS
136-
137-
ccIrradiance *= PI; // punctual light
138-
139-
#endif
140-
141129
clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );
142130
143131
#endif

src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@ void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricConte
1111
1212
vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;
1313
14-
#ifndef PHYSICALLY_CORRECT_LIGHTS
15-
16-
irradiance *= PI; // punctual light
17-
18-
#endif
19-
2014
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
2115
2216
}

src/renderers/webgl/WebGLLights.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ function WebGLLights( extensions, capabilities ) {
199199
const matrix4 = new Matrix4();
200200
const matrix42 = new Matrix4();
201201

202-
function setup( lights ) {
202+
function setup( lights, physicallyCorrectLights ) {
203203

204204
let r = 0, g = 0, b = 0;
205205

@@ -217,6 +217,9 @@ function WebGLLights( extensions, capabilities ) {
217217

218218
lights.sort( shadowCastingLightsFirst );
219219

220+
// artist-friendly light intensity scaling factor
221+
const scaleFactor = ( physicallyCorrectLights !== true ) ? Math.PI : 1;
222+
220223
for ( let i = 0, l = lights.length; i < l; i ++ ) {
221224

222225
const light = lights[ i ];
@@ -229,9 +232,9 @@ function WebGLLights( extensions, capabilities ) {
229232

230233
if ( light.isAmbientLight ) {
231234

232-
r += color.r * intensity;
233-
g += color.g * intensity;
234-
b += color.b * intensity;
235+
r += color.r * intensity * scaleFactor;
236+
g += color.g * intensity * scaleFactor;
237+
b += color.b * intensity * scaleFactor;
235238

236239
} else if ( light.isLightProbe ) {
237240

@@ -245,7 +248,7 @@ function WebGLLights( extensions, capabilities ) {
245248

246249
const uniforms = cache.get( light );
247250

248-
uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
251+
uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );
249252

250253
if ( light.castShadow ) {
251254

@@ -276,7 +279,7 @@ function WebGLLights( extensions, capabilities ) {
276279

277280
uniforms.position.setFromMatrixPosition( light.matrixWorld );
278281

279-
uniforms.color.copy( color ).multiplyScalar( intensity );
282+
uniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor );
280283
uniforms.distance = distance;
281284

282285
uniforms.coneCos = Math.cos( light.angle );
@@ -327,7 +330,7 @@ function WebGLLights( extensions, capabilities ) {
327330

328331
const uniforms = cache.get( light );
329332

330-
uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
333+
uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );
331334
uniforms.distance = light.distance;
332335
uniforms.decay = light.decay;
333336

@@ -360,8 +363,8 @@ function WebGLLights( extensions, capabilities ) {
360363

361364
const uniforms = cache.get( light );
362365

363-
uniforms.skyColor.copy( light.color ).multiplyScalar( intensity );
364-
uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );
366+
uniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor );
367+
uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor );
365368

366369
state.hemi[ hemiLength ] = uniforms;
367370

src/renderers/webgl/WebGLRenderStates.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ function WebGLRenderState( extensions, capabilities ) {
2626

2727
}
2828

29-
function setupLights() {
29+
function setupLights( physicallyCorrectLights ) {
3030

31-
lights.setup( lightsArray );
31+
lights.setup( lightsArray, physicallyCorrectLights );
3232

3333
}
3434

0 commit comments

Comments
 (0)