Зачем нам нужна фильтрация текстур в OpenGL? - PullRequest
2 голосов
/ 25 октября 2019

При отображении текстуры в геометрию, когда мы можем выбрать метод фильтрации между GL_NEAREST и GL_LINEAR.

В в примерах у нас есть координата текстуры, окруженная текселями, напримерИтак:

enter image description here

И объясняется, как каждый алгоритм выбирает цвет фрагмента, например, линейная интерполяция всех соседних текселей на основе расстояния от текстурыкоордината.

Разве каждая текстурная координата, по сути, не является позицией фрагмента, отображаемой в пикселях на экране? Так как же эти координаты меньше, чем тексели, которые по сути являются пикселями и имеют тот же размер, что и фрагменты?

Ответы [ 2 ]

4 голосов
/ 25 октября 2019

Текстуру (2D) можно рассматривать как функцию t(u, v), выход которой представляет собой «цветное» значение. Это чистая функция, поэтому она будет возвращать одно и то же значение для тех же значений u и v. Значение берется из таблицы поиска, хранящейся в памяти, индексированной по u и v, а не посредством каких-либо вычислений.

«Отображение текстуры» - это процесс, с помощью которого вы связываете определенное местоположение вПоверхность с определенным расположением в пространстве текстуры. То есть вы «отображаете» местоположение поверхности на местоположение в текстуре. Таким образом, входные данные для функции текстуры t часто называют «координатами текстуры». Некоторые местоположения поверхности могут отображаться в одну и ту же позицию на текстуре, а некоторые позиции текстуры могут не иметь привязанных к ним местоположений поверхности. Все зависит от отображения

Фактическое изображение текстуры не является гладкой функцией;это дискретная функция. Он имеет значение в точках texel (0, 0) и другое значение в (1, 0), но значение текстуры в (0.5, 0) не определено. В пространстве изображения u и v являются целыми числами.

Ваше изображение увеличенной части текстуры является неправильным. Между текселями есть никаких значений , потому что «между текселями» невозможно. В строке целых чисел нет чисел от 0 до 1.

Однако любое полезное отображение поверхности на функцию текстуры должно происходить в непрерывном пространстве, а не в дискретном пространстве. В конце концов, маловероятно, что каждый фрагмент попадет точно в местоположение, которое соответствует точному целому числу в текстуре. В конце концов, особенно в рендеринге на основе шейдеров, шейдер может просто изобрести отображение произвольно. «Отображение» может основываться на световых направлениях (проективное текстурирование), высоте фрагмента относительно некоторой поверхности или на том, что может пожелать пользователь. Для фрагментного шейдера текстура - это просто функция t(u, v), которую можно вычислить для получения значения.

Поэтому мы действительно хотим, чтобы эта функция находилась в непрерывном пространстве.

ЦельФильтрация заключается в создании непрерывной функции t на , выдвигающей значения между дискретными текселями. Это позволяет вам объявить, что u и v являются значениями с плавающей точкой, а не целыми числами. Мы также нормализуем координаты текстуры, чтобы они находились в диапазоне [0, 1], а не в зависимости от размера текстуры.

3 голосов
/ 25 октября 2019

Фильтрация текстур не определяет цвет фрагмента. Это то, что делает фрагментный шейдер. Однако фрагментный шейдер может сэмплировать текстуру в заданной позиции, чтобы получить цвет. Он может напрямую вернуть этот цвет или обработать его (например, добавить затенение и т. Д.)

При выборке происходит фильтрация текстуры. Координаты текстуры не обязательно являются идеальными позициями пикселей. Например, текстура может быть материалом трехмерной модели, которую вы показываете в перспективе. Тогда фрагмент может охватывать больше, чем один тексель, или может охватывать меньше. Или это может не совпадать с текстурной сеткой. Во всех случаях вам нужна какая-то фильтрация.

Для приложений, которые отображают спрайт в исходном размере без какой-либо деформации, вам обычно не требуется фильтрация, поскольку у вас есть отображение 1: 1 от пикселей экрана до текселей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...