THREE.RGBELoader() Экспозиция HDR не меняется

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

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)

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

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


person 엄승탁    schedule 26.03.2019    source источник


Ответы (1)


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

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

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

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

        scene.background = hdrCubeRenderTarget.texture;

        renderer.toneMappingExposure = 0.5;
});

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

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

person Alexander Koik-Cestone    schedule 09.01.2020