diff --git a/examples/jsm/effects/OutlineEffect.js b/examples/jsm/effects/OutlineEffect.js index e2fd11417fe433..aed3dc541084dc 100644 --- a/examples/jsm/effects/OutlineEffect.js +++ b/examples/jsm/effects/OutlineEffect.js @@ -135,7 +135,6 @@ class OutlineEffect { ' #include ', ' #include ', ' #include ', - ' #include ', '}' diff --git a/examples/jsm/lines/LineMaterial.js b/examples/jsm/lines/LineMaterial.js index f14534aa964f2b..22a9680e9dd715 100644 --- a/examples/jsm/lines/LineMaterial.js +++ b/examples/jsm/lines/LineMaterial.js @@ -396,7 +396,6 @@ ShaderLib[ 'line' ] = { #include #include #include - #include } ` diff --git a/examples/jsm/materials/LDrawConditionalLineMaterial.js b/examples/jsm/materials/LDrawConditionalLineMaterial.js index 9bb6be87afe1b7..55be277626ea54 100644 --- a/examples/jsm/materials/LDrawConditionalLineMaterial.js +++ b/examples/jsm/materials/LDrawConditionalLineMaterial.js @@ -119,7 +119,6 @@ class LDrawConditionalLineMaterial extends ShaderMaterial { #include #include #include - #include } `, diff --git a/examples/jsm/materials/MeshGouraudMaterial.js b/examples/jsm/materials/MeshGouraudMaterial.js index 44526da8d2656e..f87057b633bf7e 100644 --- a/examples/jsm/materials/MeshGouraudMaterial.js +++ b/examples/jsm/materials/MeshGouraudMaterial.js @@ -303,7 +303,6 @@ const GouraudShader = { #include #include #include - #include #include }` diff --git a/examples/screenshots/webgl_loader_ldraw.jpg b/examples/screenshots/webgl_loader_ldraw.jpg index 2b17a519f19bc7..fbede826355603 100644 Binary files a/examples/screenshots/webgl_loader_ldraw.jpg and b/examples/screenshots/webgl_loader_ldraw.jpg differ diff --git a/examples/screenshots/webgl_materials_blending.jpg b/examples/screenshots/webgl_materials_blending.jpg index 20a5bbf341bc05..ed57cdb5df6fca 100644 Binary files a/examples/screenshots/webgl_materials_blending.jpg and b/examples/screenshots/webgl_materials_blending.jpg differ diff --git a/examples/webgl_watch.html b/examples/webgl_watch.html index 262ab6b9586b8c..a056535d8651c8 100644 --- a/examples/webgl_watch.html +++ b/examples/webgl_watch.html @@ -129,7 +129,8 @@ metalness: 0, roughness: 0, iridescence: 0.3, clearcoat: 1.0, - blending: THREE.AdditiveBlending + blending: THREE.AdditiveBlending, + premultipliedAlpha: true } ); ready = true; diff --git a/manual/en/indexed-textures.html b/manual/en/indexed-textures.html index 1f0430cace0fc0..afffeb2b56b790 100644 --- a/manual/en/indexed-textures.html +++ b/manual/en/indexed-textures.html @@ -319,7 +319,6 @@

Indexed Textures for Picking and Color

vec3 outgoingLight = reflectedLight.indirectDiffuse; #include <envmap_fragment> gl_FragColor = vec4( outgoingLight, diffuseColor.a ); - #include <premultiplied_alpha_fragment> #include <tonemapping_fragment> #include <colorspace_fragment> #include <fog_fragment> diff --git a/manual/fr/indexed-textures.html b/manual/fr/indexed-textures.html index 3a9a3bc0739a31..dcce7cdb29b556 100644 --- a/manual/fr/indexed-textures.html +++ b/manual/fr/indexed-textures.html @@ -319,7 +319,6 @@

Textures Indexées pour la Sélection et la Couleur

vec3 outgoingLight = reflectedLight.indirectDiffuse; #include <envmap_fragment> gl_FragColor = vec4( outgoingLight, diffuseColor.a ); - #include <premultiplied_alpha_fragment> #include <tonemapping_fragment> #include <colorspace_fragment> #include <fog_fragment> diff --git a/manual/ja/indexed-textures.html b/manual/ja/indexed-textures.html index b60f50974fb769..9b96f4e80c932f 100644 --- a/manual/ja/indexed-textures.html +++ b/manual/ja/indexed-textures.html @@ -299,7 +299,6 @@

圧縮テクスチャのピッキングとカラー

vec3 outgoingLight = reflectedLight.indirectDiffuse; #include <envmap_fragment> gl_FragColor = vec4( outgoingLight, diffuseColor.a ); - #include <premultiplied_alpha_fragment> #include <tonemapping_fragment> #include <colorspace_fragment> #include <fog_fragment> diff --git a/manual/ko/indexed-textures.html b/manual/ko/indexed-textures.html index cccc23666ad5ee..44726b6deb4028 100644 --- a/manual/ko/indexed-textures.html +++ b/manual/ko/indexed-textures.html @@ -266,7 +266,6 @@

피킹과 색상에 인덱스 텍스처 사용하기

vec3 outgoingLight = reflectedLight.indirectDiffuse; #include <envmap_fragment> gl_FragColor = vec4( outgoingLight, diffuseColor.a ); - #include <premultiplied_alpha_fragment> #include <tonemapping_fragment> #include <colorspace_fragment> #include <fog_fragment> diff --git a/manual/zh/indexed-textures.html b/manual/zh/indexed-textures.html index 78108fa3a1651a..42ac21ce9b7c2d 100644 --- a/manual/zh/indexed-textures.html +++ b/manual/zh/indexed-textures.html @@ -291,7 +291,6 @@

使用纹理索引来拾取和着色

vec3 outgoingLight = reflectedLight.indirectDiffuse; #include <envmap_fragment> gl_FragColor = vec4( outgoingLight, diffuseColor.a ); - #include <premultiplied_alpha_fragment> #include <tonemapping_fragment> #include <colorspace_fragment> #include <fog_fragment> diff --git a/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js index 07fb7207a8665b..95c56b1b734ce5 100644 --- a/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js @@ -7,5 +7,17 @@ diffuseColor.a = 1.0; diffuseColor.a *= material.transmissionAlpha; #endif +#ifdef PREMULTIPLIED_ALPHA + +// Convert to sRGB, apply premultiplied alpha, convert back to linear. +// This ensures correct blending in sRGB framebuffers. +vec3 srgb = sRGBTransferOETF( vec4( outgoingLight, 1.0 ) ).rgb; +srgb *= diffuseColor.a; +gl_FragColor = vec4( sRGBTransferEOTF( vec4( srgb, 1.0 ) ).rgb, diffuseColor.a ); + +#else + gl_FragColor = vec4( outgoingLight, diffuseColor.a ); + +#endif `; diff --git a/src/renderers/shaders/ShaderLib/linedashed.glsl.js b/src/renderers/shaders/ShaderLib/linedashed.glsl.js index e04cfcefd396cd..7299f1f1e37477 100644 --- a/src/renderers/shaders/ShaderLib/linedashed.glsl.js +++ b/src/renderers/shaders/ShaderLib/linedashed.glsl.js @@ -70,7 +70,6 @@ void main() { #include #include #include - #include } `; diff --git a/src/renderers/shaders/ShaderLib/meshbasic.glsl.js b/src/renderers/shaders/ShaderLib/meshbasic.glsl.js index c9ee73866bde74..e7f08f30619169 100644 --- a/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshbasic.glsl.js @@ -109,7 +109,6 @@ void main() { #include #include #include - #include #include } diff --git a/src/renderers/shaders/ShaderLib/meshlambert.glsl.js b/src/renderers/shaders/ShaderLib/meshlambert.glsl.js index f52ed6e8d58827..65d33e0a898187 100644 --- a/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshlambert.glsl.js @@ -117,7 +117,6 @@ void main() { #include #include #include - #include #include } diff --git a/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js b/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js index e83c141597a10a..623aa53c606516 100644 --- a/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js @@ -105,7 +105,6 @@ void main() { #include #include #include - #include #include } diff --git a/src/renderers/shaders/ShaderLib/meshphong.glsl.js b/src/renderers/shaders/ShaderLib/meshphong.glsl.js index 3b9a59e0a32c1d..0c1f55d17ba026 100644 --- a/src/renderers/shaders/ShaderLib/meshphong.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshphong.glsl.js @@ -119,7 +119,6 @@ void main() { #include #include #include - #include #include } diff --git a/src/renderers/shaders/ShaderLib/meshphysical.glsl.js b/src/renderers/shaders/ShaderLib/meshphysical.glsl.js index fe57808fc15c6e..726d1e3fcb7a79 100644 --- a/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshphysical.glsl.js @@ -217,7 +217,6 @@ void main() { #include #include #include - #include #include } diff --git a/src/renderers/shaders/ShaderLib/meshtoon.glsl.js b/src/renderers/shaders/ShaderLib/meshtoon.glsl.js index 5ea0f7b623e4d2..ff6eaee57dbbce 100644 --- a/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshtoon.glsl.js @@ -111,7 +111,6 @@ void main() { #include #include #include - #include #include } diff --git a/src/renderers/shaders/ShaderLib/points.glsl.js b/src/renderers/shaders/ShaderLib/points.glsl.js index 51dcdf566ac471..f558d82f0229a0 100644 --- a/src/renderers/shaders/ShaderLib/points.glsl.js +++ b/src/renderers/shaders/ShaderLib/points.glsl.js @@ -81,7 +81,6 @@ void main() { #include #include #include - #include } `;