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