Билинейная фильтрация текстур
Билинейная фильтрация вычисляет взвешенный средний показатель 4 текселей, наиболее близких к точке выборки. Этот способ фильтрации является более точным и распространенным, чем фильтрация по ближайшим точкам. Это эффективный способ, поскольку он реализован в современном графическом оборудовании.
Примере
Текстуры всегда линейно описываются от (0,0, 0,0) в верхнем левом углу до (1,0, 1,0) в нижнем правом углу. Линейное описание текстуры показано на следующем рисунке.
Обычно текстуры представляются как состоящие из сплошных блоков цвета, однако правильнее воспринимать текстуры так же, как растровые дисплеи: каждый тексель определяется точно по центру ячейки сетки, как показано на следующем рисунке.
Если запросить у инструмента "пипетка" UV-координаты этого цвета текстуры (0,375, 0,375), вы получите однотонный красный (255, 0, 0). Это логично, поскольку центр ячейки красного текселя находится в UV (0,375, 0,375). А что если с помощью пипетки определить цвет текстуры на UV (0,25, 0,25)? Это непросто, поскольку точка UV (0,25, 0,25) лежит точно на углах 4 текселей.
Проще всего просто вернуть цвет ближайшего текселя с помощью пипетки; это называется точечной фильтрацией (см. раздел Выборка с ближайших точек), однако использовать ее не рекомендуется из-за зернистости и неточности результатов. Точечная выборка нашей текстуры в точке UV (0,25, 0,25) показывает еще одну скрытую проблему с фильтрацией по ближайшим точкам: в этой точке четыре равноудаленных от точки выборки текселя, поэтому выбрать один ближайший тексель невозможно. Один из этих четырех текселей будет выбран в качестве возвращенного цвета, однако выбор зависит от округления координаты, а это, в свою очередь, может привести к разрывам артефактов (см. статью "Выборка с ближайших точек" в SDK).
Чуть более точная и распространенная схема фильтрации заключается в том, что необходимо вычислить средневзвешенное значение 4 текселей, которые находятся ближе всего к точке выборки; это называется билинейной фильтрацией. Как правило, на дополнительную нагрузку на вычислительные ресурсы в связи с билинейной фильтрацией не обращают внимания, поскольку процедура реализована в современном графическом оборудовании. Вот какие цвета мы получим в разных точках выборки, используя билинейную фильтрацию:
UV: (0.5, 0.5)
Эта точка находится точно на границе между красным, зеленым, синим и белым текселями. Инструмент "пипетка" возвращает серый цвет:
0.25 * (255, 0, 0)
0.25 * (0, 255, 0)
0.25 * (0, 0, 255)
## + 0.25 * (255, 255, 255)
------------------------
= (128, 128, 128)
UV: (0.5, 0.375)
Эта точка находится в середине границы между красным и зеленым текселями. Пипетка возвращает желто-серый цвет (обратите внимание, что влияние синего и белого текселей равно 0):
0.5 * (255, 0, 0)
0.5 * (0, 255, 0)
0.0 * (0, 0, 255)
## + 0.0 * (255, 255, 255)
------------------------
= (128, 128, 0)
UV: (0.375, 0.375)
это адрес красного текселя, возвращенного цвета (все остальные тексели в вычислении фильтрации имеют нулевой вес):
1.0 * (255, 0, 0)
0.0 * (0, 255, 0)
0.0 * (0, 0, 255)
## + 0.0 * (255, 255, 255)
------------------------
= (255, 0, 0)
Сравните эти вычисления на следующем рисунке, который показывает, что произойдет, если вычисление билинейной фильтрации выполняется в каждом адресе текстуры 4x4.
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по