diff --git a/src/renderers/shaders/UniformsUtils.js b/src/renderers/shaders/UniformsUtils.js index 855e534c02e3a6..b20b4abd60aa32 100644 --- a/src/renderers/shaders/UniformsUtils.js +++ b/src/renderers/shaders/UniformsUtils.js @@ -1,3 +1,5 @@ +import { sRGBEncoding, LinearSRGBColorSpace, SRGBColorSpace } from '../../constants.js'; + /** * Uniform Utilities */ @@ -73,6 +75,19 @@ export function cloneUniformsGroups( src ) { } +export function getUnlitUniformColorSpace( renderer ) { + + if ( renderer.getRenderTarget() === null ) { + + // https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398 + return renderer.outputEncoding === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace; + + } + + return LinearSRGBColorSpace; + +} + // Legacy const UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms }; diff --git a/src/renderers/webgl/WebGLBackground.js b/src/renderers/webgl/WebGLBackground.js index f0030eb3f5e37b..7a9c48e7bdd226 100644 --- a/src/renderers/webgl/WebGLBackground.js +++ b/src/renderers/webgl/WebGLBackground.js @@ -5,7 +5,9 @@ import { ShaderMaterial } from '../../materials/ShaderMaterial.js'; import { Color } from '../../math/Color.js'; import { Mesh } from '../../objects/Mesh.js'; import { ShaderLib } from '../shaders/ShaderLib.js'; -import { cloneUniforms } from '../shaders/UniformsUtils.js'; +import { cloneUniforms, getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js'; + +const _rgb = { r: 0, b: 0, g: 0 }; function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) { @@ -193,7 +195,9 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, function setClear( color, alpha ) { - state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); + color.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) ); + + state.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha ); } diff --git a/src/renderers/webgl/WebGLMaterials.js b/src/renderers/webgl/WebGLMaterials.js index 188aa8113e8cb1..2f249bb1d0afeb 100644 --- a/src/renderers/webgl/WebGLMaterials.js +++ b/src/renderers/webgl/WebGLMaterials.js @@ -1,10 +1,11 @@ import { BackSide } from '../../constants.js'; +import { getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js'; function WebGLMaterials( renderer, properties ) { function refreshFogUniforms( uniforms, fog ) { - uniforms.fogColor.value.copy( fog.color ); + fog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) ); if ( fog.isFog ) {