Трилинейная фильтрация - Trilinear filtering
Эта статья не цитировать любой источники.Май 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Трилинейная фильтрация является продолжением билинейный Фильтрация текстур метод, который также выполняет линейная интерполяция между MIP-карты.
У билинейной фильтрации есть несколько недостатков, которые во многих случаях делают ее непривлекательным выбором: ее использование на текстуре с полной детализацией при масштабировании до очень маленького размера вызывает проблемы с точностью из-за пропуска тексели, и компенсация этого за счет использования нескольких MIP-карт по всему многоугольнику приводит к резким изменениям размытости, что наиболее ярко проявляется в многоугольниках, которые расположены под крутым углом относительно камеры.
Чтобы решить эту проблему, трилинейная фильтрация интерполирует результаты билинейной фильтрации на двух MIP-картах, ближайших к деталям, требуемым для многоугольника в пикселе. Если бы пиксель занимал 1/100 текстуры в одном направлении, трилинейная фильтрация будет интерполировать результат фильтрации MIP-карты 128 × 128 как y1 с х1 как 128, а результат фильтрации на MIP-карте 64 × 64 как y2 с х2 как 64, а затем интерполировать до х = 100.
Первым шагом в этом процессе является определение размера рассматриваемого пикселя с точки зрения текстуры. Есть несколько способов сделать это, и упомянутые здесь не обязательно являются репрезентативными для всех из них.
- Используйте расстояние вдоль текстуры между текущим пикселем и пикселем справа (или слева, или выше, или ниже) в качестве размера пикселя.
- Используйте наименьший (или наибольший, или средний) из различных размеров, определенных с помощью описанного выше метода.
- Определить УФ-значения углов пикселя, используйте их для вычисления площади пикселя и выясните, сколько пикселей точно такого же размера займет всю текстуру.
Как только это будет сделано, билинейная фильтрация выполняется на двух MIP-картах с размерами пикселей, которые сразу больше и меньше вычисленного размера пикселя, а затем интерполируются между ними как обычно.
Поскольку он использует как большие, так и меньшие MIP-карты, трилинейную фильтрацию нельзя использовать в местах, где пиксель меньше текселя в исходной текстуре, поскольку MIP-карты больше, чем исходная текстура, не определены. Билинейная фильтрация по-прежнему работает и может использоваться в этих ситуациях, не беспокоясь о резкости, потому что билинейная и трилинейная фильтрация дают тот же результат, когда размер пикселя точно такой же, как размер текселя на соответствующем MIP-карте.
У трилинейной фильтрации по-прежнему есть недостатки, поскольку предполагается, что пиксель по-прежнему занимает квадратную область текстуры. В частности, когда текстура находится под большим углом по сравнению с камерой, детализация может быть потеряна, потому что пиксель фактически занимает узкую, но длинную трапецию: в узком направлении пиксель получает информацию от большего количества текселей, чем покрывает на самом деле ( поэтому детали смазываются), а в длинном направлении пиксель получает информацию от меньшего числа текселей, чем он покрывает на самом деле (поэтому детали падают между пикселями). Чтобы облегчить это, анизотропный ("в зависимости от направления") может использоваться фильтрация.