Авторизуйся и получи скидку!

О настройках графики


Опубликовано: 2013-06-16 05:25:57

О настройках графики «Что?», «Где?», «Когда?». Часть I

Каждый тест видеокарт изобилирует всяким не всегда понятными простому смертному человеку терминами и аббревиатурами: анизотропия, мультисемплинг, шейдеры, SSAA x8 – миллионы их. Часто бывают случаи, когда пользователи кидаются в друг друга такими терминами, но при этом имеют смутное представление (а зачастую и совсем никакого) о их значениях и назначениях. Многие из этих терминов и аббревиатур могут срезать 50 и более процентов от fps, выдаваемого видеокартой в частности и системой в целом. Почему так и за что мы платим, покупая более мощное железо - вот в этой статье (и в еще одной чуть позже) и обсудим.

Очень кстати недавно вышел новый альбом Black Sabbath, названный «13» в комплекте с «Великим и ужасным» Оззи Осборном. Вот и проверим, что там старички наиграли.

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

Так как в статье будут содержатся немного «технико-графических» терминов, то для начала разберемся с ними:

Пиксель (Pixel) - самый маленький графический элемент, та самая точка на экране.


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


Тексель (Texel) - минимальная единица текстуры трёхмерного объекта, пиксель текстуры.


Текстура (Texture) – двумерное изображение, наносимое на полигон. Чем выше разрешение текстуры, тем четче и детальней картинка

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


Для грани, которая расположена строго перпендикулярно нам (оси нашего зрения) - 1, все довольно просто: пикселю на экране соответствует тексель текстуры (при достаточном разрешении текстуры и отображения ее в масштабе 1:1).


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



Как видно на изображении, с цветом пикселя 1 проблем нет. А с закраской пикселей 2, 3 и 4 все плохо.


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



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


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


Метод ближайшего соседа (point sampling) работает (работал…) следующим образом: пикселю присваивается цвет, того текселя, который наиболее близко расположен к центру пикселя. Этот метод был использован в том – самом - первом DOOM… Но, так как в современной компьютерной графике используется тридцатидвух битные изображении (а это как ни как свыше 4 миллиардов оттенков), то в случае применения данного метода абсолютное большинство деталей текстуры будет попросту размыто и картинка превратится в гадость. К тому же метод никак не боролся с искажениями границ. Данный метод умер где-то в самом конце лихих 90-х.



Далее была «Билинейная фильтрация (bilinear filtering)». Она отличалась от point sampling тем, что определяла цвет пикселя, усредняя значения четырех текселей текстуры, попавших в данный пиксель и расположенных ближе всего к его центру. Этот метод избавил играющего от мерцания точек и заломов границ. Но усреднение корректно выполнялось только для объектов, расположенных параллельно экрану, так, что четкость изображения непараллельных экрану плоскостей оставалась никакой.



Трилинейная фильтрация (trilinear filtering). Это та же самая билинейка, но с использованием технологии MIP-текстурирования (mip-mapping). Это так:



Предположим бесконечно удаляющуюся от нас плоскость, на которую нужно нанести текстуру. Ближайший к нам край (уровень 1) этой плоскости нам хорошо виден – на нем можно рассмотреть детали текстур и цветовые переходы. На уровне 2 детали текстур начинают искажаться и сжиматься за счет уменьшения площади поверхности плоскости. На уровне 3 все это дело сжимается до состояния жуткой мешанины и рассмотреть какие-либо детали уже невозможно, да и фильтрация корректно не работает. Вопрос: «Зачем для уровня 3 текстура высокого качества и разрешения, если все равно ничего не разобрать?» Правильно! Незачем. Вот MIP-текстурирование в памяти видеокарты и создает несколько уменьшенных и сжатых копий текстуры с уровня 1(MIP-уровни), которые на нашей плоскости распределяются от ближе, качественнее и детальнее до дальше-никакущих текстур. Это позволяет разгрузить и ГПУ от лишних расчетов, и память от лишних данных, и шину памяти.


Таким образом, у нас появляются еще и 2 соседних MIP-уровня, на границах которых также усредняется цвет пикселя по 4 текселям.


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



Самый качественный на сегодня метод фильтрации текстур – это анизотропная фильтрация (anisotropic filtering). Данный метод за раз решил все проблемы своих предшественников. Суть метода заключается в определении цвета пикселя на основе очень большого количества тексей (в настройках драйвера видеокарты или самой игры эти режимы устанавливаются как: 2x (16 текселей), 4x (32 текселя), 8x (64 текселя) и 16x (128 текселей). Также метод учитывает пространственное положение полигона, на который нужно нанести текстуру, и использует MIP-текстурирование. Анизотропная фильтрация устраняет эффект ступенчатости и не мылит изображение – в итоге получается четкая картинка.



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


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



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

Сглаживание.

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


Сглаживание вообще призвано «убрать» вот те портящие качество картинки «лесенки» - т.е. aliasing (так оно называется у буржуинов) на краях полигонов. Помимо мощного ГПУ сглаживание очень любит очень производительную систему памяти видеокарты: большой объем + высокая скорость обмена данными и чтоб интерфейс был пошире.



На рисунке выше представлен самый примитивный пример сглаживания / без сглаживания. На левой части картинки на границе белого и черного отлично видны лесенки - aliasing. Пиксель, попавший на темную сторону окрашивается в черны цвет, попавший в белую – в белый. И никаких оттенков серого. В динамике все будет еще хуже – пиксели на краях модели будут еще и мерцать. Чтобы избавится от лестничного эффекта видеокарте нужно более точно рассчитать цвета пикселей на краях, т.е. расширить гамму промежуточными цветами и оттенками – в данном случае добавить серый. Вот «правильной» закраской этих пикселей и занимается anti-aliasing – полноэкранное сглаживание.


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


Первыми попытку сгладить изображение предприняла компания 3DFX на видеокарте Voodoo – на краях объектов рисовались полупрозрачные линии. Эта технология оказалась совсем уж никудышней, и от нее сразу же избавились. Чуть позже те же 3DFX сделали новое предложение – этот самый super sampling anti-aliasing (SSAA), по нашенски: избыточная выборка сглаживания. Суть метода гениально проста и примитивна как лапоть – изображение строится не в родном установленном на мониторе разрешении, а в увеличенном. Т.е. берем стандартное разрешение для FullHD монитора – 1920 х 1080 пикселей, включаем SSAA на уровень х2 – теперь изображение будет прорисовываться в разрешении 3840 х 2160 пикселей. Дальше – круче: при SSAA х 2 мы уже рисуем картинку в 7680 х 4320 пикселей; SSAA x8 – это уже 15360 х 8640. Далее, когда изображение сжимается для вывода на мониторе в «своем» разрешении, цвет пикселя усредняется по -2, -4, -8 пикселям из увеличенной картинки. Т.е. пиксели на границе той самой линии с той самой картинки выше будут не просто черными либо белыми, а серыми с разной степенью серости. При этом самым страшным для видеокарты является не увеличение разрешения картинки, а именно перерасчет цветов пикселей.


Почему же метод сглаживания, придуманный во времена позднего неолита, до сих пор нагибает топовые видеокарты? Все просто. Во-первых, в современных играх увеличивается количество объектов, полигонов, повышается детализация, т.е. работы для сглаживания становится все больше и больше. Попробуйте запустить какую-нибудь древнюю игру, где на экране отрисовываются три с половиной примитивных объекта и включить SSAA х8 – ничего не произойдет. Во вторых – это техническое несовершенство самого метода. Одно время от сглаживания SSAA, в виду его беспощадности к возможностям видеокарт, и разработчики игр и строители видеокарт даже отказывались – слишком уж тяжело оно давалось, и платить за его использование приходилось обвалом производительности в несколько раз. Сейчас же понемногу SSAA возвращается к жизни – METRO: Last Light и Tomb Raider предлагают возможность включить этот SSAA, правда видеокарта для комфортной игры понадобится с ценником от 500 у.е.


Основная причина беспощадности SSAA заключается в том, что он делает много совершенно левой и не нужной работы: сглаживать то нужно края объектов, а SSAA тупо обрабатывает абсолютно все пиксели на картинке. Качество картинки, ее четкость, конечно, на высоте, но когда карта при этом выдает 10 – 15- 20 fps, то тут уже не до визуальных красот и художественной эстетики.


Поэтому был придуман более щадящий метод сглаживания MSAA – multi sampling anti-aliasing (множественная выборка сглаживания).


Данный метод по прежнему строит картинку в увеличенных разрешениях, но пиксели внутри полигонов он уже не трогает. А вот с пикселями на краях производится чуть больше действий: в зависимости от установленного уровня сглаживания к ним «пристраиваются» две – четыре – восемь дополнительных точек - sub-samples, по значениям цветов которых усредняется итоговый цвет пикселя при выводе изображения на экран в родном разрешении. Выставляя в настройках игровой графики уровень на MSAA x2, х4 и х8 мы указываем и количество этих самых sub-samples для одного пикселя.


Далее метод MSAA понемногу совершенствовали: дополнили технологиями Quincunx и 4х 9-tap. Это позволяло рассчитывать итоговый цвет пикселя не только по цветам sub-samples, но и по цветам соседних пикселей, т.е. соседние пиксели также влияли на итоговой цвет, но уже в меньшей степени, чем sub-samples.


Следующим этапом допиливания MSAA стал, так сказать, «поворот дополнительных точек». До этого нововведения дополнительные точки в режиме MSAA х4 располагались внутри пикселя самым простым способом – по углам пикселя. ATI взяли и повернули этот квдрат на 30 ?. Самым тяжким для сглаживания является работа с почти - почти чисто вертикальными и почти – почти чисто горизонтальными линиями – их крайне сложно просчитать, а до «поворота» и вовсе было невозможно. После данного допиливания MSAA перешел на более качественный уровень, а чуть позже компания NVidia также применила «поворот» в алгоритмах для своих видеокарт, но развернула квадрат в другую сторону…



Одной из нерешенных на сегодня задач MSAA является неумение алгоритма работать с полупрозрачными объектами типа воды или стекла. Если один объект поместить перед «стеклом», то та часть, которая попадает под дурное влияние расплавленного кремния, не сглаживается. Была попытка задействовать механизм Adaptive Antialiasing (ААА) – его можно было включить как вдогонку к MSAA или SSAA, так и как самостоятельное сглаживание, который должен был решить нестыковки. Но так как в сегодняшних играх все равно границы объектов перед прозрачными плоскостями не блещут гладкость, то можно сделать предположения о судьбе данной технологии. Вот, например, скриншот из Hitman: Adsolution. Обратите внимание на лацкан пиджака «47» - с одной стороны его прогладили, а та, которая попала в поле действия стекла – вся в лесенках.



Чем дальше в лес, тем больше в своих алгоритмах сглаживания расходились NVidia и ATI. Головоломы NVidia пришли к выводу, что на итоговый цвет пограничного пикселя в большей степени влияет точная информация о расположении пикселя относительно цветовой границы, чем цвета соседних пикселей, и придумали метод CSAA - coverage sampling anti-aliasing. CSAA работает (работал) так: вокруг центра пограничного пикселя располагаются не только добавочные точки, по которым определяется итоговое значение цвета, но и coverage-samples (значения перекрытия), которые предоставляют еще и информацию о своем местонахождении. На основе этих данных видеокарта просчитывает соотношение площадей объектов, пересекающихся в данном пикселе. Далее карта рассчитывает итоговый цвет пикселя.


По качеству CSAA не так уж и сильно уступал классическому MSAA, а от ГПУ откусывал меньше. Далее этот метод «усовершенствовали», после чего жрать он стал почти столько же, сколько и MSAA.


В ответ на CSAA уже AMD, а не ATI, заделали 4 фильтра – расширения для стандартного MSAA: box, narrow-tent, wide-tent, edge-detect. Все вместе получило название CFAA (custom-filter antialiasing). «Box» – это обычный MSAA без допилов. «Narrow-tent» и «wide-tent» были идейными наследниками Quincunx, которые при расчете итогового цвета пикселя учитывали цвета соседних пикселей. Куда более интересным стал фильтр «edge-detect»: он выискивал пиксели, попадающие в максимальный контраст цветов, и увеличивал для них количество sub-samples для более точного просчета итогового цвета. Т.е. он наносил более мощный точечный удар по лесенке именно там, где это нужно было больше всего. Естественно, что за это пришлось опять-таки платить падением производительности видеокарты.


Свою лепту в проблему лесенок внесла и Intel – они придумали MLAA (Morphological Anti-Aliasing). Его принципиальные отличия от других сглаживаний заключается в: а) оно не увеличивает картинку, а работает с ней «как есть»; б) для просчета цветов пикселей используется центральный процессор. Метод не прижился.


Неизвестно к чему бы привела гонка сглаживающих вооружений ATI и NVidia, но в один прекрасный момент великая и ужасная Microsoft их всех обломала – тупо потребовала, чтобы начиная с DirectX 10.1 все алгоритмы сглаживания были стандартизированы и доступны любому пользователю видеокарты конкурента. Например: сглаживание FXAA (Fast approXimate Anti-Aliasing) придумали NVidia, но работает оно и на видеокартах красных – разница лишь в том, что у зеленых это сглаживание работает на аппаратном уровне, а у красных – на программном. Была попытка у зеленых закинуть под свои карты сглаживание TXAA окольными путями: дать денег разработчику игры, чтоб он прикрутил к движку игры это самое ТХАА и зеленые остались как бы не причем, просто на их видеокартах оно бы работало, а на красных – нет. Но прогиб не засчитался, игр с поддержкой ТХАА – единицы.


В последнее время участились попытки умерить аппетиты полноэкранного сглаживания путем допиливания алгоритмов: NVidia выпускала то TXAA, то уже упомянутый FXAA; разработчики из CryTEK в своем CryEngine 3 для своей Crysis 3 тоже впихнули в движок игры собственный алгоритм сглаживания, но, как показывает практика – вместе с требованиями к ресурсам видеокарты снижается и качество самого сглаживания в частности и всей картинки в целом. Появляется так называемое «мыло» - четкость изображения падает, границы объектов перетекают друг к другу, в общем – не фонтан. Т.е. сглаживание затрагивает и текстуры – лезет в область работы анизотропной фильтрации – в итоге получаем мешанину. Да и самим разработчикам видеочипов вот так взять и придумать алгоритм сглаживания, который обеспечит высокое качество при умеренном потреблении ресурсов тоже не особо выгодно – если видеокарта среднего ценового диапазона сможет тянуть высокие настройки графики современных игр да еще и со сглаживанием без обвала производительности, то кому продавать «Титаны»? (это уже так, из разряда теории всемирного заговора).


Наиболее компромиссным решением на сегодня остается все тот же MSAA со своими мелкими касяками и более крупным обжорством. По качеству и четкости картинки он все-таки немного не дотягивает до SSAA, зато куда меньше откусывает от производительности видеокарты. Но и тут есть одна хитрость. Вспоминаем уровни сглаживания: 2, 4, 8. Самый заметный для глаза и самый «полезный» - это не 8, а совсем наоборот – х2, от его включения по сравнению с отключенным MSAA эффекта наблюдается куда больше. Если включать MSAA на х4, то картинка будет еще более сглаженной, но «коэффициет полезности» уже снижается, а аппетиты возрастают. При включении MSAA на х8 полезность становится еще меньше, а ресурсов съедается еще больше. Т.е. качество картинки возрастает аж ни как не прямо пропорционально необходимым ресурсам. Разница между MSAA x4 и х8 на глаз, да еще и в динамике заметна только с очень большими усилиями, а по количеству FPS разбег между режимами может составлять и 30, и 40, и в особо запущенных случаях все 50 % производительности. Так что включение MSAA на х8 сверхсмысла не имеет, наиболее оптимальный вариант для включения – это MSAA x4.


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


И не забываем гнать память.

P.S. Уже давно вошло в норму комплектовать игры всяким милым геймерскому сердцу мелочами: то фигурки героев положат в коробку, то диски с саудтреками к игре, всякие разные арт- и прочие буки, коврики с символикой, армейские жетоны милитари игр, даже Зоновский артефакт из S.T.A.L.K.E.R. (жаль, что без радиационного излучения… - так его можно было бы еще кому-то подарить, например, одной психованной бабульке, которая совсем недавно практически убила мои новые туфли…). Все это фигня по сравнению с комплектом «Расширенного издания «Mono Edition»» для PS3 недавно вышедшего гоночного симуляторы GRID 2.


В комплект входят: сама консоль PS3…, костюм гонщика с символикой GRID 2, экскурсия по заводу BAC (контора занимается выпуском спортивных автомобилей), гоночный шлем, и – внимание!!! реальный автомобиль спорт-класса BAC-Mono… корпус, созданный из высокопрочного углеродного волокна, четырехцилиндровый двигатель объемом в 2.3 литра, 280 лошадиных сил, что позволит разгонять автомобиль до 100 км/ч всего за 2.8 секунды.

 

 



Вопрос: «А че делает автомобиль в комплекте к игре?» в данном случае не уместен. Лучше задать вопрос: «А нафига тогда и сама игра, и плойка к ней?».

Но не спешите оформлять заказ. Стоимость «ТАКОГО» издания составляет 125 000,00 английских фунтов стерлингов, т.е. 194 702.22 американских долларов, а на наши деньги получается вообще неприличное число – 1 556 254.88 грн. (по курсу НБУ на 09.06.2013)

Да и игра какая-то странноватая: если в серии NFS мы катаемся для получения денег и самки, в других гоночных симуляторах смысл кроется в победе в чемпионате, то основная тема в GRID 2… сбор «лайков» на видео с наши заездом… Куда мы катимся?

Всё.

Автор: Артём О. (С)