Настройки графики в играх: на что они влияют? Фильтрация анизотропная: для чего нужна, на что влияет, практическое использование.

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

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

Какими бывают карты?

Делать какой-то сверхразвитый движок в наше время - это достаточно серьезная трата средств. И при этом весомый риск. Такими приемами пользуются только высокобюджетные проекты с масштабной рекламой, которые заранее, еще до выхода, уверены в том, что игру будут активно сметать с прилавков. Также следует отметить тот факт, что в последнее время особенное внимание уделяется «политике» касательно современных игровых движков, ведь в сфере игростроя давным-давно присутствует политика, которая предпочитает учитывать интересы двух передовых компаний в области графических процессоров - это NVIDIA и ATI.

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

А графика все растет и растет…

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

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

Что такое анизотропная фильтрация?

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

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

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

Принцип действия

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

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

Как это работает?

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

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

Зачем она нужна?

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

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

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

Что лучше выбрать?

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

Насколько это помогает?

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

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

Point Sampling

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

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

Фильтрация текстур.

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

Простейший метод наложения текстур называется поточечная выборка (single point-sampling). Суть его в том, что для каждого пикселя, составляющего полигон, выбирается один тексель из текстурного изображения, ближе всех расположенный к центру светового пятна. Совершается ошибка, так как цвет пикселя определяют несколько текселей, а выбран был только один.

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

Второй метод - билинейная фильтрация (Bi-Linear Filtering) состоит в использовании интерполяционной техники. Для определения текселей, которые должны быть задействованы для интерполяции, используется основная форма светового пятна -- круг. По существу, круг аппроксимируется 4 текселями. Билинейная фильтрация - это техника устранения искажений изображения (фильтрация), таких, как "блочности" текстур при их увеличении. При медленном вращении или движении объекта (приближение/удаление) могут быть заметны "перескакивания" пикселов с одного места на другое, т.е. появляется блочность. Во избежании этого эффекта применяют билинейную фильтрацию, при использовании которой для определения цвета каждого пикселя берется взвешенное среднее значение цвета четырех смежных текселей и в результате определяется цвет накладываемой текстуры. Результирующий цвет пикселя определяется после осуществления трех операций смешивания: сначала смешиваются цвета двух пар текселей, а потом смешиваются два полученных цвета.

Главный недостаток билинейной фильтрации в том, что аппроксимация выполняется корректно только для полигонов, которые расположены параллельно экрану или точке наблюдения. Если полигон развернут под углом (а это в 99% случаев), используется неправильная аппроксимация, так как должен аппроксимироваться эллипс.

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

В качестве иллюстрации к описанному эффекту могут служить следующие прямоугольники с билинейным текстурированием:

Рис. 13.29. Закраска объекта методом билинейной фильтрации. Появление артефактов "depth-aliasing", выражающихся в том, что несколько квадратов сливаются в один.

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

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

Рис. 13.30. Изображения, связанные с каждым mip-map уровнем волнообразной текстуры.

Слева направо мы имеем mip-map уровни 0, 1, 2 и т.д. Чем меньше становится изображение, тем больше теряется деталей, вплоть до приближения к концу, когда не видно ничего, кроме расплывающегося пятна из серых пикселей.

Степень или уровень детализации - Level of Detail или просто LOD, используются для определения, какой mip-map уровень (или какую степень детализации) следует выбрать для наложения текстуры на объект. LOD должен соответствовать числу текселей накладываемых на пиксель. Например, если текстурирование происходит с соотношением близким к 1:1, то LOD будет 0, а значит и будет использоваться mip-map уровень с самым высоким разрешением. Если 4 текселя накладываются на один пиксель, то LOD будет 1 и будет использоваться следующий mip уровень с меньшим разрешением. Обычно, при удалении от точки наблюдения, объект, заслуживающий наибольшего внимания имеет более высокое значение LOD.

В то время, как mip-текстурирование решает проблему ошибок "depth-aliasing", его использование может стать причиной появления других артефактов. При удалении объекта все дальше от точки наблюдения, происходит переход от низкого mip-map уровня к высокому. В момент нахождения объекта в переходном состоянии от одного mip-map уровня к другому, появляется особый тип ошибок визуализации, известных под названием "mip-banding" - полосатость или слоеность, т.е. явно различимые границы перехода от одного mip-map уровня к другому.

Рис. 13.31. Прямоугольная лента состоит из двух треугольников, текстурированных волнообразным изображением, где "mip-banding" артефакты обозначены красными стрелками.

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

Трилинейная фильтрация (trilinear filtering) представляет собой третий метод, который удаляет артефакты "mip-banding", возникающие при использовании mip-текстурирования. При трилинейной фильтрации для определения цвета пикселя берется среднее значение цвета восьми текселей, по четыре из двух соседних текстур и в результате семи операций смешивания определяется цвет пикселя. При использовании трилинейной фильтрации возможен вывод на экран текстурированного объекта с плавно выполненными переходами от одного mip уровня к следующему, что достигается за счет определения LOD путем интерполяции двух соседних mip-map уровней. Таким образом решая большинство проблем, связанных с mip-текстурированием и ошибками из-за неправильного расчета глубины сцены ("depth aliasing").

Рис. 13.32. Пирамидальность MIP-map

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

Рис. 13.33. Прямоугольник, текстурированный волнообразным изображением, выведен на экран с использованием mip-текстурирования и трилинейной фильтрации.

Существует несколько способов генерации MIP текстур. Один из них - просто подготовить их заранее, используя графические пакеты типа Adobe PhotoShop. Другой способ - генерация MIP текстур на "лету", т.е. в процессе выполнения программы. Заранее подготовленные MIP текстуры означают дополнительные 30% дискового пространства для текстур в базовой поставке инсталляции игры, но позволяют применять более гибкие методы управления их созданием и позволяют добавлять различные эффекты и дополнительные детали различным MIP уровням.

Получается, что трилинейный мипмеппинг это лучшее, что может быть?

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

Метод mip-текстурирования лучше всего работает для полигонов расположенных прямо "лицом к лицу" к точке наблюдения. Однако, полигоны, косонаправленные по отношению к точке наблюдения искривляют накладываемую текстуру так, что на пикселы могут накладываться различного вида и квадратичные по форме области текстурного изображения. Метод mip-текстурирования не принимает это во внимание и в результате наблюдается эффект слишком сильного размытия текстурного изображения, так, будто использованы неправильно выбранные тексели. Для решения этой проблемы нужно делать выборку из большего количества текселей, составляющих текстуру, и выбирать эти тексели следует принимая во внимание "отображенную" форму пикселя в текстурном пространстве. Этот метод называется анизотропная фильтрация ("anisotropic filtering"). Обычное mip-текстурирование называется "isotropic" (изотропное или однородное), потому что мы всегда фильтруем вместе квадратные области, состоящие из текселей. Анизотропная фильтрация означает, что форма области из текселей, которую мы используем меняется в зависимости от обстоятельств.

Сейчас покажу как настроить графическую часть в Counter-Strike: Global Offensive через пользовательский интерфейс игры и как таким образом повлиять на фпс. Это первая статья и для большинства игроков она будет вполне предсказуемой, за парочкой не больших и странных дополнений (Удивительно, но не все настройки надо опускать на минимальные значения). Настройка фпс в CS GO тема довольно большая и объемная, поэтому к его увеличению подойдем системно, ввиде серии статей. Сначала попробуем настроить его простыми, понятными средствами и уже после перейдем к консольным командам. И еще момент, т.к. вы попали на эту статью скорее всего из поисковика, то по умолчанию будем считать, что компьютер на котором все это настраивается - "не тянущий нормально игру" и при этом все драйвера у вас обновлены, дефрагментация сделана, ОС избавлена от лишних служб и красивостей, вирусов нет и подавно. Если это так, то поехали.

Команда для отображения фпс в CS: GO

В консоли набираете одну из команд:
  • cl_showfps 1
  • net_graph 1
  • или в Steam-е выбираете пункт меню Steam - Настройка - вкладка "В игре " - Отображение частоты кадров


Как повысить фпс

Перед тем, как начнете изменять параметры влияющие на графику, пропишите у себя в консоли еще одну команду:
fps_max 0 или fps_max "частота обновления монитора"
Первую, если хотите понять и увидеть насколько максимально возможным может быть фпс у вас в КС ГО.
И вторую, если хотите разумно использовать мощь своего железного друга. То есть, вы приведете в соответствие частоту обновления экрана и частоту генерирумых кадров видеокартой. Тогда это не позволит, генерировать фпс "вхолостую". Другими словами. вы все равно не увидете больше кадров созданных видеокартой, чем успевает показать ваш монитор. (Надеюсь понятно объяснил).
У второго параметра есть не который материальный и осязаемый плюс: если ваш фпс выше частосты монитора, то таким образом вы не будете по полной нагружать видеокарту, она будет меньше шуметь, меньше греться и у нее будет некий запас по производительности, в случае резкого и динамического изменения в игре и тогда возможно меньше будет не приятных просадок. Но есть и минус: не которым игрокам не нравится отзывчивость мыши в таком режиме. Так что выбор оставляю за вами.
Для себя же делал fps_max 0 , так как хотел понять насколько могу поднять фпс.

Настройки видео в CS: GO


Опишу только те параметры, которые действительно влияют на фпс.

  1. Разрешение - Думаю многим известно из вас, что профи играют на разрешении или 1024х768 или 800х600. И это на больших мониторах! Данный параметр очень сильно влияет на фпс. У меня разница между 1280х960 и 1024х768 составила 14 кадров, а между 1280х960 и 800х600 - 23 fps.
  2. Режим отображения - В нашем случае подходит На весь экран. Если выставить На весь экран в окне, то фпс просядет.
  3. Энергосберегающий режим - Выкл. Настройка в основном для ноутбуков. Но если выставите как Вкл, то фпс упадет.
  4. Общее качество теней - В общем и целом на фпс практически не влияет. Для средних и топовых видеокарт особой разницы точно не заметно между Очень низкое и Высокое. К тому же на низком разрешении визуально отличия малозаметно, есть ли смысл тогда в красивостях? Ставим Очень низкое.
  5. Детализация моделей и текстур - Эту настройку ощущает в основном только видеокарта. Поэтому, если у нее памяти достаточно, то ставьте на свое усмотрение. Со своими 256 Мб у меня разница была в 2 фпс между Низкое и Высокое.
  6. Детализация эффектов - влияет на дальность прорисовки и качество эффектов. Так вот эти эффекты обычно возникают когда сильный "замес", куча взрывов, искры, огонь и полно народу. Если у вас в такие моменты ну очень сильно проседает фпс, то попробуйте понизить данный параметр. Во всех остальных случаях - Высокое. У меня разница составила 1 fps.
  7. Детализация шейдеров - При выборе максимального значения, мой фпс упал на 3 пункта. Хотя эта настройка отвечает за качество теней и освещения, всё же вряд ли у всех такой эффект будет. Поэтому поиграйтесь с данным параметровв обе стороны, особенно у тех, у кого слабая видюха.
  8. Многоядерная обработка - в баталиях с большим количеством игроков заметен выигрыш в производительности. У меня он составил 6 фпс. Данный режим задействует несколько ядер процессора одновременно, что в идеале должно сказаться на уменьшении лагов и тормозов. Но это в теории. На практике бывают исключения. Обязательно поиграйтесь с этим значением. Оставляем Вкл.
  9. Режим сглаживания множественной выборки - Убирает эффект "зубчатости" на объектах в КС ГО. Вся нагрузка ложится на видеокарту. У меня разница между отключенным и 4xMSAA составила 7 фпс. Кому интересно, данный режим (MSAA) даёт несколько худшее качество графики, но обеспечивает огромную экономию вычислительной мощности, по сравнению со своим предшественником SSAA.
  10. Режим фильтрации текстур - Для обладателей слабых видеокарт рекомендуется билинейная. Для остальных подойдет - трилинейная. Так как в производительности разницы не заметно. При выборе анизотропной фильтрации будьте готовы потерять 1-2-3 fps-а.
  11. Сглаживание с помощью FXAA - Еще один режим сглаживания Fast appro X imate Anti-Aliasing, не понятно почему его вынесли в отдельный пункт,но оно считается более быстрое и производительное решение по сравнению с MSAA, но на моей видеокарте ATI фпс просел на 13 значений. (Не знаю с чем это связано, возможно с драйвером).
  12. Вертикальная синхронизация - в таком режиме максимальный фпс привязывается к частоте обновления монитора. На топовых и средних видеокартах позволяет экономить их ресурсы и создавать меньше шума, так как они меньше нагреваются.
  13. Размытие движения - сглаживает картинку при резком движении мыши. На фпс не много влияет.

Это был самый простой и доступный способ понизить фпс в Counter-Strike: Global Offensive. Ничего новаторского здесь нет, в отличии от того, что указано в видео ниже.

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

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

Представьте себе черно-белую шахматную доску большого, практически бесконечного размера. Допустим, мы рисуем эту доску на экране и смотрим на нее под небольшим углом. Для достаточно удаленных участков доски размеры клеток неизбежно начнут уменьшаться до размера одного пикселя и меньше. Это так называемое оптическое уменьшение текстуры (minification). Между пикселями текстуры начнется "борьба" за обладание пикселями экрана, что приведет к неприятному мельтешению, что является одной из разновидностей эффекта ступенчатости. Увеличение экранного разрешения (реального или эффективного) помогает только немного, потому что для достаточно удаленных объектов детали текстур все равно становятся меньше пикселей.

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

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

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

Рассмотрим различные методы фильтрации текстур и их вариации.

Ближайший сосед (nearest neighbor)

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

Билинейная фильтрация (bilinear)

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

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

Если рассмотреть, как описывалось выше, "образ" пикселя экрана в текстуре, то для случая сильного уменьшения он будет включать в себя очень много пикселей текстуры (вплоть до всех пикселей!). Кроме того, если мы смотрим на текстуру под углом, этот образ будет сильно вытянут. В обоих случаях описанные методы будут работать плохо, поскольку фильтр не будет "захватывать" соответствующие пиксели текстуры.

Для решения этих проблем применяют так называемый мип-мэппинг и анизотропную фильтрацию.

Мип-мэппинг

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

Термин mipmap произошел от латинского multum in parvo - многое в малом. При использовании этой технологии в памяти графического ускорителя в дополнение к изображению текстуры хранится набор ее уменьшенных копий, причем каждая новая ровно в два раза меньше предыдущей. Т.е. для текстуры размером 256x256 дополнительно хранятся изображения 128x128, 64x64 и т.д, вплоть до 1x1.

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


Рисунок 9. Уровни мипмапа

Однако проблема с "вытянутым" образом пикселя в текстуре остается. Как раз по этой причине наша доска на большом расстоянии выглядит очень нечеткой.

Анизотропная фильтрация

Анизотропная фильтрация - это процесс фильтрации текстуры, специально учитывающий случай вытянутого образа пикселя в текстуре. Фактически, вместо квадратного фильтра (как в билинейной фильтрации), используется вытянутый, что позволяет более качественно выбрать нужный цвет для экранного пикселя. Такая фильтрация используется вместе с мипмэппингом и дает весьма качественные результаты. Однако, существуют и недостатки: реализация анизотропной фильтрации достаточно сложна и при ее включении скорость рисования значительно падает. Анизотропная фильтрация поддерживается последними поколениями графических процессоров NVidia и ATI. Причем с различным уровнем анизотропии - чем больше этот уровень, чем более "вытянутые" образы пикселей можно корректно обрабатывать и тем лучше качество.

Сравнение фильтраций

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

Бамп-мэппинг (Bump mapping)

Бамп-мэппинг (bump mapping) - это тип графических спецэффектов, который призван создавать впечатление "шершавых" или бугристых поверхностей. В последнее время использование бамп-мэппинга стало чуть ли не стандартом игровых приложений.

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

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

Карта нормалей. В этом случае каждый пиксель дополнительной текстуры хранит вектор, перпендикулярный поверхности (нормаль), закодированный в виде цвета. Нормали используются для вычисления освещенности.

Карта смещений. Карта смещений представляет собой текстуру в градациях серого, в каждом пикселе которой хранится смещение от оригинальной поверхности.

Эти текстуры готовятся дизайнерами трехмерных моделей вместе с геометрией и основными текстурами. Существуют и программы, позволяющие получать карты нормалей или смещений автоматически

Препроцессированный бамп-мэппинг (Pre-calculated bump mapping)

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

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

Бамп-мэппинг с помощью тиснения (Emboss bump mapping)

Эта технология применялась на первых графических процессорах (NVidia TNT, TNT2, GeForce). Для объекта создается карта смещений. Рисование происходит в два этапа. На первом этапе карта смещений попиксельно складывается сама с собой. При этом вторая копия сдвигается на небольшое расстояние в направлении источника света. При этом получается следующий эффект: положительные значения разницы определяют освещенные пиксели, отрицательные - пиксели в тени. Эта информация используется для соответствующего изменения цвета пикселей основной текстуры.

Бамп-мэппинг с помощью тиснения не требует аппаратуры, поддерживающей пиксельные шейдеры, однако он плохо работает для относительно крупных неровностей поверхности. Также объекты не всегда выглядят убедительно, это сильно зависит от того, под каким углом смотреть на поверхность.

Пиксельный бамп-мэппинг (Pixel bump mapping)

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

Эта технология поддерживается в аппаратуре начиная с видеокарт уровня GeForce2.

Итак, мы увидели, каким образом можно использовать особенности человеческого восприятия мира для улучшения качества изображений, создаваемый 3D-играми. Счастливые обладатели последнего поколения видеокарт NVidia GeForce, ATI Radeon (впрочем, и не только последнего) могут самостоятельно поиграть с некоторыми их описанных эффектов, благо настройки устранения ступенчатости и анизотропной фильтрации доступны из опций драйверов. Эти и другие методы, оставшиеся за рамками данной статьи, успешно внедряются разработчиками игр в новые продукты. В общем, жизнь становится лучше. То-то еще будет!

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

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


трилинейная

анизотропная

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

Учитывая объем обрабатываемых данных (а в сцене может быть множество 32-битовых текстур высокого разрешения), анизотропная фильтрация особенно требовательна к пропускной способности памяти. Уменьшить трафик можно в первую очередь за счет компрессии текстур, которая сейчас применяется повсеместно. Ранее, когда она практиковалась не так часто, а пропуская способность видеопамяти была гораздо ниже, анизотропная фильтрация ощутимо снижала количество кадров. На современных же видеокартах она почти не влияет на fps.

Анизотропная фильтрация имеет лишь одну настройку коэффициент фильтрации (2x, 4x, 8x, 16x). Чем он выше, тем четче и естественнее выглядят текстуры. Обычно при высоком значении небольшие артефакты заметны лишь на самых удаленных пикселах наклоненных текстур. Значений 4x и 8x, как правило, вполне достаточно для избавления от львиной доли визуальных искажений. Интересно, что при переходе от 8x к 16x снижение производительности будет довольно слабым даже в теории, поскольку дополнительная обработка понадобится лишь для малого числа ранее не фильтрованных пикселов.

Шейдеры
Шейдеры это небольшие программы, которые могут производить определенные манипуляции с 3D-сценой, например, изменять освещенность, накладывать текстуру, добавлять постобработку и другие эффекты.

Шейдеры делятся на три типа: вершинные (Vertex Shader) оперируют координатами, геометрические (Geometry Shader) могут обрабатывать не только отдельные вершины, но и целые геометрические фигуры, состоящие максимум из 6 вершин, пиксельные (Pixel Shader) работают с отдельными пикселами и их параметрами.

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

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

Parallax mapping
Parallax mapping это модифицированная версия известной техники bumpmapping, используемой для придания текстурам рельефности. Parallax mapping не создает 3D-объектов в обычном понимании этого слова. Например, пол или стена в игровой сцене будут выглядеть шероховатыми, оставаясь на самом деле абсолютно плоскими. Эффект рельефности здесь достигается лишь за счет манипуляций с текстурами.

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

Parallax mapping существенно экономит вычислительные ресурсы компьютера, поскольку при использовании объектов-аналогов со столь же детальной 3D-структурой производительности видеоадаптеров не хватало бы для просчета сцен в режиме реального времени.

Эффект чаще всего применяется для каменных мостовых, стен, кирпичей и плитки.

Anti-Aliasing
До появления DirectX 8 сглаживание в играх осуществлялось методом SuperSampling Anti-Aliasing (SSAA), известным также как Full-Scene Anti-Aliasing (FSAA). Его применение приводило к значительному снижению быстродействия, поэтому с выходом DX8 от него тут же отказались и заменили на Multisample Аnti-Аliasing (MSAA). Несмотря на то что данный способ давал худшие результаты, он был гораздо производительнее своего предшественника. С тех пор появились и более продвинутые алгоритмы, например CSAA.

AA off AA on

Учитывая, что за последние несколько лет быстродействие видеокарт заметно увеличилось, как AMD, так и NVIDIA вновь вернули в свои ускорители поддержку технологии SSAA. Тем не менее использовать ее даже сейчас в современных играх не получится, поскольку количество кадров/с будет очень низким. SSAA окажется эффективной лишь в проектах предыдущих лет, либо в нынешних, но со скромными настройками других графических параметров. AMD реализовала поддержку SSAA только для DX9-игр, а вот в NVIDIA SSAA функционирует также в режимах DX10 и DX11.

Принцип работы сглаживания очень прост. До вывода кадра на экран определенная информация рассчитывается не в родном разрешении, а увеличенном и кратном двум. Затем результат уменьшают до требуемых размеров, и тогда «лесенка» по краям объекта становится не такой заметной. Чем выше исходное изображение и коэффициент сглаживания (2x, 4x, 8x, 16x, 32x), тем меньше ступенек будет на моделях. MSAA в отличие от FSAA сглаживает лишь края объектов, что значительно экономит ресурсы видеокарты, однако такая техника может оставлять артефакты внутри полигонов.

Раньше Anti-Aliasing всегда существенно снижал fps в играх, однако теперь влияет на количество кадров незначительно, а иногда и вовсе никак не cказывается.

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

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

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

Чтобы игра могла использовать тесселяцию, ей требуется видеокарта с поддержкой DirectX 11.

Вертикальная синхронизация

V-Sync это синхронизация кадров игры с частотой вертикальной развертки монитора. Ее суть заключается в том, что полностью просчитанный игровой кадр выводится на экран в момент обновления на нем картинки. Важно, что очередной кадр (если он уже готов) также появится не позже и не раньше, чем закончится вывод предыдущего и начнется следующего.

Если частота обновления монитора составляет 60 Гц, и видеокарта успевает просчитывать 3D-сцену как минимум с таким же количеством кадров, то каждое обновление монитора будет отображать новый кадр. Другими словами, с интервалом 16,66 мс пользователь будет видеть полное обновление игровой сцены на экране.

Следует понимать, что при включенной вертикальной синхронизации fps в игре не может превышать частоту вертикальной развертки монитора. Если же число кадров ниже этого значения (в нашем случае меньше, чем 60 Гц), то во избежание потерь производительности необходимо активировать тройную буферизацию, при которой кадры просчитываются заранее и хранятся в трех раздельных буферах, что позволяет чаще отправлять их на экран.

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

Post-processing
Это общее название всех эффектов, которые накладываются на уже готовый кадр полностью просчитанной 3D-сцены (иными словами, на двухмерное изображение) для улучшения качества финальной картинки. Постпроцессинг использует пиксельные шейдеры, и к нему прибегают в тех случаях, когда для дополнительных эффектов требуется полная информация обо всей сцене. Изолированно к отдельным 3D-объектам такие приемы не могут быть применены без появления в кадре артефактов.

High dynamic range (HDR)
Эффект, часто используемый в игровых сценах с контрастным освещением. Если одна область экрана является очень яркой, а другая, наоборот, затемненной, многие детали в каждой из них теряются, и они выглядят монотонными. HDR добавляет больше градаций в кадр и позволяет детализировать сцену. Для его применения обычно приходится работать с более широким диапазоном оттенков, чем может обеспечить стандартная 24-битовая точность. Предварительные просчеты происходят в повышенной точности (64 или 96 бит), и лишь на финальной стадии изображение подгоняется под 24 бита.

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

Bloom
Bloom нередко применяется совместно с HDR, а еще у него есть довольно близкий родственник Glow, именно поэтому эти три техники часто путают.

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

Film Grain
Зернистость артефакт, возникающий в аналоговом ТВ при плохом сигнале, на старых магнитных видеокассетах или фотографиях (в частности, цифровых изображениях, сделанных при недостаточном освещении). Игроки часто отключают данный эффект, поскольку он в определенной мере портит картинку, а не улучшает ее. Чтобы понять это, можно запустить Mass Effect в каждом из режимов. В некоторых «ужастиках», например Silent Hill, шум на экране, наоборот, добавляет атмосферности.

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

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

SSAO
Ambient occlusion техника, применяемая для придания сцене фотореалистичности за счет создания более правдоподобного освещения находящихся в ней объектов, при котором учитывается наличие поблизости других предметов со своими характеристиками поглощения и отражения света.

Screen Space Ambient Occlusion является модифицированной версией Ambient Occlusion и тоже имитирует непрямое освещение и затенение. Появление SSAO было обусловлено тем, что при современном уровне быстродействия GPU Ambient Occlusion не мог использоваться для просчета сцен в режиме реального времени. За повышенную производительность в SSAO приходится расплачиваться более низким качеством, однако даже его хватает для улучшения реалистичности картинки.

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

Cel shading
Игры с эффектом Cel shading начали делать с 2000 г., причем в первую очередь они появились на консолях. На ПК по-настоящему популярной данная техника стала лишь через пару лет. С помощью Cel shading каждый кадр практически превращается в рисунок, сделанный от руки, или фрагмент из мультика.

В похожем стиле создают комиксы, поэтому прием часто используют именно в играх, имеющих к ним отношение. Из последних известных релизов можно назвать шутер Borderlands, где Cel shading заметен невооруженным глазом.

Особенностями технологии является применение ограниченного набора цветов, а также отсутствие плавных градиентов. Название эффекта происходит от слова Cel (Celluloid), т. е. прозрачного материала (пленки), на котором рисуют анимационные фильмы.

Depth of field
Глубина резкости это расстояние между ближней и дальней границей пространства, в пределах которого все объекты будут в фокусе, в то время как остальная сцена окажется размытой.

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

Лицезреть эффект глубины резкости в гипертрофированной форме можно на некоторых фотографиях. Именно такую степень размытия часто и пытаются симулировать в 3D-сценах.

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

Влияние на производительность

Чтобы выяснить, как включение тех или иных опций сказывается на производительности, мы воспользовались игровым бенчмарком Heaven DX11 Benchmark 2.5. Все тесты проводились на системе Intel Core2 Duo e6300, GeForce GTX460 в разрешении 1280Ч800 точек (за исключением вертикальной синхронизации, где разрешение составляло 1680Ч1050).

Как уже упоминалось, анизотропная фильтрация практически не влияет на количество кадров. Разница между отключенной анизотропией и 16x составляет всего лишь 2 кадра, поэтому рекомендуем ее всегда ставить на максимум.

Сглаживание в Heaven Benchmark снизило fps существеннее, чем мы того ожидали, особенно в самом тяжелом режиме 8x. Тем не менее, поскольку для ощутимого улучшения картинки достаточно и 2x, советуем выбирать именно такой вариант, если на более высоких играть некомфортно.

Тесселяция в отличие от предыдущих параметров может принимать произвольное значение в каждой отдельной игре. В Heaven Benchmark картинка без нее существенно ухудшается, а на максимальном уровне, наоборот, становится немного нереалистичной. Поэтому следует устанавливать промежуточные значения moderate или normal.

Для вертикальной синхронизации было выбрано более высокое разрешение, чтобы fps не ограничивался вертикальной частотой развертки экрана. Как и предполагалось, количество кадров на протяжении почти всего теста при включенной синхронизации держалось четко на отметке 20 или 30 кадров/с. Это связано с тем, что они выводятся одновременно с обновлением экрана, и при частоте развертки 60 Гц это удается сделать не с каждым импульсом, а лишь с каждым вторым (60/2 = 30 кадров/с) или третьим (60/3 = 20 кадров/с). При отключении V-Sync число кадров увеличилось, однако на экране появились характерные артефакты. Тройная буферизация не оказала никакого положительного эффекта на плавность сцены. Возможно, это связано с тем, что в настройках драйвера видеокарты нет опции принудительного отключения буферизации, а обычное деактивирование игнорируется бенчмарком, и он все равно использует эту функцию.

Если бы Heaven Benchmark был игрой, то на максимальных настройках (1280Ч800; AA 8x; AF 16x; Tessellation Extreme) в нее было бы некомфортно играть, поскольку 24 кадров для этого явно недостаточно. С минимальной потерей качества (1280Ч800; AA 2x; AF 16x, Tessellation Normal) можно добиться более приемлемого показателя в 45 кадров/с.