Трилинейная фильтрация - 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-карте.

У трилинейной фильтрации все еще есть недостатки, потому что предполагается, что пиксель занимает квадратную область текстуры. В частности, когда текстура находится под большим углом по сравнению с камерой, детализация может быть потеряна, потому что пиксель фактически занимает узкую, но длинную трапецию: в узком направлении пиксель получает информацию от большего количества текселей, чем он фактически покрывает ( поэтому детали смазываются), а в длинном направлении пиксель получает информацию от меньшего числа текселей, чем он покрывает на самом деле (поэтому детали падают между пикселями). Чтобы облегчить это, можно использовать анизотропную («зависимую от направления») фильтрацию.

Смотрите также