ТРИ.RGBELoader () экспозиция HDR не изменяется

#three.js #hdr

#three.js #hdr

Вопрос:

Я хочу использовать sibl.

 const loadHDR = () => {
    new THREE.RGBELoader().load('./resource/textures/HDR/Etnies_Park_Center_3k.hdr', (texture, textureData)=> {
    texture.encoding = THREE.RGBEEncoding;
    texture.minFilter = THREE.NearestFilter;
    texture.magFilter = THREE.NearestFilter;
    texture.flipY = true;

    console.log(texture)

    textureData.height = 1200
    textureData.width = 1200
    textureData.exposure = 10
    console.log(textureData)


    const cubemap = new THREE.EquirectangularToCubeGenerator(texture, { resolution: 3200, type: THREE.UnsignedByteType });
    exrBackground = cubemap.renderTarget;
    cubeMapTexture = cubemap.update(renderer);
    texture.dispose();
})
}
  

Это мой код. и

 console.log(textureData)
  

Приведенные выше результаты кода хорошо показывают исправленные значения.
Но экспозиция cubemap не меняется.

Другая проблема заключается в чтении файла .ibl. Я должен прочитать положение солнца в webgl, но я не могу прочитать файл. Я использую webpack. библиотека fs не существует.

Ответ №1:

Я также пытался настроить экспозицию с помощью RGBELoader. Похоже, вам нужно установить это как свойство для средства визуализации, поскольку перечисленные вами свойства возвращаются модулем только в функции обратного вызова. Они ничего не «устанавливают».

Похоже, что функции, связанные с картами окружения, значительно изменились с тех пор, как вы задали этот вопрос. Например, THREE.EquirectangularToCubeGenerator по-видимому, больше не существует. Похоже, что pmremGenerator.fromEquirectangular это предназначено в качестве замены, но я не совсем уверен.

Вот мой код, который загружает равноугольное изображение и преобразует его в карту куба, затем применяет его в качестве фона. Экспозицию можно установить с помощью renderer.toneMappingExposure , которая работает в r112. Обратите внимание, что это версия модуля.

 new RGBELoader()
.load('filename.hdr', (hdrEquiRect, textureData) => {
        hdrCubeRenderTarget = pmremGenerator.fromEquirectangular(hdrEquiRect);
        pmremGenerator.compileCubemapShader();

        scene.background = hdrCubeRenderTarget.texture;
        renderer.toneMapping = LinearToneMapping;
        renderer.toneMappingExposure = 0.5;
});
  

В этом примере используется renderer.toneMappingExposure для настройки экспозиции фона HDRi:

https://threejs.org/examples/?q=hdr#webgl_materials_envmaps_hdr

Редактировать — начиная с r116, вам также нужно установить renderer.toneMapping значение LinearToneMapping 1.