Фильтрация текстур какая лучше в играх. Что такое фильтрация текстур в играх

Тесты производительности:

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

Конфигурация компьютера:
Процессор: Intel Core 2 Quad Q6600 @ 3200MHz (400x8, 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 год), данная игра по-прежнему может неплохо нагрузить даже самую современную платформу. Вот такой богатый ассортимент настроек представлен пользователю:

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

И так, что же у нас получилось:

Результаты получились достаточно неожиданными. Технология 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

Как видно, особой разницы в комбинациях "выше" AF 8x / MSAA 8x (CSAA 8x), попросту нет. Но при этом получается ощутимый удар по производительности, особенно при использовании Coverage Sampling AntiAliasing.

Выводы:

Наверняка среди читающих данную статью найдутся игроки Cs:s, HL2 и других игр на основе движка Source. Им эта статья окажется более интересной и познавательной, чем остальным. Однако целью данной писанины было лишь рассказать о современных технологиях, помогающих улучшить зрительное восприятие игр. А тесты - как способ показать на практике изложенную теорию.

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

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

By Stormcss


Злостно пинать ногами

Текстурирование является важнейшим элементом сегодняшних 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 (впрочем, и не только последнего) могут самостоятельно поиграть с некоторыми их описанных эффектов, благо настройки устранения ступенчатости и анизотропной фильтрации доступны из опций драйверов. Эти и другие методы, оставшиеся за рамками данной статьи, успешно внедряются разработчиками игр в новые продукты. В общем, жизнь становится лучше. То-то еще будет!

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

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

Простейший метод наложения текстур называется поточечная выборка (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" (изотропное или однородное), потому что мы всегда фильтруем вместе квадратные области, состоящие из текселей. Анизотропная фильтрация означает, что форма области из текселей, которую мы используем меняется в зависимости от обстоятельств.

Описание алгоритмов текстурирования: фильтрация текстур

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

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

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

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

Есть еще одно понятие в текстурировании, о котором следует рассказать. При наложении 2D изображения, оно разбивается на множество цветных фрагментов. Это сделано для масштабирования объекта - текстура 2-х мерная, а 3-х мерный объект при приближении или удалении должен меняться. Текстура для сохранения реалистичности и качества также должна меняться. Итак, текстура разбивается на множество цветных фрагментов, которые называются тексели (texels - texture elements). В дальнейшем, к примеру, при приближении к объекту, нет необходимости заново загружать новую текстуру: берутся тексели из оригинальной текстуры и увеличиваются. Конечно же, качество теряется, но оно остается на достаточно высоком уровне, кроме того, при таком подходе значительно разгружается графический процессор и память.

Mip-Mapping (мип-маппинг)

Движение - это характеристика всех отображаемых объектов; даже если сам объект неподвижен, он все равно меняется при изменении угла зрения персонажа вследствии его движения. Поэтому текстура, помещенная на объект, также должна двигаться - это влечет за собой некоторые осложнения и дополнительную обработку. А что если мы смотрим на объект под каким-то углом, к примеру, на пол? Пол может занимать большую площадь, и для сохранения реалистичности, чем дальше он от нас, тем меньше его составляющие (к примеру, плитка). Для обеспечения этого, текстура должна определенным образом уменьшаться. К сожалению, простое изменение разрешения текстур, может повлечь за собой довольно неприятный эффект, когда одна текстура визуально как бы сливается с другой. Другой неприятный эффект может возникнуть, если тексель больше размером, чем требуемое количество пикселей. Это происходит, когда смотришь на текстуру, находящуюся на очень большом расстоянии. Обе ситуации возникают при применении традиционного сглаживания. А вот и реальные примеры этих случаев: в данном реферате нету

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

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

Фильтрация

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

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

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

На этой картинке пример прорисовки изображения, используя билинейную фильтрацию и mip-mapping.

Трилинейная фильтрация

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

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

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

Анизотропная фильтрация (Anisotropic filtering)

Форма текстурированных объектов как при билинейной, так и при трилинейной фильтрации может искажаться, т.к. обе эти фильтрации являются изотропными - изображение фильтруется в определенной форме - в форме квадрата. Большинство же формируемых объектов не подходят под эту определенную и неизменную форму: для их качественной обработки необходимо использовать другой тип фильтрации - анизотропный. Анизотропия состоит из нескольких слов на латыни и означает буквально "Ани" - не, "изо" - определенная форма и "тропия" - модель - т.е. модели неопределенной формы. Название этой технологии отражает ее техническую реализацию. Анизотропная фильтрация обычно оперирует не менее чем 8 текселями, во все стороны mip-map уровней, при этом используется модель неопределенной заранее формы. В результате убираются шумы и искажения объектов, а изображение в целом получается более качественным.

Сравните две картинки: на одной использовалась анизотропная фильтрация 16-текселей, с помощью которой исчезли искажения между mip-map уровнями и шум изображения, на второй картинке анизотропная фильтрация была выключена.

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

Долгое время графические платы потребительского уровня не показывали то качество изображения, которое возможно при использовании анизотропной фильтрации. С появлением таких графических чипов, как NVIDIA GeForce2 и ATI Radeon, стало возможным использование анизотропной фильтрации, которая аппаратно анализирует блоки из 16 текселей. Видеокарты GeForce3 и Radeon 8500 используют уже 32 тексельную анизотропную фильтрацию. Картинка ниже показывает изображение, прближенное к тому, которое будет получено с помощью профессиональной 64 тексельной анизотропной фильтрации:

Будущее…

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

Дополнительно:

Антиалиасинг и анизотропная фильтрация сегодня: что, где и почём? Часть первая

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

Однако мы, пожалуй, обойдёмся вовсе без банальностей. Потому что куда более интересно порассуждать на тему того, насколько же стали доступны сейчас техники улучшения изображения для простого пользователя или, правильнее будет сказать, для простого геймера. Именно геймеры на сегодняшний день являются наиболее активными потребителями всех новых технологий и нововведений в 3D. По большому счёту, мощный 3D-акселератор на сегодняшний день нужен исключительно для игры в последние компьютерные игры с мощными 3D-движками, оперирующие сложными шейдерами различных версий. Сейчас никого уже не удивишь игрой с пиксельными шейдерами версии 2.0 – в игровом мире такие забавы потихоньку становятся повседневным явлением. Большинство игр по-прежнему выпускается на основе шейдерной модели 1.1 ввиду того, что для разработчиков игр наиболее важно добиться, чтобы их игра сносно работала на железе, которое стоит у подавляющего большинства игроков. Делать супернавороченный движок сейчас – это большое расточительство и даже риск. Судите сами: разработка движка класса «Doom 3» или «Half-Life 2» (ну и приплюсуем сюда первопроходца шейдеров 2.0 во всей красе, детище Crytek – «FarCry», чтобы получилась истинная вездесущая троица) занимает огромное количество времени, что привносит в разработку дополнительные трудности – необходимо разработать движок в такие сроки, чтобы нововведения и оригинальные наработки не устарели во время создания движка.

Если вы сомневаетесь в том, что такое может быть, то совершенно зря – в случае с «Half-Life 2» всё именно так и было (да и «Doom 3» разрабатывался с оглядкой на GeForce 3, а вышел тогда, когда вовсю продавались GeForce FX). Также разработка движков подобного класса сопряжена с большими затратами на разработку: талантливые программисты стоят сегодня недёшево. А ещё в последнее время много внимания (даже больше, чем нужно) уделяется, если можно так выразиться, «политике» в отношении игровых движителей.

Да-да, именно так, вы не ослышались, в сфере 3D уже давно есть своя политика, основанная, естественно, на интересах двух грандов строения графических процессоров: ATI и NVIDIA. Суровая Канада уже давно ведет борьбу против солнечной Калифорнии, и пока конца этому противостоянию не видно, что нам, простым потребителям, конечно, только на руку. Теперь разработать классный движок мало – чтобы иметь успех, нужно заручиться поддержкой либо калифорнийской дивы NVIDIA, либо канадской ATI, благо, теперь и у первой, и у второй есть свои партнёрские программы для разработчиков игр. У NVIDIA такая программа называется «The way it"s meant to be played», а у ATI – «Get it in the game». Всё достаточно красноречиво и понятно: NVIDIA говорит, что «играть нужно так», а совсем не эдак, а ATI уверяет, что всё, что мы только ни пожелаем, мы обязательно получим в самой игре. Достаточно заманчиво, не правда ли? Движки же класса «Doom 3» и «Half-Life 2» (в случае последней движок называется Source, однако для простоты восприятия мы будем называть его именно «Half-Life 2», чтобы сохранить правильную ассоциацию) и вовсе изначально разрабатываются в тесном сотрудничестве с инженерами производителей графических чипов, чтобы игры лучше работали именно на GPU какого-то одного производителя.

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

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

Что такое антиалиасинг и с чем его едят?

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

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

Для начала нужно чётко понимать, что изображение, которое мы с вами можем ежедневно наблюдать на экранах наших с вами мониторов, состоит из так называемых мелких частичек, которые принято называть пикселями. Хорошей аналогией в этом смысле может послужить пример с бумагой в клеточку. Изображение на мониторе – это та же бумага в клеточку, только они в данном случае очень и очень мелкие. Если говорят, что разрешение экрана составляет 1024х768 при 32-битном цвете, то это означает, что по горизонтали на мониторе умещается 1024 точек, а по вертикали – 768. При этом каждая точка может быть закрашена одним цветом из доступных в 32-битной палитре. На данный момент 32-битный цвет – это предел того, чего мы можем добиться на экране компьютера. Лучшие умы человечества (тот же Кармак) уже поговаривают о необходимости перехода на 64-битный цвет и указывают на явные минусы 32-битной палитры. В своё время при переходе с 16-битного на 32-битный цвет данная необходимость была достаточно чётко обоснована и виделись реальные причины, по которым стоило бы перейти на 32 бит. Переход же на 64-битный цвет на сегодняшний день – это скорее излишество. Так же как и в случае с 16 и 32 битами, в своё время придётся достаточно долго ждать, когда акселераторы всех уровней смогут с приемлемой скоростью обрабатывать 64-битный цвет.

Подавляющее большинство статей, в которых затрагиваются тем или иным образом принципы построения изображений в 3D и где ведётся разговор об антиалиасинге, изобилуют простым, но вместе с тем наиболее действенным примером, на котором можно достаточно хорошо понять, что же такое антиалиасинг. Посмотрите на увеличенную надпись «Апгрейд», сделанную в Word’e, а затем просто увеличенную в фотошопе. Не очень хорошо выглядит, не правда ли? По бокам букв видна так называемая гребёнка или, как её ещё называют, «лесенка». В сущности, эта самая «гребёнка» или «лесенка» и есть алиасинг. Можно представить и другой пример в виде геометрического объекта, например, пирамиды. По её краям также хорошо видна всё та же «гребёнка». А теперь посмотрите на другое изображение той же пирамиды, но с увеличенным вдвое разрешением. Выглядит уже значительно лучше, и «гребёнка» практически незаметна. Как уже было сказано выше, данный эффект, сглаживающий «гребёнку», был достигнут за счёт того, что мы увеличили разрешение в 2 раза.

Что это означает? Предположим, у нас была отрендерена пирамида с разрешением 200х200 пикселей (выше мы уже подробно прояснили вопрос о том, что такое пиксели и зачем они нужны). Мы увеличили количество точек по вертикали и по горизонтали ровно в 2 раза, то есть получили изображение с разрешением 400 точек по вертикали и 400 точек по горизонтали. Это также означает, что количество точек на нашем объекте, который находился на сцене, увеличилось вдвое. Что это дало применительно к нашему эффекту алиасинга? Очевидно, что он стал минимален, то есть сгладился – ведь количество точек по краям объекта также возросло вдвое. Именно слово «сгладился» является здесь ключевым. Ведь антиалиасинг по-иному называют сглаживанием, что отражает самую суть технологии, которая сглаживает ту самую «лесенку» по краям трёхмерных объектов.

На самом деле, после увеличения разрешения «лесенка» с края пирамиды никуда не делась – она остаётся там по-прежнему. Однако за счёт того, что мы увеличили разрешение (что означает увеличение точек, которые расходуются на отображение пирамиды), эффект «лесенки» сгладился благодаря особенностям человеческого зрения, которое уже менее чётко видит пиксели на крае объекта. Абсолютно понятно, что если увеличивать разрешение ещё и ещё, то эффект алиасинга будет наблюдаться всё в меньшей и меньшей степени. Точнее, человеческий глаз станет замечать его всё в меньшей и меньшей степени, поскольку сам эффект алиасинга никуда не денется. Но так же абсолютно понятно и то, что до бесконечности увеличивать разрешение не получится, ведь мониторы, пусть даже и самые современные, имеют конечные разрешения, причём не такие уж и большие, что не позволит нам постоянно увеличивать количество точек. Проще говоря, простейшего эффекта антиалиасинга можно добиться, всего лишь увеличив разрешение экрана, однако разрешение не может расти до бесконечности. Казалось бы, выхода нет? Однако в действительности он был найден, и основан он всё на той же особенности зрения человека.

Этого удалось достичь благодаря плавным переходам цветов на изображении. Фактически визуальное улучшение изображения производится не за счёт физического увеличения разрешения, а за счёт, если можно так выразиться, цветового увеличения разрешения. В данной статье мы не будем описывать алгоритмы вычисления этих точек и не будем вдаваться в глубины математических вычислений, а расскажем лишь о принципе работы такого антиалиасинга. Лесенка на границах объектов видна лишь потому, что чаще всего края трёхмерных объектов довольно сильно выделяются по цвету от остальной картинки и представляют собой тонкие линии в один пиксель. Это можно компенсировать, поставив некоторое количество точек с цветами, вычисляемыми по формуле из значений цвета самого края и точек рядом с этим краем. То есть, если край объекта чёрный, а фон белый, то дополнительная точка рядом с чёрной линией края станет серой. Чем больше этих дополнительных точек около края любого 3D-объекта, тем более гладко выглядят его края и тем меньше заметна лесенка. Данный способ называется краевым антиалиасингом. Качество антиалиасинга, задаваемое в драйвере видеокарты, как то: 2x, 4x, 6x, 8x означает количество проставляемых дополнительных пикселей вокруг линии, нуждающейся в сглаживании.

Анизотропная фильтрация: мини-ликбез для начинающих

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

А теперь представим луч света, который проходит через одно из отверстий и попадает на наш текстурированный полигон. Если последний расположен параллельно относительно отверстия, через которое проходит световой луч, то световое пятно будет иметь форму окружности. В противном случае, если полигон расположен не параллельно к отверстию, световое пятно искажается и имеет эллиптическую форму. Мы думаем, что многие читатели в это время задаются одним вопросом: «как связаны все эти плиты, отверстие, луч света с проблемой определения цвета пикселя?» Внимание! Ключевая фраза: все полигоны, расположенные в световом пятне, определяют цвет пикселя. Всё вышеизложенное и есть те необходимые базовые знания, которые нужны для того, чтобы понять различные алгоритмы фильтрации.

А теперь, чтобы вы лучше поняли, для чего нужна фильтрация, рассмотрим происходящие процессы на примере легендарной «Quake 3 Arena». Представьте какой какой-нибудь коридор с множеством квадратов и различных орнаментов (благо, в «Quake 3 Arena» этого хватает). Орнамент в начале коридора сильно детализирован, а ближе к концу коридора (горизонту) элементы орнамента становятся всё меньше и меньше, т.е. они отображаются меньшим числом пикселей. В результате теряются детали типа швов между элементами орнамента, что, соответственно, приводит к ухудшению качества изображения.

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

Point Sampling

Point Sampling (поточечная выборка) – самый простой способ определения цвета пикселя. Этот алгоритм основан на текстурном изображении: выбирается всего один тексель, который ближе всех расположен к центру светового пятна, и по нему происходит определение цвета пикселя. Нетрудно догадаться, что это совершенно не верно. Во-первых, цвет пикселя определяется несколькими текселями, а мы выбрали только один. Во-вторых, форма светового пятна может измениться, а алгоритм не принимает это во внимание. А зря!

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

У Point Sampling есть преимущество. Из-за того, что определение цвета пикселя осуществляется всего по одному текселю, данный метод не критичен к пропускной способности памяти, а это автоматически даёт данному способу фильтрации колоссальные диведенды в том плане, что на фильтрацию по данной схеме затрачивается очень мало ресурсов 3D-акселератора.

Bi-Linear Filtering

Bi-Linear Filtering – билинейная фильтрация, основанная на методе использования интерполяционной техники. Для определения нужных текселей используется основная форма светового пятна, то есть круг. В нашем примере с кругом последний аппроксимируется 4 текселями. Как видим, здесь дела обстоят несколько лучше, чем с Point Sampling. Билинейная фильтрация использует уже 4 текселя.

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

Расплывчатость – отнюдь не самая главная проблема билинейной фильтрации. Дело в том, что аппроксимация выполняется корректно лишь для объектов, расположенных параллельно экрану или точке наблюдения, в то время как 99% объектов в любой компьютерной игре расположены непараллельно к точке наблюдения. Отсюда можно сделать вывод, что 99% объектов будут аппроксимироваться неправильно. Возьмём, к примеру, наш круг – полигон расположен непараллельно относительно точки наблюдения, стало быть, мы должны аппроксимировать эллипс, а мы аппроксимируем круг, что крайне неверно. Ко всему прочему билинейная фильтрация значительно требовательней к пропускной полосе данных памяти, что, в общем-то, более чем логично, учитывая то, что билинейная фильтрация использует уже 4 текселя для определения цвета пикселя.

Привет всем! Сегодня очень интересная статья о тонкой настройке видеокарты для высокой производительности в компьютерных играх. Согласитесь друзья, что после установки драйвера видеокарты вы один раз открыли «Панель управления Nvidia» и увидев там незнакомые слова: DSR, шейдеры, CUDA, синхроимпульс, SSAA, FXAA и так далее, решили туда больше не лазить. Но тем не менее, разобраться во всём этом можно и даже нужно, ведь от данных настроек напрямую зависит производительность . Существует ошибочное мнение, что всё в этой мудрёной панели настроено правильно по умолчанию, к сожалению это далеко не так и опыты показывают, правильная настройка вознаграждается весомым увеличением кадровой частоты. Так что приготовьтесь, будем разбираться в потоковой оптимизации, анизотропной фильтрации и тройной буферизации. В итоге вы не пожалеете и вас будет ждать награда в виде увеличения FPS в играх.

Настройка видеокарты Nvidia для игр

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

Итак, для того, чтобы попасть в меню управления видеодрайвером, кликайте правой кнопкой мыши по любому месту на рабочем столе и выбирайте в открывшемся меню «Панель управления Nvidia».

После чего, в открывшемся окне переходите во вкладку «Управление параметрами 3D».

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

Итак, первый пункт «CUDA – графические процессоры ». Здесь представлен список видеопроцессоров, один из которых вы можете выбрать, и он будет использоваться приложениями CUDA. CUDA (Compute Unified Device Architecture) – это архитектура параллельных вычислений использующаяся всеми современными графическими процессорами для увеличения вычислительной производительности.

Следующий пункт «DSR - Плавность » мы пропускаем, потому что он является частью настройки пункта "DSR - Степень”, а его в свою очередь нужно отключать и сейчас я объясню почему.

DSR (Dynamic Super Resolution) – технология позволяющая рассчитывать картинку в играх в более высоком разрешении, а затем масштабирующая полученный результат до разрешения вашего монитора. Для того чтобы вы поняли для чего эта технология вообще была придумана и почему она не нужна нам для получения максимальной производительности, я попробую привести пример. Наверняка вы часто замечали в играх, что мелкие детали, такие как трава и листва очень часто мерцают или рябят при движении. Связано это с тем, что, чем меньше разрешение, тем меньше число точек выборки для отображения мелких деталей. Технология DSR позволяет это исправить за счет увеличения числа точек (чем больше разрешение, тем больше число точек выборки). Надеюсь, так будет понятно. В условиях максимальной производительности эта технология нам не интересна так, как затрачивает довольно много системных ресурсов. Ну а с отключенной технологией DSR, настройка плавности, о которой я писал чуть выше, становится невозможна. В общем, отключаем и идем дальше.

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

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

Заранее подготовленные кадры виртуальной реальности . Функция для очков виртуальной реальности нам не интересна, так как VR еще далека до повседневного использования обычных геймеров. Оставляем по умолчанию – использовать настройку 3D приложения.

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

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

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

Многокадровое сглаживание (MFAA) . Одна из технологий сглаживания используемая для устранения "зубчатости” на краях изображений. Любая технология сглаживания (SSAA, FXAA) очень требовательна к графическому процессору (вопрос лишь в степени прожорливости). Выключаем.

Потоковая оптимизация . Благодаря включению этой функции приложение может задействовать сразу несколько ЦП. В случае, если старое приложение работает некорректно попробуй поставить режим "Авто” или же вовсе отключить эту функцию.

Режим управления электропитанием . Возможно два варианта – адаптивный режим и режим максимальной производительности. Во время адаптивного режима энергопотребление зависит напрямую от степени загрузки ГП. Этот режим в основном нужен для снижения энергопотребления. Во время режима максимальной производительности, как не трудно догадаться, поддерживается максимально возможный уровень производительности и энергопотребления независимо от степени загрузки ГП. Ставим второй.

Сглаживание – FXAA, Сглаживание – гамма-коррекция, Сглаживание – параметры, Сглаживание – прозрачность, Сглаживание - режим . Про сглаживание я уже писал чуть выше. Выключаем всё.

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