Javascript 如何避免在使用threejs中的色调映射时背景图像从白色变为灰色?

Javascript 如何避免在使用threejs中的色调映射时背景图像从白色变为灰色?,javascript,three.js,Javascript,Three.js,我正在使用类中的以下代码初始化渲染器: // setup renderer this.renderer = new THREE.WebGLRenderer( { antialias: true }); this.renderer.setClearColor (0xffffff, 1); // set background color this.renderer.outputEncoding = THREE.sRGBEncoding;

我正在使用类中的以下代码初始化渲染器:

// setup renderer
        this.renderer = new THREE.WebGLRenderer( { antialias: true });
        this.renderer.setClearColor (0xffffff, 1); // set background color
        this.renderer.outputEncoding = THREE.sRGBEncoding;
        this.renderer.toneMapping = THREE.ACESFilmicToneMapping;
        this.renderer.toneMappingExposure = 1;
        this.renderer.physicallyCorrectLights = true;
以下代码将白色图像作为背景添加到场景中:

var texture11 = new THREE.TextureLoader().load("https://www.publicdomainpictures.net/pictures/30000/velka/plain-white-background.jpg");
        
        this.scene.background = texture11 ;
使用色调映射时,白色图像在场景中渲染为灰色,如下场景:


如何使其渲染为原始颜色?

纹理背景默认响应色调映射,如果不对着色器代码进行修补,则无法防止这种情况发生

您可以创建自己的自定义skybox和禁用的色调映射,而不是使用
Scene.background
。查看此代码:

let摄影机、场景、渲染器;
init();
制作动画();
函数init(){
摄像头=新的三个透视摄像头(70,窗口内宽/窗口内高,0.01,10);
摄像机位置z=1;
场景=新的三个。场景();
const loader=new THREE.CubeTextureLoader();
loader.setPath('https://threejs.org/examples/textures/cube/Bridge2/');
const cubeMap=loader.load(['posx.jpg','negx.jpg','posy.jpg','negy.jpg','posz.jpg','negz.jpg']);
cubeMap.encoding=3.sRGBEncoding;
//scene.background=cubeMap;
const skybox=新的3.Mesh(
新的三点缓冲几何结构(10,10,10),
新三点材质({
制服:三个.UniformsUtils.clone(三个.ShaderLib.cube.uniforms),
vertexShader:THREE.ShaderLib.cube.vertexShader,
fragmentShader:THREE.ShaderLib.cube.fragmentShader,
深度测试:假,
depthWrite:false,
侧面:三,背面,
色调映射:假
})
);
skybox.material.uniforms.envMap.value=cubeMap;
Object.defineProperty(skybox.material,“envMap”{
get:function(){
返回this.uniforms.envMap.value;
}
});
场景.添加(skybox);
renderer=new THREE.WebGLRenderer({
反别名:对
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth、window.innerHeight);
renderer.outpunecoding=3.sRGBEncoding;
renderer.toneMapping=THREE.ACESFilmicToneMapping;
renderer.toneMappingExposure=2;
document.body.appendChild(renderer.doElement);
}
函数animate(){
请求动画帧(动画);
渲染器。渲染(场景、摄影机);
}
正文{
保证金:0;
}