В графике на основе WebGL фильтрация текстур играет ключевую роль в
визуальном качестве сцены. Она определяет, как пиксели текстуры
интерпретируются при масштабировании на поверхности объекта. В
библиотеке Three.js управление фильтрацией реализовано
через свойства magFilter, minFilter и
использование MipMap.
magFiltermagFilter отвечает за фильтрацию текстуры при
увеличении (масштабировании текстуры больше её
исходного размера). Поддерживаются следующие режимы:
THREE.NearestFilter
nearest neighbor).THREE.LinearFilter
Пример применения:
const texture = new THREE.TextureLoader().load('texture.jpg');
texture.magFilter = THREE.LinearFilter; // сглаживание при увеличении
Важно:
magFilterработает только при увеличении текстуры. Для уменьшения используетсяminFilter.
minFilterminFilter отвечает за фильтрацию при
уменьшении текстуры (когда текстура отображается меньше
исходного размера). Минимизация критически влияет на качество и
производительность, особенно при отображении объектов на дальнем
плане.
Основные типы фильтрации:
THREE.NearestFilter
THREE.LinearFilter
MipMap фильтры
Применяются для улучшенной минимизации и включают несколько уровней детализации текстуры:
THREE.NearestMipMapNearestFilter – ближайший пиксель из
ближайшего уровня MipMap.THREE.LinearMipMapNearestFilter – линейная интерполяция
в пределах уровня MipMap.THREE.NearestMipMapLinearFilter – ближайший пиксель из
линейно интерполированных MipMap.THREE.LinearMipMapLinearFilter – линейная интерполяция
и между уровнями MipMap (наиболее плавный результат).Пример:
texture.minFilter = THREE.LinearMipMapLinearFilter; // плавное уменьшение с MipMap
MipMap — это предварительно сгенерированные версии текстуры с уменьшающимся разрешением (обычно каждый уровень половинного размера предыдущего). Использование MipMap позволяет:
Создание MipMap в Three.js:
texture.generateMipmaps = true; // по умолчанию true для текстур с размерами степени 2
texture.minFilter = THREE.LinearMipMapLinearFilter;
Примечание: для текстур с размерами, не кратными степени 2, MipMap может не генерироваться автоматически, что повлияет на фильтрацию.
Выбор фильтра зависит от типа сцены и приоритетов между качеством и производительностью.
Для пиксельной графики и спрайтов:
texture.magFilter = THREE.NearestFilter;
texture.minFilter = THREE.NearestFilter;Для реалистичных материалов:
texture.magFilter = THREE.LinearFilter;
texture.minFilter = THREE.LinearMipMapLinearFilter;
texture.generateMipmaps = true;Для динамических текстур (например, canvas или видео) MipMap часто отключают:
texture.generateMipmaps = false;
texture.minFilter = THREE.LinearFilter;Использование magFilter, minFilter и MipMap
позволяет тонко управлять визуальным качеством текстур, балансируя между
плавностью отображения и производительностью в реальном времени.