Артефакты молнии при рендеринге равноугольной карты с линейной фильтрацией

#three.js

Вопрос:

Я вижу артефакты, похожие на молнии, при рендеринге HDR-фона с magFilter = LinearFiltering помощью . Фон представляет собой равноугольную карту с низким разрешением с экстремальным размытием, запеченную в изображении.

Фрагмент кода:

 new RGBELoader()
  .setDataType(THREE.UnsignedByteType)
  .load(this.background, (hdrtexture) => {
    hdrtexture.mapping = THREE.EquirectangularReflectionMapping;
    hdrtexture.encoding = THREE.RGBEEncoding;
    hdrtexture.name = this.background;
    hdrtexture.magFilter = THREE.LinearFilter;
    hdrtexture.needsUpdate = true;

    // If the gui is set to show the env map, set the background to be the new map
    if (this.params.showMap) {
      this.scene.background = hdrtexture;
    }
  });
 

Осветление артефактов с помощью hdrtexture.magFilter = ТРИ.Линейный фильтр;

Без линейной фильтрации я вижу проблемы с ближайшими фильтрами (блочная пикселизация) на полюсах, поэтому я применяю линейный фильтр.
ближайшая проблема с фильтром на полюсах

Каков наилучший способ удалить эти артефакты молнии? Преобразовать в кубическую карту?

Ответ №1:

Преобразование равноугольной карты в кубическую карту решает проблемы артефактов.

Отрывок:

     new RGBELoader()
  .setDataType(THREE.UnsignedByteType)
  .load(this.background, (hdrtexture) => {
    hdrtexture.mapping = THREE.EquirectangularReflectionMapping;
    hdrtexture.encoding = THREE.RGBEEncoding;
    hdrtexture.name = this.background;
    hdrtexture.magFilter = THREE.LinearFilter;
    hdrtexture.needsUpdate = true;

    const pmrem = new THREE.PMREMGenerator(this.renderer);
    const envMap = pmrem.fromEquirectangular(hdrtexture).texture;

    // If the gui is set to show the env map, set the background to be the new map
    if (this.params.showMap) {
      this.scene.background = envMap;
    }
  });