|
@@ -216,6 +216,7 @@ THREE.ShaderLib = {
|
|
THREE.ShaderChunk[ "lightmap_pars_fragment" ],
|
|
THREE.ShaderChunk[ "lightmap_pars_fragment" ],
|
|
THREE.ShaderChunk[ "emissivemap_pars_fragment" ],
|
|
THREE.ShaderChunk[ "emissivemap_pars_fragment" ],
|
|
THREE.ShaderChunk[ "envmap_pars_fragment" ],
|
|
THREE.ShaderChunk[ "envmap_pars_fragment" ],
|
|
|
|
+ THREE.ShaderChunk[ "bsdfs" ],
|
|
THREE.ShaderChunk[ "ambient_pars" ],
|
|
THREE.ShaderChunk[ "ambient_pars" ],
|
|
THREE.ShaderChunk[ "fog_pars_fragment" ],
|
|
THREE.ShaderChunk[ "fog_pars_fragment" ],
|
|
THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
|
|
THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
|
|
@@ -224,9 +225,8 @@ THREE.ShaderLib = {
|
|
|
|
|
|
"void main() {",
|
|
"void main() {",
|
|
|
|
|
|
- " vec3 outgoingLight = vec3( 0.0 );",
|
|
|
|
" vec4 diffuseColor = vec4( diffuse, opacity );",
|
|
" vec4 diffuseColor = vec4( diffuse, opacity );",
|
|
- " vec3 totalAmbientLight = getAmbientLightIrradiance( ambientLightColor );",
|
|
|
|
|
|
+ " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",
|
|
" vec3 totalEmissiveLight = emissive;",
|
|
" vec3 totalEmissiveLight = emissive;",
|
|
|
|
|
|
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
|
|
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
|
|
@@ -238,33 +238,30 @@ THREE.ShaderLib = {
|
|
THREE.ShaderChunk[ "emissivemap_fragment" ],
|
|
THREE.ShaderChunk[ "emissivemap_fragment" ],
|
|
THREE.ShaderChunk[ "shadowmap_fragment" ],
|
|
THREE.ShaderChunk[ "shadowmap_fragment" ],
|
|
|
|
|
|
- // former lightmap_fragment.glsl
|
|
|
|
- " #ifdef USE_LIGHTMAP",
|
|
|
|
-
|
|
|
|
- " totalAmbientLight += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;", // factor of PI should not be present; included here to prevent breakage
|
|
|
|
-
|
|
|
|
- " #endif",
|
|
|
|
-
|
|
|
|
- // former aomap_fragment.glsl
|
|
|
|
- " #ifdef USE_AOMAP",
|
|
|
|
|
|
+ // accumulation
|
|
|
|
+ " reflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );",
|
|
|
|
|
|
- " totalAmbientLight *= ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;",
|
|
|
|
|
|
+ THREE.ShaderChunk[ "lightmap_fragment" ],
|
|
|
|
|
|
- " #endif",
|
|
|
|
|
|
+ " reflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );",
|
|
|
|
|
|
" #ifdef DOUBLE_SIDED",
|
|
" #ifdef DOUBLE_SIDED",
|
|
|
|
|
|
- " if ( gl_FrontFacing )",
|
|
|
|
- " outgoingLight += RECIPROCAL_PI * diffuseColor.rgb * ( vLightFront * shadowMask + totalAmbientLight ) + totalEmissiveLight;",
|
|
|
|
- " else",
|
|
|
|
- " outgoingLight += RECIPROCAL_PI * diffuseColor.rgb * ( vLightBack * shadowMask + totalAmbientLight ) + totalEmissiveLight;",
|
|
|
|
|
|
+ " reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;",
|
|
|
|
|
|
" #else",
|
|
" #else",
|
|
|
|
|
|
- " outgoingLight += RECIPROCAL_PI * diffuseColor.rgb * ( vLightFront * shadowMask + totalAmbientLight ) + totalEmissiveLight;",
|
|
|
|
|
|
+ " reflectedLight.directDiffuse = vLightFront;",
|
|
|
|
|
|
" #endif",
|
|
" #endif",
|
|
|
|
|
|
|
|
+ " reflectedLight.directDiffuse *= ( BRDF_Diffuse_Lambert( diffuseColor.rgb ) * shadowMask );",
|
|
|
|
+
|
|
|
|
+ // modulation
|
|
|
|
+ THREE.ShaderChunk[ "aomap_fragment" ],
|
|
|
|
+
|
|
|
|
+ " vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveLight;",
|
|
|
|
+
|
|
THREE.ShaderChunk[ "envmap_fragment" ],
|
|
THREE.ShaderChunk[ "envmap_fragment" ],
|
|
|
|
|
|
THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
|
|
THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
|