Тонкая настройка качества картинки стрима (начальный уровень)

В данной статье будут рассмотрены основные настройки качества стрима и их возможные улучшения с любительской точки зрения.
Речь пойдет о дополнительных настройках кодирования кодека x264 для программ стриминга OBS и OBS studio.
Все технические данные (под спойлерами) взяты с сайта http://www.videorip.info
Информация представлена для размышления и не является гайдом или побуждением к действию. В любом случае все действия обратимы и не несут какой-либо опасности.

 

Для начала рассмотрим стандартные настройки видео.

Кодируем используя уже готовые пресеты. Пресет - это набор оптимальных параметров влияющих скорость кодирования и качество. Чем выше скорость - тем ниже качество.
Доступные пресеты:
ultrafast (ультра-быстрый)
superfast (супер-быстрый)
veryfast (очень быстрый)
faster (еще быстрее)
fast (быстрый)
medium (средний) все значения по умолчанию
slow (медленный)
slower (медленнее)
veryslow (очень медленный)
placebo (плацебо)
Рекомендации: Выбирайте пресет, в соответствии с вашими потребностями в скорости кодирования, качестве.

Самый распространенный veryfast (все что хуже - убого и не будет рассмотрено), а желателен не хуже fast, т.к. дает оптимальное соотношение качества и сжатия, но потребляет примерно в 2-2,5 раза больше ресурсов ЦП. Если ЦП ниже Intel i7, то возможности его использования нет.

 

Указываем уровень совместимости, в зависимости от оборудования. Так как не все железные плееры могут справиться с high.
Профили:
baseline - С потерей качества. Без интерлейсинга.
main - С потерей качества.
high - Нет ограничений. С потерей качества.

Самый оптимальный и качественный - high, а main используется для большей совместимости со старыми устройствами.

 

Выбираем нужную оптимизацию, которая установит оптимальные настройки для выбранного вами типа видео.
Типы оптимизаций:
film - для фильмов
animation - для аниме и мультипликации
grain - для зернистого изображения с повышенной детализацией
stillimage
psnr
ssim
fastdecode - для быстрого декодирования содержания
zerolatency - для потокового видео

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

 

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

 

Максимальный интервал между ключевыми/IDR кадрами. Этот параметр контролирует количество кадров между ключевыми, и если по достижению придела ключевой кадр не наступил - принудительно его ставит. Стандартный размер GOP'а динамически вычисляется во время кодирования для максимального сжатия.
IDR(ключевые) кадры - это так называемые кадры-разделители. Кадры, находящиеся в промежутке между двумя ключевыми кадрами не могут ссылаться на кадры, вне этого промежутка. Также, сами ключевые кадры являются I-кадрами, так что они не могу использоваться как референсные. По этому они могут использоваться в качестве контрольных точек в видеопотоке.
Примечание: Влияет на перемотку видео в плеере. Если значения очень большие, то при перемотке(прокрутке), не по ключевым кадрам, видео в плеере будет немного притормаживать. Так как декодеру придется отрендерить все кадры начиная с ближайшего ключевого и до выбранного пользователем. Перемотка не по ключевым кадрам поддерживается на уровне плеера, кодека.
Рекомендации: Значение по умолчанию применимо в большинстве случаев. Если Вы хотите использовать собственное значение, используйте следующую формулу: fps*10 (значение должно быть целым числом, кратным 10-и). Если Вы кодируете для Blu-ray или потокового видео, то возможно, Вам придется использовать значения, равные частоте кадров итогового видео. Большие значения полезны только для статичного видео.
То есть для частоты кадров в 25 нужно выбирать 250, для 23,976 - 240 и для 29,970 - 300.
Параметр: keyint=<integer>

Это так называемый в OBS "интервал ключевых кадров", который обычно устанавливают равным 2. Именно от этого кадра начинается возможность просмотра следующей последовательности других кадров до повторного его появления. Таким образом видео делится на более мелкие части. Этот кадр очень прожорлив по битрейту и зачастую сжирает не малую его часть, а впихивая его каждые 2 секунды приходится жертвовать львиной долей битрейта только на него. Как уменьшить это влияние будет сказано ниже, а выставив этот параметр равным 5 или 4 (обычно в фильмах установлено значение 10 сек) можно уменьшить перерасход битрейта. Естественно увеличится время ожидания изображения (звук будет идти) на экране при включении стрима на эти пару секунд, но качество заметно улучшится.

 

PS: В связи с особенностями HLS стриминга для совместимости некоторых устройств и низкой задержке стрима не рекомендуется менять стандартное значение равное 2.

 

Количество последовательных B-кадров между I- и P- кадрами. B-кадры – это кадры, в которых закодированы изменения не только от предыдущих кадров, но и от последующих. Имеют еще большую степень сжатия, чем P-кадры, но также и наихудшее качество. B-кадры подобны P-кадрам, кроме того, они могут использовать предсказание движения от будущих кадров также. Это может привести к значительному улучшению степени сжатия.
Рекомендации: Оптимальные значения: 2..6.
Если Вы используете b-adapt 2, то можно смело задавать bframes 16. Это самый простой способ, так как выбор оптимального значения падает на енкодер.
Оптимальное значение для конкретного видео можно получить путем чтения статистики первого прохода.
Примечание: При высоких значениях, больших чем необходимо, кодирование может быть значительно замедленно, без выйграша в качестве. Также большое количество В-кадров затрудняет декодирование.
Диапазон: 1..16
Параметр: bframes=<integer>

Самый некачественный кадр в цепочке видео. Устанавливайте в зависимости от желаемого качества видео. При фпс выше 30 можно слегка увеличить при необходимости, что поможет сохранить битрейт. По умолчанию = 3.

 

Параметр задает количество используемых рефернсных кадров. Определяет, сколько предыдущих кадров может быть связано (заимствование макроблоков) с P- или B-кадрами.
Рекомендации: Приблизительно 4-6. Большие значения могут быть полезны для анимации, аниме, скринкастов и другого "статичного" видео.
Примечание: При 5-ти и более референсных кадрах, качество, обычно, повышается незначительно.
Кроме того, 4 - максимальное значение для 1080p, а 9 - максимальное для 720p, придерживаясь спецификации Level 4.1. Это самый высокий уровень, поддерживаемый в большинстве бытовой электроники, которая поддерживают воспроизведение H.264, включая также Xbox 360 и Playstation 3.
Чем больше референсных кадров, тем медленнее кодирование.
Диапазон: 0..16
Параметр: ref=<integer>

Данный параметр может повысить производительность путем понижения его до 1. Не повлияет на качество при очень динамической картинке, где кадры редко имеют общие области. В veryfast значение и так 1.

 

Использование фильтра подавления блоков с параметрами - alpha (сила подавления блоков):beta (точность определения блоков). При кодировании изображение разбивается на блоки размерами 8х8 пикселей и каждый такой блок кодируется отдельно. При недостаточном битрейте, эти блоки становятся заметными. Включение данной опции поможет решить проблему.
Рекомендации: Параметр "alpha" рекомендуется выбрать от -3 до 3. Большее значение увеличивает силу подавления блоков, но картинка становится немного размытой (используйте при низких битрейтах или при кодировании мультипликации). Меньшее значение уменьшает силу, зато картинка остается достаточно чёткой (используйте при высоких битрейтах). Если не знаете, что выбрать, то оставьте 0 - подходит для большинства случаев. 
Параметр "beta" рекомендуется выбирать от -2 до 2. При больших значениях, кодек может распознать некоторые детали за блок и применить к ним фильтр подавления блоков. При меньших значениях, деталей сохранится больше, но некоторые блоки могут быть приняты за деталь (используйте меньшие значения при кодировании мультипликации - в ней четкие контуры, поэтому кодек не ошибется). Желательно чтобы этот параметр отличался не больше, чем на единицу от предыдущего. Если не знаете, что выбрать, то оставьте 0 - подходит для большинства случаев.
Сила деблокинга вычисляется для каждого макроблока, исходя из квантизера для него и близлежащих макроблоков. Альфа определяет: является ли приграничный квадрат блочным или же на самом деле это деталь. Это похоже на порог. Бета так же похожа на порог, но используется для того, чтобы убедиться в однородности картинки с обеих приграничных сторон и, тем самым, отделить детали от блочности. Когда определена блочность, альфа решает, какую силу использовать (максимально допустимое изменение пикселя). Бета немного изменяет силу, если блок однородный. Сила деблокинга: Порог деблокинга. Порог деблокинга устанавливает жёсткость отбора блочности фильтром. Сила деблокинга регулирует, как сильно определённые блоки будут смягчены. Значения по умолчанию сочетают аккуратность удаления блочности и сохранение деталей. Значения должны лежать в диапазоне от -3 до 3 (чем ниже значения, тем меньше устраняется блочность. Отрицательные значения не означают, что блочность оставляется).
Примечание: Слишком высокие значения дадут потерю многих деталей и текстур или смазывание. Установка слишком низких значений оставит резкие края и "москитный шум" (mosquito noise). Должна быть положительная взаимосвязь между двумя коэффициентами деблокинга (желательно, чтобы обе цифры были отрицательными или положительными). Если Вы увеличиваете силу, то должны увеличить и порог
Диапазон: -6..6 (для alpha и beta соответственно)
Параметр: deblock=<integer>:<integer>

Устанавливает сглаживание/замыливание картинки. Если позволяет запас битрейта чтобы не появились четкие силуэты квадратов, то можно спокойно повысить четкость путем присвоения отрицательных параметров. При недостатке битрейта и появлении квадратов можно попробовать сильнее размыть изображение выставлением положительных параметров. По умолчанию = 0:0.

 

Устанавливает число кадров, используемых в mb-tree ratecontrol и vbv-lookahead. Большие значения улучшают результаты mb-tree, но замедляют кодирование. Для vbv-lookahead большие значения дадут большую точность и стабильность
Рекомендации: 40..60
Примечание: Не может быть больше keyint. Если будет задано больше чем keyint, то x264 автоматически уменьшит его до значения keyint.
Использует очень много оперативной памяти. Значения больше 100, при размере ОЗУ меньше 2Gb могут привести к падению(экстренное завершение) x264.
Диапазон: 0..250
Параметр: rc_lookahead=<integer>

Дает возможность сохранять/поддерживать четкость неизменных участков экрана (оверлеев, рамок и т.п.) на протяжении указанного количества кадров. При высоких значениях увеличивает нагрузку на ЦП в тяжелых случаях. Для veryfast = 10, что крайне мало.

 

Устанавливает уровень среднего прироста качества I-кадров, по сравнению с Р-кадрами.
Примечание: Чем выше значение, тем выше качество I-кадров.
Параметр: ip_ratio=<float>

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

 

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

 

Но сначала немного о паре опций цветопередачи.

 

Указывает на принудительное использование полного спектра яркости(luma) и цветности(chroma). Если off, то будет использоваться только ограниченный диапазон.
Допустимые значения: on, off
Рекомендации: Если ваше видео оцифровка аналогового, то установите этот параметр в off. В остальных случаях выставляйте on.

В обычной OBS это расширенные опции "использовать полный диапазон", в studio - расширенные "цветовой диапазон". Предназначен для точной передачи крайних цветов (белый и черный). Полный диапазон составляет 0-255 (для ПК), а частичный = 16-235/240 (для ТВ). В основном мы видим на своих ПК именно полный диапазон, если все настроено правильно. И в чем же разница? При полном мы видим весь диапазон цветового пространства, тогда как при частичном происходит урезание цветовых краев и получается не контрастное изображение:
Эта система описана в спецификации ITU-R BT601 и используется в большинстве устройств цифрового видео - телевидение, видеокамеры, DVD-video и Blu-ray.
Т.к. в основном все стримят с ПК, то нужно использовать именно полный диапазон цветов. 
И отсюда плавно переходим к следующему пункту меню в OBS studio - расширенные "цветовое пространство", которое по умолчанию 601, т.е. урезанное. Поэтому ставим 709 для полного спектра.

-----

С цветопередачей именно на плеерах GG и Twitch все оказалось не стандартно.
Начнем с GG. Оптимально приближенная к оригиналу картинка достигается на настройках цветового пространства 601 и лимитированного диапазона. Все остальные варианты искажают оригинал.
На плеерах Twitch дела обстоят стандартнее - оптимально 709 и полный или частичный диапазон (разницы нет). 601 же немного искажает цвета, но диапазон опять таки не влияет.
https://cloud.mail.ru/public/ERNa/A94fr6zt9 - тест от 23.05.2016

 

Напоследок небольшое сравнение основных стандартных и подстроенных параметров.
Тест настроек в Quake 3 https://cloud.mail.ru/public/Kr1B/GL4J8fDQE
В углу загрузка цп кодированием.
Стандартные пресеты: vf - veryfast, fast.
Более детализированные: new_vf_top1 (замена veryfast), new_top1 (замена fast).
Далее обозначения FPS, битрейт, разрешение и максимальный процент загрузки.
Файлы обязательно скачивать, т.к. встроенный плеер перекодирует видео.
ЦП intel i5-3570k @ 4200

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

 


ПРОДОЛЖЕНИЕ 1

 

Выполняет треллис квантование для повышения эффективности сжатия. На всех решениях, кроме 0, скорость падает очень сильно.
Варианты:
0 - отключено
1 - только на макроблоках
2 - везде
Рекомендации: 2, но при условии совместной работы с psy-trellis, иначе происходит незначительное замыливание мелких деталей. Требует включенного CABAC.
Примечание: Вариант 1 - хороший компромисс между падением скорости и повышением эффективности.
Параметр: trellis=<integer>
Значение по умолчанию: Отключено

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

 

Позволяет каждой 8x8 частице, в макроблоке, независимо выбирать связанный (референсный) кадр, в отличие от обычного метода, где только один референсный вектор на макроблок. Немного снижает скорость кодирования. Эта опция отключает эту возможность.
Параметр: mixed_ref=<integer>
Значение по умолчанию: Отключено

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

 

Определяет метод нахождения векторов движения.
Доступные методы:
none - отключает поиск векторов движения.
spatial - использует для поиска соседние блоки одного кадра. Может повысить PSNR.
temporal - использует для поиска блоки соседних кадров. Немного лучше предыдущего.
auto - сам выбирает какие блоки использовать.
Примечание: auto лучше всего подходит для двухпроходного режима, но так же может использоваться и при однопроходном. auto нужно задавать во время обоих проходов, иначе второй проход будет автоматически использовать temporal.
Использовать none крайне не рекомендуется.
Рекомендации: auto – для двухпроходного режима, и spatial - при кодировании с CRF
Параметр: direct=<integer>
Значение по умолчанию: spatial

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

 

Устанавливаем метод оценки движения полного пикселя.
Методы: 
dia (diamond, ромб) - простейший поиск, начиная с одного пикселя одного кадра, начинают просматриваться соседние пиксели на соседнем кадре, на один пиксель выше, правее, ниже и левее. Выбирается наиболее вероятно сдвинувшийся пиксель и процесс повторяется до тех пор, пока не будет найден лучший пиксель или пока не будет достигнут предел диапазона поиска движения 
hex (hexagon, шестиугольник) - состоит из подобной стратегии, но использует для поиска 6 окружающих точек, отсюда и название - шестиугольник. Значительно эффективней, чем dia, но немного медленнее. Оптимален для повседневного кодирования.
umh (неравный мультишестиугольник) - значительно медленнее, чем hex, но ищет используя сложную модель мультишестиугольника. Лучше предыдущего, способен найти сложные векторы движения, ценой потери скорости кодирования. В отличие от предыдущих алгоритмов, в этом, и во всех последующих, опция --merange задает не количество итераций, а радиус, в пределах которого будет искаться пиксель.
esa (exhaustive, исчерпывающий) - высокооптимизированный интеллектуальный поиск на всей области поиска векторов движения, в пределах лучшего merange предсказания. Это математически эквивалентно методу поиска перебором, для каждого вектора движения в этой области, но быстрее. Этот метод значительно медленнее чем umh, но не дает значительного повышения качества, поэтому не рекомендован для повседневного кодирования. 
tesa (transformed exhausive, преобразовано-исчерпывающий) - алгоритм, который пытается улучшить эффект Hadamard преобразования, сравнивая с каждым вектором движения. Похож на esa, но немного лучше и немного медленнее.
Рекомендации: umh
Параметр: me=<string>
Значение по умолчанию: hex

Метод сжатия, который сильно влияет на нагрузку цп. Самый оптимальный для стрима "по умолчанию", но можно повысить до umh при возможности, что даст прирост к сжатию около 20%, но увеличит загрузку цп.

 

Определяет максимальное количество попыток (с измененными данными) нахождения оптимального варианта при поиске вектора движения макроблока. Чем больше, тем лучше качество.
Рекомендации: Стандартное значение для SD видео и 24 для HD видео. Падение скорости не стоит выигрыша в качестве, времени кодирования уже после 32.
Желательно использовать значения кратные 4-м.
Примечание: Для umh, esa и tesa, увеличение merange значительно замедлит кодирование.
Для dia и hex диапазон значений: 4..16.
Параметр: me_range=<integer>
Значение по умолчанию: 16

Что-то типа радиуса поиска для движения. При 720р и ниже нет смысла повышать, но для 1080р можно поднять до 32 при условии повышенного предыдущего параметра.

 

Этот параметр определяет на сколько часто будут использоваться дополнительные I-кадры. x264 высчитывает метрику каждого кадра, что бы определить насколько он отличается от предыдущего. Если полученное значение меньше чем установлено для scenecut, то энкодер помещает в этом месте I-кадр, но только если последний ключевой кадр был не раньше чем --min-keyint. Если значение выше, то вставляет ключевой/IDR кадр. Полезность определения смены сцен заключается в оптимальной расстановке I-кадров в местах резкой смены сцен. Это повышает качество, но слишком частая смена приведёт к напрасной трате битрейта.
Примечание: Значение "0" соответствует --no-scenecut.
Диапазон: 0..100
Параметр: scenecut=<integer>
Значение по умолчанию: 40

Вставляет дополнительный разделительный кадр, который имеет высокий битрей. При 60 фпс и 2 секундному интервалу ключевых кадров может вставлять дополнительный разделитель каждую секунду. Отключаем, если не нужно дополнительных разделителей, выставив 0.

 

Регулирует, как сильно будет колебаться битрейт относительно установленного среднего битрейта.
Рекомендации: Низкие значения ограничивают изменение битрейта, создавая выходной файл, хорошо попадающий в итоговый размер, исходя из установленного битрейта, но ухудшают способность кодека адаптироваться к изменению сложных сцен. Высокие значения увеличивают изменения (скачки) битрейта, которые ухудшают возможность потоковой передачи и делают размер непредсказуемым, но улучшают способность кодека адаптироваться к изменению сложных сцен. Установка значения в 0% даст в результате работу в режиме постоянного битрейта. Установив 100%, Вы получите изменения битрейта в зависимости от сложности кодируемой сцены. (Установив 100% Вы получите сжатие в режиме постоянного квантизера - CQ).
Примечание: Задается в процентах. То есть 1.0 соответствует 1.0%.
Параметр: ratetol=<float>
Значение по умолчанию: 1.0

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

 


ПРОДОЛЖЕНИЕ 2

Позволяет x264 адаптивно решать, где будут использоваться B-кадры, уменьшая количество B-кадров там, где это не нужно.

Рекомендации: При высоком значении --bframes лучше задавать значение 2.

Настройки:

  0 - полностью отключить

  1 - "быстрый" алгоритм. Этот метод позволяет использовать --bframes 16

  2 - оптимальный алгоритм, медленнее предыдущего

Примечание: В многопроходном кодировании эта опция необходима только для первого прохода, где типы кадров определены.

Параметр: b_adapt=<integer>

Значение по умолчанию: 1

Позволяет выбрать метод рассчета частоты отображения размытых кадров. Не сильно влияет на загрузку ЦП, так что выбираем 1 либо 2 по желанию.

 

Без AQ, x264, как правило, не производит перераспределение битрейта для снижения или повышения детализации сцен. AQ лучше перераспределяет битрейт между всеми макроблоками в видео.

Режимы:

0 - Не использовать AQ вообще.

1 - Разрешает AQ для перераспределения битов в каждом кадре.

2 - Авто-инвариантность AQ (экспериментальная) позволяет перераспределять биты по всему видео.

Параметр: aq=<integer>

Значение по умолчанию: 1

Помогает распределить битрейт по кадрам (1) или по всему видео (2), что дает более сбалансированное сжатие.

 

x264 разбивает каждый кадр на части(макроблоки), и кодирует каждую отдельно. Этот параметр позволяет задать дополнительные параметры разбиения для каждого типа кадров.

Доступные partitions: p8x8(включает в себя p16x8/p8x16), p4x4(включает в себя p8x4/p4x8), b8x8(включает в себя b16x8/b8x16), i8x8, i4x4

Вы можете также установить none(отключить все) или all(включить все).

Рекомендации: Значение по умолчанию - оптимально. Для получения максимально качества можно использовать all, но скорее всего будет не лучше чем используя значение по умолчанию.

Примечание: p4x4 вообще то не очень полезен и его применение значительно снижает скорость кодирования при незначительном повышении качества изображения. Для HD видео лучше вообще не использовать.

i8x8 может использоваться только в High Profile

Параметр: partitions=<string>

Значение по умолчанию: p8x8,b8x8,i8x8,i4x4

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

 

Задаем сложность оценки подпикселя. Уровни 1-5 просто управляют силой обработки подпикселя. Уровень 6 допускает RDO для режима предсказания, и уровень 8 допускает RDO для векторов движения и intra режимов предсказания.

Уровни:

  0 - fullpel only (не рекомендуется) 

  1 - метод предсказания SAD, одна QPel итерация 

  2 - метод предсказания SADT

  3-5 - постепенное увеличение QPel

  6 - метод предсказания RD для I-/P- кадров

  7 - метод предсказания RD для всех типов кадров

  8 - RD обработка для I-/P- кадров

  9 - RD обработка для всех типов кадров

  10 - QP-RD (требует: --trellis 2 и --aq-mode >0)

  11 - Full RD - новая опция, необходимая для будущего --trellis режима

Рекомендации: Стандартное значение или выше

Примечание: Чем выше уровень, тем ниже скорость кодирования.

Параметр: subme=<integer>

Значение по умолчанию: 7

 Определяет метод оценки и обработки. Хорошо улучшает качество. Сильно влияет на загрузку ЦП, но может повысить качество. Для стрима максимум лучше ставить не выше 9, но это потребует очень мощный ЦП. Для обычных i7 с 4-мя ядрами 4+Ггц для 1080р 60фпс не может выдержать выше 6-7. Но всегда есть исключения - просто проверяйте!

 

ПРЕДУПРЕЖДЕНИЕ: Большинство параметров взаимосвязаны и функционируют только при их выставлении. Если не видите изменений, то возможно Вы что-то делаете не так, или есть слишком слабый эффект. При правильном использовании можно значительно улучшить качество изображения. Дерзайте! 

 


Дополнительная порция тестов (возможно обновлени):

Тесты в Quake 3 тут https://cloud.mail.ru/public/9hUw/qQDGraaX6

Тесты стандартных пресетов https://cloud.mail.ru/public/E4Ff/w7RH79JxQ