Фильтрация текстур в играх что
Анизотропная фильтрация
Фильтрация текстур: основная идея
Чтобы понять разницу между различными алгоритмами фильтрации нужно сначала понять, что пытается сделать фильтрация. Ваш экран имеет определенное разрешение и состоит из того, что называется пикселями. Разрешение определяется количеством пикселей. Ваша 3D плата должна определить цвет каждого из этих пикселей. Основой для определения цвета пикселей служат текстурные изображения, которые накладываются на полигоны, расположенные в трехмерном пространстве. Текстурные изображения состоят из пикселей, называемых текселями. По сути, эти тексели являются пикселями 2D изображения, которые наложены на 3D поверхность. Главный вопрос таков: какой тексель (или какие тексели) определяет цвет пикселя на экране?
Представьте себе следующую проблему: предположим, что ваш экран это плита с большим количеством отверстий (давайте исходить из предположения, что пиксели имеют круглую форму). Каждое отверстие это пиксель. Если вы посмотрите через отверстие, вы увидите какой цвет оно имеет, соотносительно трехмерной сцены, раполагающейся за плитой. Теперь представьте себе световой луч, проходящий через одно из этих отверстий и попадающий на текстурированный полигон, расположенный за ним. Если полигон расположен параллельно экрану (т.е. нашей воображаемой плите с отверстиями), тогда световой луч попав на него образует круглое световой пятно (см. рис. 1). Теперь, вновь подключив воображение, заставим полигон вращаться вокруг своей оси и самые простые познания подскажут вам, что форма светового пятна изменится, и вместо круглой станет эллиптической (см. рис. 2 и 3). Вы, вероятно, желаете знать, какое отношение имеет это пятно света к проблеме определения цвета пикселя. Элементарно, все полигоны, расположенные в этом пятне света определяют цвет пикселя. Все, что мы тут обсудили и есть основные знания, которые необходимо знать для того, что бы понять различные алгоритмы фильтрации.
Посмотреть на различные формы светового пятна можно на следующих примерах:
1. Point Sampling
Point Sampling — поточечная выборка. Это самый простой способ определения цвета пикселя на основе текстурного изображения. Вам нужно всего лишь выбрать тексель, ближе всех расположенный к центру светового пятна. Разумеется, вы совершаете ошибку, так как цвет пикселя определяют несколько текселей, а вы выбрали только один. Вы так же не принимаете во внимание тот факт, что форма светового пятна может измениться.
Главный преимущество такого метода фильтрации — это низкие требования к ширине полосы пропускания памяти, т.к. для определения цвета пикселя вам нужно выбрать всего лишь один тексель из текстурной памяти.
Главный недостаток — это тот факт, что когда полигон расположен ближе к экрану (или точке наблюдения) количество пикселей будет больше, чем количество текселей, следствием чего станет блочность и общее ухудшение качества изображений.
Однако, главная цель применения фильтрации это не улучшение качества при сокращении расстояния от точки наблюдения до полигона, а избавление от эффекта неправильного расчета глубины сцены (depth aliasing).
2. Bi-Linear Filtering
Bi-Linear Filtering — билинейная фильтрация. Состоит в использовании интерполяционной техники. Иными словами, применительно к нашему примеру, для определения текселей, которые должны быть задействованы для интерполяции, используется основная форма светового пятна — круг. По существу, круг аппроксимируется 4 текселями. Этот способ фильтрации представляет собой существенно лучше поточечной выборки (point sampling), так как отчасти принимается во внимание форма светового пятна и используется интерполяция. Это означает, что если полигон приближается слишком близко к экрану или точке наблюдения, то для интерполяции потребуется больше текселей, чем в действительности доступно. В результате получается прекрасно выглядящее расплывчатое изображение, впрочем это лишь побочный эффект.
Главный недостаток билинейной фильтрации в том, что аппроксимация выполняется корректно только для полигонов, которые расположены параллельно экрану или точке наблюдения. Если полигон развернут под углом (а это в 99% случаев), значит вы используете неправильную аппроксимацию. Неправильность заключается в том, что вы используете аппроксимацию круга, в то время, как должны аппроксимировать эллипс. Главная проблема в том, что при билинейной фильтрации требуется считывать по 4 текселя из текстурной памяти для определения цвета каждого выводимого на экран пикселя, а значит требования к ширине полосы пропускания памяти увеличиваются в четыре раза, по сравнению с поточечной фильтрацией.
3. Tri-Linear filtering
Tri-Linear filtering — трилинейная фильтрация, представляет собой симбиоз mip-текстурирования и билинейной фильтрации. Фактически, вы производите билинейную фильтрацию на двух mip уровнях, что в результате дает вам 2 текселя, по одному для каждого mip уровня. Цвет пикселя, который должен быть выведен на экран, определяется в результате интерполяции по цветам двух mip-текстур. По сути, mip уровни представляют собой заранее рассчитанные более маленькие версии исходной текстуры, а это означает, что мы получаем более хорошую аппроксимацию текселей, расположенных в пятне света.
Эта техника обеспечивает лучшую фильтрацию, но имеет лишь небольшие преимущества перед билинейной фильтрацией. Требования к ширине полосы пропускания памяти удваиваются, по сравнению с билинейной фильтрацией, так как вам необходимо считать 8 текселей из текстурной памяти. Использование мипмеппинга обеспечивает лучшую аппроксимацию (используется большее число текселей, расположенных в световом пятне) по всем текселям в световом пятне, благодаря использованию заранее рассчитанных mip-текстур.
4. Anisotropic filtering
Anisotropic filtering — анизотропная фильтрация. Итак, чтобы получить действительно хорошие результаты, вы должны помнить, что все тексели в световом пятне определяют цвет пикселя. Вы так же должны помнить, что форма светового пятна изменяется вместе с изменением положения полигона относительно точки наблюдения. До этого момента мы использовали лишь 4 текселя вместо всех текселей, покрываемых световым пятном. Это означает, что все эти техники фильтрации дают искаженный результат, когда полигон расположен дальше от экрана или от точки наблюдения, т.к. вы не используете достаточный объем информации. На самом деле вы осуществляете сверх меры фильтрацию в одном направлении, и совершенно недостаточно фильтруете во всех остальных. Единственным преимуществом у всех описанных выше фильтраций является тот факт, что при приближении к точке наблюдения, изображение выглядит менее блочным (хотя это всего лишь побочный эффект). Таким образом, чтобы добиться наилучшего качества, мы должны использовать все тексели, покрываемые световым пятном и усреднять их значение. Однако, это серьезно ударяет по пропускной способности памяти — ее попросту может не хватить, и выполнить такую выборку с усреднением нетривиальная задача.
Вы можете использовать разнообразные фильтры для аппроксимации формы светового пятна в виде эллипса для нескольких возможных углов положения полигона относительно точки зрения. Существуют техники фильтрации, которые используют от 16 до 32 текселей из текстуры для определения цвета пикселя. Правда использование подобной техники фильтрации требует существенно большей ширины полосы пропускания памяти, а это почти всегда невозможно в существующих системах визуализации без применения дорогостоящих архитектур памяти. В системах визуализации, использующих тайлы 1 существенно экономятся ресурсы полосы пропускания памяти, что позволяет использовать анизотропную фильтрацию. Визуализация с применением анизотропной фильтрации обеспечивает лучшее качество изображения, за счет лучшей глубины детализации и более точного представления текстур, наложенных на полигоны, которые расположены не параллельно экрану или точке наблюдения.
1 Tile (тайл) — плитка или фрагмент изображения. Фактически тайл представляет собой участок изображения, обычно с размером 32 на 32 пикселя; по этим участкам осуществляется сортировка с целью определения, какие полигоны, попадающий в этот тайл являются видимыми. Тайловая техника реализована в чипсетах VideoLogic/NEC.
Дополнительную информацию по данной теме можно прочитать здесь и здесь.
Проверяем анизотропную фильтрацию в играх
Споры о визуальном отличии на видеокартах АМД и НВидиа уже ведутся тысячи лет. И победителя в этой войне пока не видно…
реклама
Но сейчас речь вовсе не об этом бесконечном споре. Да и оппонента у меня нет. Просто цепь обстоятельств натолкнула меня на мысль провести данное тестирование.
Первый неприятный момент был обнаружен в игре Horizon Zero Dawn, где даже последние патчи не исправили проблему отвратительно работающей анизотропной фильтрации. Ну и второй случай произошел в игре Sniper Ghost Warrior Contracts 2 (об этом немного позже).
Тестирование будет очень простым. Для начала я сделаю скриншот из игры на настройках из самой игры, они будут либо максимальными, либо игровыми, но фильтрация на максимум. А затем через панель управления НВидиа выставлю принудительно анизотропную фильтрацию х16:
реклама
Процессор Xeon E3-1240 v3 (частота 3800 МГц)
Оперативная память:16 Гб, тактовая частота 1800 МГц (11-11-11-28 cr1)
реклама
Материнская плата: MSI z97 Gaming 5
Видеокарта: EVGA GTX 1070 FTW (частота ядра 1962-1949 МГц и памяти 8000 МГц)
Assassins Creed IV Black Flag – лучшая, на мой взгляд, игра бесконечного конвейера компании Ubisoft.
реклама
Настройки игры максимальные, кроме сглаживания и, отключенного размытия при движении.
Разница между игровыми настройками и включенной принудительно почти нет. По крайней мере в игре этого практически незаметно.
Второй игрой по алфавиту пойдет третья часть культовой трилогии: BioShock Infinite.
Настройки игры максимальные, но размытие при движении отключено.
Тут никаких проблем на первый взгляд не видно. Но только при рассматривании скриншотов можно обнаружить, что при включении анизотропной фильтрации через драйвер, тени немного более качественные. Изменения настолько небольшие, что никакого влияния на производительность это не оказывает:
Результата от манипуляций нет совсем:
Анизотропная фильтрация выставлена на максимум. Но игровой вариант х16 немного отличается от принудительного х16. Это видно по решеткам на скриншоте, хотя и в этом случае такое заметно только при непосредственном сравнении скриншотов.
Даже на скриншоте не сразу можно найти разницу. Это более четкие листья на удаленных деревьях. Очень незначительное отличие:
Horizon Zero Dawn. Тут даже не надо отличия обводить кружками и так все видно. В игре особенно это заметно на земле и досках:
Несмотря на то, что принудительное включение анизотропной фильтрации улучшает картинку, это практически не оказывает влияния на снижение производительности (ну, скинем один кадр).
Ну еще один «виновник торжества»: Sniper Ghost Warrior Contracts 2.
Настройки игры максимальные. В некоторых локациях плохая отрисовка поверхности земли особенно заметна. Задействование панели управления НВидиа практически полностью снимает эту проблему. Но…за счет очень заметного снижения частоты кадров. Именно этот момент сначала и смутил меня: я грешил, что старый драйвер дает лучшую производительность. Но дело оказалось во включенной фильтрации. Я сделал три скриншота в разных местах, чтобы показать падение производительности:
Больше таких ситуаций в других играх я не встречал.
Настройки в играх: с чувством, с толком, с расстановкой
В связи с многократными вопросами и спорами, связанными с FPS в тестах для видеокарт, представленными на нашем сайте, мы решили более детально остановиться на этом вопросе и рассказать вам про настройки игр.
Все знают, что в современных играх достаточно настроек графики для улучшения качества картинки или повышения производительности в самой игре. Рассмотрим основные настройки, которые присутствуют практически во всех играх.
Разрешение экрана
Пожалуй, этот параметр является одним из главных, влияющих как на качество картинки, так и на производительность игры. Данный параметр зависит исключительно от матрицы ноутбука, и поддержки данного разрешения игрой (от 640х480 до 1920х1080). Тут все просто и пропорционально, чем больше разрешение, тем четче картинка и больше нагрузка на систему, и, соответственно, наоборот.
Качество графики
Практически в каждой игре есть свои стандартные настройки графики, которые вы можете использовать. Обычно это «низкие»», «средние», «высокие» и в некоторых играх присутствует графа «ультра». В эти установки уже изначально заложен набор настроек (качество текстур, сглаживание, анизотропная фильтрация, тени… и многие другие) и пользователь может выбрать профиль, который лучше всего подходит под его конфигурацию ПК. Думаю тут все понятно, чем лучше настройка графики, тем реалистичнее смотрится игра, и, конечно же, возрастают требования к устройству. Ниже вы можете посмотреть видео, и сравнить качество картинки во всех профилях.
Качество текстур
Данная настройка отвечает за разрешение текстур в игре. Чем выше разрешение текстур, тем более четкую и детализированную картинку вы видите, соответственно и нагрузка на GPU будет больше.
Качество теней
Эта настройка регулирует детализацию теней. В некоторых играх тени можно вообще отключить, что даст существенный прирост производительности, но картинка не будет такой насыщенной. На высоких настройках тени будут более реалистичные и мягкие.
Качество эффектов
Данный параметр влияет на качество и интенсивность эффектов, таких как дым, взрывы, выстрелы, пыль и многие другие. В разных играх данная настройка влияет по-разному, в некоторых разницу между низкими и высокими настройками очень тяжело заметить, а в некоторых отличия очевидны. Влияние данного параметра на производительность зависит от оптимизации эффектов в игре.
Качество окружающей среды
Параметр, отвечающий за геометрическую сложность каркасов в объектах окружающего игрового мира, а также их детализацию (особенно заметна разница на дальних объектах). На низких настройках возможны потери детализации объектов (домов, деревьев, машин и т.д.). Удаленные объекты становятся практически плоским, округлые формы получаются не совсем круглыми, при этом практически каждый объект лишается каких-то мелких деталей.
Покрытие ландшафта
В некоторых играх указывается как «Плотность травы» либо носит другие подобные названия. Отвечает за количество травы, кустов, веток, камней и прочего мусора находящегося на земле. Соответственно чем выше параметр, тем более насыщенной разными объектами выглядит земля.
Анизотропная фильтрация
Когда текстура отображается не в своем исходном размере, в нее вставляются дополнительные или убираются лишние пиксели. Для этого и применяется фильтрация. Существует три вида фильтраций: билинейная, трилинейная и анизотропная. Самой простой и наименее требовательной является билинейная фильтрация, но и результат от нее наихудший. Трилинейная фильтрация тоже не даст вам хороших результатов, хоть она и добавляет четкости, но также генерирует артефакты.
Самой лучшей фильтрацией является анизотропная, которая заметно устраняет искажения на текстурах сильно наклоненных относительно камеры. Для современных видеокарт, данный параметр практически не влияет на производительность, но существенно улучшает четкость и естественный вид текстуры.
Сглаживание
Принцип работы сглаживания таков: до вывода картинки на экран она рассчитывается не в родном разрешение, а в двукратном увеличении. Во время вывода картинка уменьшается до нужных размеров, причем неровности по краям объекта становятся менее заметными. Чем больше исходное изображение и коэффициент сглаживания (x2, x4, x8, x16), тем меньше неровностей будет заметно на объектах. Собственно само сглаживание нужно для того чтобы максимально избавится от «лестничного эффекта» (зубцов по краям текстуры).
Существуют разные виды сглаживания, чаще всего в играх встречаются FSAA и MSAA. Полноэкранное сглаживание (FSAA) используется для устранения «зубцов» на полноэкранных изображениях. Минус данного сглаживания заключается в обработке всей картинки целиком, что конечно значительно улучшает качество изображения, но требует большой вычислительной мощности графического процессора.
Multisample anti-aliasing (MSAA), в отличие от FSAA, сглаживает только края объектов, что приводит к небольшому ухудшению графики, но при этом экономит огромную часть вычислительной мощи. Так что если вы не обладаете топовой игровой видеокартой, лучше всего использовать MSAA.
SSAO (Screen Space Ambient Occlusion)
В переводе на русский означает «преграждение окружающего света в экранном пространстве». Является имитацией глобального освещения. Увеличивает реалистичность картинки, создавая более «живое» освещение. Дает нагрузку только на GPU. Данная опция значительно уменьшает количество FPS на слабых графических адаптерах.
Размытие в движение
Также известно как Motion Blur. Это эффект, смазывающий изображение при быстром передвижении камеры. Придает сцене больше динамики и скорости (часто используется в гонках). Увеличивает нагрузку на GPU, тем самым уменьшает количество FPS.
Глубина резкости (Depth of field)
Эффект для создания иллюзии присутствия за счет размытия объектов в зависимости от их положения относительно фокуса. Например, разговаривая с определенным персонажем в игре, вы видите его четко, а задний фон размыто. Такой же эффект можно наблюдать если сконцентрировать взгляд на предмете расположенном вблизи, более дальние объекты будут размыты.
Вертикальная синхронизация (V-Sync)
Синхронизирует частоту кадров в игре с частотой вертикальной развертки монитора. При включенной V-Sync, максимальное количество FPS равно частоте обновления монитора. Если же количество кадров в игре у вас ниже, чем частота развертки монитора, стоит включить тройную буферизацию, при которой кадры подготавливаются заранее, и хранятся в трех раздельных буферах. Преимущество вертикальной синхронизации состоит в том, что она позволяет избавиться от нежелательных рывков, при резких скачках FPS.
Не обошлось и без недостатков, например в новых требовательных играх возможно сильное падение производительности. Также в динамических шутерах или онлайн играх, V-Sync может только навредить.
Заключение
Выше изложены основные, но далеко не все настройки в играх. Стоит напомнить, что каждая игра имеет свой уровень оптимизации, и свой ряд настроек. В некоторых случаях игры с лучшей графикой будут идти на вашем ноутбуке быстрее, чем неоптимизированные игры с более низкими требованиями. Большинство игр позволяет использовать как уже готовые настройки, так и задавать вручную каждый отдельно взятый параметр. Часть из рассмотренных выше эффектов поддерживается только в новых DirectX 11 играх, а в более старых с поддержкой DirectX 9 их просто нет.
Желаем вам приятного времяпровождения и незабываемых ощущений в играх.
Различные насторойки фильтрации и сглаживания текстур на примере Counter-Strike:Source
Владельцы сверхмощных систем могут не беспокоиться, выбирая все настройки на максимум. Но обладатели значительно более слабых компьютеров вынуждены выбирать между производительностью и качеством. Вот тут и вступают в силу то множество настоек, которое можно наблюдать в различных пунктах меню. На примере Counter-Strike:Source мы рассмотрим их влияние на производительность и качество картинки.
Теория: Фильтрация текстур.
Более совершенным методом фильтрации является Билинейная фильтрация. Здесь, в отличии от point sampling, происходит усреднение значений цветов четырех текселей текстуры, расположенных ближе всего к центру пикселя. Данный метод совсем не требователен к ресурсам ПК, но побочным эффектом является значительная размытость, особенно заметная на наклоненных плоскостях.
Принцип работы Трилинейной фильтрации устроен несколько сложнее. Изначально берется 4 текселя одной MIP-текстуры (уменьшенная текстура-шаблон, которая может повторяться многие десятки и сотни раз, разгружая карту, чем если бы она работала с полноразмерной текстурой), расположенных ближе всего к центру нужного пикселя, и 4 соседних текселя другой MIP-текстуры. Затем происходит усреднение цветов, сначала отдельно на каждом из двух MIP-уровней (по значению цветов выбранных текселей), а после суммируются получившиеся два значения. Метод чуть-более ресурсоемкий, да и некая размытость остается, хотя и не столь вездесущая, как у билинейной фильтрации.
Значение | Количество текселей |
---|---|
2x | 16 текселей |
4x | 32 текселя |
8x | 64 текселя |
16x | 128 текселей |
Анизотропная фильтрация дает отличный результат, но при этом потребляется огромное количество ресурсов, что гарантированно приведет к сильному падению фпс. Разумеется, на сильных машинах в старых играх это падение чувствоваться не будет, но несомненно, видеокарте будет не сладко.
Значение | Количество sup-samples |
---|---|
2x | 2 |
4x | 4 |
8x | 8 |
И все же, такой метод крайне ресурсоемкий, поскольку, как уже упоминалось, видеокарте приходится генерировать кадр в 2, 4 или 8 раз больше, в зависимости от установленного уровня сглаживания.
Проще говоря, если представить сетку пикселей, наложенную на текстуру, возможны такие участки, где один пиксель будет находиться на границе двух объектов, т.е. ему придется передавать два совершенно разных цвета. Поскольку такое невозможно, точки перекрытия говорят видеокарте каким именно объектом она «перекрыта». На основе этих данных, видеокарта рассчитывает соотношение площадей объектов в данном пикселе выводя итоговый цвет. В отличии от MSAA, здесь аббревиатура сообщает о количестве coverage-samples.
Значение | Количество sup-samples | Количество coverage-samples |
---|---|---|
8x | 4 | 8 |
16x | 4 | 16 |
16xQ | 8 | 16 |
И вот, теперь, когда мы ознакомились с основными понятиями о фильтрации и сглаживании текстур, можно перебираться на практику.
Конфигурация компьютера:
Процессор: Intel Core 2 Quad Q6600 @ 3200MHz (400×8, 1.3125V)
Видеокарта: Palit Nvidia GeForce 8800GT
Материнская плата: Asus P5Q PRO TURBO
Память: 2x2048MB DDR2 Corsair XMS2 @ 1066MHz, 5-5-5-15
Блок питания: Corsair CMPSU-850HXEU 850W
Процессорный кулер: Zalman CNPS9700 LED
ОС: Windows 7 Ultimate x64
Версия видео драйвера: Nvidia 195.62 x64
Главным испытуемым в нашем сегодняшнем тестировании стала очень старая, но не менее знаменитая Counter-Strike:Source, поскольку эта одна из немногих по-настоящему распространенных игр, предоставляющих огромный набор различных настроек сглаживания и фильтрации. Несмотря на древность движка (2004 год), данная игра по-прежнему может неплохо нагрузить даже самую современную платформу. Вот такой богатый ассортимент настроек представлен пользователю:
Тесты сглаживания и фильтрации проводились во встроенном бенчмарке, при разрешении 1280×1024. Все остальные настройки были приняты за максимальные, как на скриншоте сверху. С целью максимально приблизить результат к истине, каждый параметр тестировался трижды, после чего находилось среднее арифметическое получившихся значений.
И так, что же у нас получилось:
Результаты получились достаточно неожиданными. Технология coveragesampling (CSAA), которая по определению должна потреблять меньше ресурсов чем MSAA, здесь показывает совершенно обратную картину. Причин данного явления может быть великое множество. Прежде всего необходимо учитывать, что во многом производительность при включении сглаживания зависит от архитектуры GPU. Да и оптимизация различных технологий самой игры и версия драйвера играют не меньшую роль. Поэтому результаты при использовании других видеокарт, или, даже, другой версии драйвера, могут быть совершенно иными.
Тесты с отключенным сглаживанием (для удобства восприятия отмечены синим цветом) показали примерно равную картину, что свидетельствует о небольшой разнице нагрузок на видеокарту.
Кроме того, проглядывается явное соответствие показателей фпс, при использовании одинакового метода сглаживания, для AF 8x и AF 16x. При этом, разница колеблется в диапазоне от 1 до 4 фпс (за исключением MSAA 8x, где разница составляет 11 фпс). Это говорит о том, что использование фильтрации 16х может быть очень полезным, если необходимо повысить качество картинки, без существенного удара по производительности.
И все же, необходимо оговориться, что получить такие же значения фпс непосредственно в игре попросту нереально, поскольку многие сцены оказываются значительно сложнее, особенно с множеством игроков.
Billinear / MSAA 2x | Trillinear / MSAA 2x | AF 2x / MSAA 2x |
AF 2x / CSAA 8x | AF 2x / MSAA 8x | AF 2x / CSAA 16x |
AF 2x / CSAA 16xQ | AF 8x / MSAA x2 | AF 8x / CSAA 8x |
AF 8x / MSAA 8x | AF 8x / CSAA 16x | AF 8x / CSAA 16xQ |
AF 16x / MSAA 2x | AF 16x / CSAA 8x | AF 16x / MSAA 8x |
AF 16x / CSAA 16x | AF 16x / CSAA 16xQ | Billinear / CSAA 16xQ |
Разумеется, для достоверности показаний следовало проводить тесты производительности как на других видеочипах, так и на дополнительных играх.
Как бы то не было, возвращаясь к теме данной статьи, каждый сам выбирает с какими настройками играть. И я не буду давать советов или рекомендаций, поскольку они заранее обречены на провал. Надеюсь, вышеизложенная теория с тестами помогут вам ближе ознакомиться с описанными технологиями.