Интерполяция текстур: как она влияет на производительность графического процессора

Интерполяция текстур: как она влияет на производительность графического процессора

С момента появления первых 3D-карт на ПК используется то, что мы называем интерполяцией текстур. Который изначально использовался, чтобы избежать эффекта пикселизации в текстурах сцены. Это делается с помощью блока, называемого «блоками управления текстурой» или сокращенно блоков текстуры. Мы объясним, как это влияет на производительность ваших графических процессоров.

Одна из основных составляющих каждого GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР - это текстурный блок, который отвечает за размещение изображения в треугольнике каждой сцены, процесс, который мы называем текстурированием, но также и за то, что мы называем интерполяцией текстуры.

Как работает интерполяция текстур?

Фильтр текстур простой

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

Сегодня используются гораздо более сложные системы интерполяции, чем билинейный фильтр, которые используют большее количество пикселей на выборку. Как и в случае с анизотропным фильтром на различных уровнях, который может использовать 8, 16 и даже 32 отсчета на пиксель для достижения более высокого качества изображения.

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

Интерполяция текстур и кеш данных

TFLOPS Скоростной графический процессор

Когда блок текстуры выполняет процесс обучения многоугольнику, он ищет значение цвета, хранящееся в текстуре в памяти, применяет его к соответствующему пикселю, выполняет соответствующие вычисления с указанным шейдером или шейдерами, и конечный результат отправляет его в ROPS, чтобы он был записан в буфер изображения.

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

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

В то же время, если требуется использовать текстурный фильтр более высокой точности, поскольку каждый текстурный блок принимает только 4 выборки за такт, тогда необходимо использовать большее количество тактовых циклов для выполнения гораздо более сложных алгоритмов интерполяции текстур, тем самым снижение скорости текстурирования.

Вычислительная стоимость интерполяции текстур

Графический процессор NVIDIA

Сегодня шейдерные блоки способны выполнять огромное количество вычислений за такт, не зря они способны выполнять несколько TFLOPS, причем FLOPS являются операциями с плавающей запятой, а T соответствует префиксу Tera, который относится к 10 ^ 12 операциям, поэтому вычислительная мощность графических процессоров значительно возросла.

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

Следует учитывать, что интерполяция текстуры выполняется для всех текселей, которые обрабатываются в сцене, что является огромным объемом, особенно если мы говорим о высоких разрешениях, таких как 1440P или 4K. Так что удалять их с оборудования невыгодно, и все графическое оборудование без них будет иметь серьезные проблемы с производительностью, если оно обойдется без них, не говоря уже о том, что все игры и приложения уже принимают свое существование как должное.

Текущие ограничения на текстурный блок

Графический процессор AMD VRAM

После того, как мы объяснили его полезность, мы должны принять во внимание, каковы ограничения относительно единицы текстур для интерполяции. Обычным форматом текстуры является RGBA8888, где каждый из компонентов имеет 8-битную точность и, следовательно, имеет 256 значений для каждого цветового компонента.

Это значительно облегчает реализацию интерполяции текстур на аппаратном уровне. Поскольку, хотя каждый блок текстуры извлекает из кэша данных 32 бита каждого пикселя, каждый из четырех компонентных компонентов обрабатывается отдельно, а не вместе.

Интерполяционные текстуры артефактов

Проблемы с этой реализацией? Когда текстурный блок выполняет интерполяцию каждого из 4 компонентов, он делает это, используя только 256 значений, что, несмотря на упрощение аппаратной реализации интерполяции текстуры, снижает точность данных, которые могут быть получены, для чего мы не делаем получить идеальный результат для интерполяции, но приближение к нему.

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