Трилинейная фильтрация
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2024 г. ) |
Трилинейная фильтрация — это расширение метода билинейной фильтрации текстур , которое также выполняет линейную интерполяцию между MIP-картами . [1] [2]
Билинейная фильтрация имеет несколько недостатков, которые во многих случаях делают ее непривлекательным выбором: использование ее на полнодетализированной текстуре при масштабировании до очень маленького размера вызывает проблемы с точностью из-за пропущенных текселей , а компенсация этого за счет использования нескольких MIP-карт по всему полигону приводит к резкие изменения размытости, что наиболее выражено на полигонах, расположенных под большим углом относительно камеры.
Чтобы решить эту проблему, трилинейная фильтрация интерполирует результаты билинейной фильтрации на двух MIP-картах, наиболее близких к деталям, необходимым для полигона в пикселе. [3] Если пиксель будет занимать 1/100 текстуры в одном направлении, трилинейная фильтрация будет интерполировать между результатом фильтрации MIP-карты 128×128 как y 1 с x 1 как 128 и результатом фильтрации MIP-карты 64×64. как y 2 с x 2 как 64, а затем интерполировать до x = 100 .
Первым шагом в этом процессе является определение размера рассматриваемого пикселя с точки зрения текстуры. Есть несколько способов сделать это, и упомянутые здесь не обязательно подходят для всех из них.
- Используйте расстояние вдоль текстуры между текущим пикселем и пикселем справа (или слева, или сверху, или снизу) в качестве размера пикселя.
- Используйте наименьший (или самый большой, или средний) из различных размеров, определенных с помощью вышеуказанного метода.
- Определите значения uv для углов пикселя, используйте их для расчета площади пикселя и выясните, сколько пикселей одинакового размера займет всю текстуру.
Как только это будет сделано, билинейная фильтрация выполняется на двух MIP-картах с размерами пикселей, которые сразу больше и меньше расчетного размера пикселя, а затем интерполируется между ними как обычно.
Поскольку он использует как большие, так и меньшие MIP-карты, трилинейную фильтрацию нельзя использовать в тех местах, где пиксель меньше текселя в исходной текстуре, поскольку MIP-карты большего размера, чем исходная текстура, не определены. Билинейная фильтрация по-прежнему работает, и ее можно использовать в таких ситуациях, не слишком беспокоясь о резкости, поскольку билинейная и трилинейная фильтрация дают один и тот же результат, когда размер пикселя точно такой же, как размер текселя в соответствующем MIP-карте.
У трилинейной фильтрации по-прежнему есть недостатки, поскольку предполагается, что пиксель по-прежнему занимает квадратную область текстуры. В частности, когда текстура находится под крутым углом по отношению к камере, детализация может быть потеряна. [1] потому что пиксель на самом деле занимает узкую, но длинную трапецию: в узком направлении пиксель получает информацию из большего количества текселей, чем он на самом деле покрывает (поэтому детали размазываются), а в длинном направлении пиксель получает информацию из меньшего количества текселей, чем на самом деле он покрывает (поэтому детали попадают между пикселями). Чтобы облегчить это, анизотропную («зависящую от направления») фильтрацию. можно использовать [1]
Ссылки
[ редактировать ]- ^ Jump up to: а б с Уайльд, Тайлер (13 марта 2019 г.). «Описание графических возможностей ПК» . ПК-геймер . Проверено 3 февраля 2024 г.
- ^ «Точная настройка графики» . Максимум ПК . Август 2004 года . Проверено 3 февраля 2024 г.
- ^ Пулли, Кари; Аарнио, Томи; Миеттинен, Вилле; Ромейя, Киммо; Ваарала, Яни (19 ноября 2007 г.). Мобильная 3D-графика с OpenGL ES и M3G . Эльзевир Наука . ISBN 978-0-08-055591-1 .