|
@@ -82,9 +82,7 @@ THREE.ShaderLib = {
|
|
|
|
|
|
"void main() {",
|
|
|
|
|
|
- " vec3 outgoingLight = vec3( 0.0 );",
|
|
|
" vec4 diffuseColor = vec4( diffuse, opacity );",
|
|
|
- " vec3 totalAmbientLight = vec3( 1.0 );", // hardwired
|
|
|
" vec3 shadowMask = vec3( 1.0 );",
|
|
|
|
|
|
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
|
|
@@ -93,12 +91,15 @@ THREE.ShaderLib = {
|
|
|
THREE.ShaderChunk[ "alphamap_fragment" ],
|
|
|
THREE.ShaderChunk[ "alphatest_fragment" ],
|
|
|
THREE.ShaderChunk[ "specularmap_fragment" ],
|
|
|
- THREE.ShaderChunk[ "aomap_fragment" ],
|
|
|
- THREE.ShaderChunk[ "shadowmap_fragment" ],
|
|
|
|
|
|
- " outgoingLight = diffuseColor.rgb * totalAmbientLight * shadowMask;",
|
|
|
+ " ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), diffuse );",
|
|
|
|
|
|
+ THREE.ShaderChunk[ "aomap_fragment" ],
|
|
|
THREE.ShaderChunk[ "envmap_fragment" ],
|
|
|
+ THREE.ShaderChunk[ "shadowmap_fragment" ],
|
|
|
+ "indirectReflectedLight.diffuse *= shadowMask;",
|
|
|
+
|
|
|
+ "vec3 outgoingLight = indirectReflectedLight.diffuse;",
|
|
|
|
|
|
THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
|
|
|
|
|
@@ -234,8 +235,6 @@ THREE.ShaderLib = {
|
|
|
|
|
|
" #endif",
|
|
|
|
|
|
- THREE.ShaderChunk[ "envmap_fragment" ],
|
|
|
-
|
|
|
THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
|
|
|
|
|
|
THREE.ShaderChunk[ "fog_fragment" ],
|
|
@@ -363,12 +362,11 @@ THREE.ShaderLib = {
|
|
|
|
|
|
"void main() {",
|
|
|
|
|
|
- " vec3 outgoingLight = vec3( 0.0 );",
|
|
|
" vec4 diffuseColor = vec4( diffuse, opacity );",
|
|
|
- " vec3 totalAmbientLight = ambientLightColor;",
|
|
|
+ " ReflectedLight directReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );",
|
|
|
+ " ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), ambientLightColor );",
|
|
|
" vec3 totalEmissiveLight = emissive;",
|
|
|
- " vec3 shadowMask = vec3( 1.0 );",
|
|
|
-
|
|
|
+
|
|
|
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
|
|
|
THREE.ShaderChunk[ "map_fragment" ],
|
|
|
THREE.ShaderChunk[ "color_fragment" ],
|
|
@@ -376,29 +374,32 @@ THREE.ShaderLib = {
|
|
|
THREE.ShaderChunk[ "alphatest_fragment" ],
|
|
|
THREE.ShaderChunk[ "specularmap_fragment" ],
|
|
|
THREE.ShaderChunk[ "normal_phong_fragment" ],
|
|
|
- THREE.ShaderChunk[ "lightmap_fragment" ],
|
|
|
- THREE.ShaderChunk[ "aomap_fragment" ],
|
|
|
THREE.ShaderChunk[ "emissivemap_fragment" ],
|
|
|
|
|
|
+ // accumulation
|
|
|
THREE.ShaderChunk[ "lights_phong_fragment" ],
|
|
|
THREE.ShaderChunk[ "lights_template" ],
|
|
|
- THREE.ShaderChunk[ "shadowmap_fragment" ],
|
|
|
+ THREE.ShaderChunk[ "lightmap_fragment" ],
|
|
|
|
|
|
+ // modulation
|
|
|
+ THREE.ShaderChunk[ "envmap_fragment" ],
|
|
|
+ THREE.ShaderChunk[ "aomap_fragment" ],
|
|
|
+
|
|
|
+ "vec3 shadowMask = vec3( 1.0 );",
|
|
|
+ THREE.ShaderChunk[ "shadowmap_fragment" ],
|
|
|
"directReflectedLight.diffuse *= shadowMask;",
|
|
|
"directReflectedLight.specular *= shadowMask;",
|
|
|
|
|
|
"#ifdef METAL",
|
|
|
|
|
|
- " outgoingLight += diffuseColor.rgb * ( directReflectedLight.diffuse + indirectReflectedLight.diffuse + totalAmbientLight ) * specular + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;",
|
|
|
+ " vec3 outgoingLight = ( directReflectedLight.diffuse + indirectReflectedLight.diffuse ) * specular + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;",
|
|
|
|
|
|
"#else",
|
|
|
|
|
|
- " outgoingLight += diffuseColor.rgb * ( directReflectedLight.diffuse + indirectReflectedLight.diffuse + totalAmbientLight ) + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;",
|
|
|
+ " vec3 outgoingLight = ( directReflectedLight.diffuse + indirectReflectedLight.diffuse ) + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;",
|
|
|
|
|
|
"#endif",
|
|
|
|
|
|
- THREE.ShaderChunk[ "envmap_fragment" ],
|
|
|
-
|
|
|
THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
|
|
|
|
|
|
THREE.ShaderChunk[ "fog_fragment" ],
|
|
@@ -535,11 +536,10 @@ THREE.ShaderLib = {
|
|
|
|
|
|
"void main() {",
|
|
|
|
|
|
- " vec3 outgoingLight = vec3( 0.0 );",
|
|
|
" vec4 diffuseColor = vec4( diffuse, opacity );",
|
|
|
- " vec3 totalAmbientLight = ambientLightColor;",
|
|
|
+ " ReflectedLight directReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );",
|
|
|
+ " ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), ambientLightColor );",
|
|
|
" vec3 totalEmissiveLight = emissive;",
|
|
|
- " vec3 shadowMask = vec3( 1.0 );",
|
|
|
|
|
|
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
|
|
|
THREE.ShaderChunk[ "map_fragment" ],
|
|
@@ -551,20 +551,23 @@ THREE.ShaderLib = {
|
|
|
//THREE.ShaderChunk[ "reflectivitymap_fragment" ],
|
|
|
THREE.ShaderChunk[ "metalnessmap_fragment" ],
|
|
|
THREE.ShaderChunk[ "normal_phong_fragment" ], // use phong chunk for now
|
|
|
- THREE.ShaderChunk[ "lightmap_fragment" ],
|
|
|
- THREE.ShaderChunk[ "aomap_fragment" ],
|
|
|
THREE.ShaderChunk[ "emissivemap_fragment" ],
|
|
|
|
|
|
+ // accumulation
|
|
|
THREE.ShaderChunk[ "lights_physical_fragment" ],
|
|
|
- THREE.ShaderChunk[ "lights_template" ],
|
|
|
- THREE.ShaderChunk[ "shadowmap_fragment" ],
|
|
|
+ THREE.ShaderChunk[ "lights_template" ],
|
|
|
+ THREE.ShaderChunk[ "lightmap_fragment" ],
|
|
|
+ THREE.ShaderChunk[ "envmap_physical_fragment" ],
|
|
|
|
|
|
- "totalDiffuseLight *= shadowMask;",
|
|
|
- "totalSpecularLight *= shadowMask;",
|
|
|
+ // modulation
|
|
|
+ THREE.ShaderChunk[ "aomap_fragment" ],
|
|
|
|
|
|
- "outgoingLight += diffuseColor.rgb * ( totalDiffuseLight + totalAmbientLight ) + totalSpecularLight + totalEmissiveLight;",
|
|
|
+ "vec3 shadowMask = vec3( 1.0 );",
|
|
|
+ THREE.ShaderChunk[ "shadowmap_fragment" ],
|
|
|
+ "directReflectedLight.diffuse *= shadowMask;",
|
|
|
+ "directReflectedLight.specular *= shadowMask;",
|
|
|
|
|
|
- THREE.ShaderChunk[ "envmap_physical_fragment" ],
|
|
|
+ "vec3 outgoingLight = directReflectedLight.diffuse + indirectReflectedLight.diffuse + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;",
|
|
|
|
|
|
THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
|
|
|
|