Целочисленное масштабирование без размытия
(integer scaling)

Цело­чис­ленное масштаби­рование, или масштаби­рование с цело­чис­ленным коэффи­циентом — способ увеличения изображений без размытия и искажений.

Превращает каждый пиксел в квадратную или прямо­угольную группу из целого количества пикселов одинакового цвета. Предот­вращает потерю резкости в фильмах и трёх­мерных играх при увеличении Full HD до 4K и сохраняет пикселизацию в старых играх и играх на основе пиксельной графики (pixel art).

Кратко

Проблема

Full HD на 4K-мониторах и большинстве 4K-теле­визоров выглядит хуже, чем на Full-HD-мониторах и теле­визорах.

Это происходит из-за размытия, добавляемого всеми мониторами и подавляющим большинством телевизоров при любом масштабном коэффи­циенте, хотя при увеличении в целое количество раз (например, 2 в случае FHD→4K) этого можно избежать.

В результате в фильмах и трёх­мерных играх снижается резкость, белые линии становятся серыми, а пиксельная графика (pixel art) перестаёт быть пиксельной.

Решение

Можно каждую логическую точку отображать как квадратную группу из целого (2×2, 3×3) количества физических точек одинакового цвета без подме­шивания цветов соседних точек.

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

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

Кроме того, пред­вари­тельное масштаби­рование впустую расходует пропускную способность видео­интер­фейса (HDMI, DP). Из-за этого могут страдать частота обновления и глубина цвета.

Смотреть демо Алгоритм

Что делать

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

Петиция

Прогресс

  • AMD: поддержка для видео­карт начиная с архитектуры GCN 2-го поколения () в Radeon Software 2020 (19.12.2+) () для Windows 7/10; идёт работа по реализации для Linux.
  • Intel: поддержка для видео­ядер 11-го поколения в драйвере 25.20.100.7155+ () для Windows 10; доступно с сентября в ноутбуках с процессорами 10-го поколения на основе архитектуры Ice Lake.
  • nVidia: ограниченная поддержка для RTX и GTX 16* в драйвере 436.02+ () для Windows 10; несовместимо с HDR, tiled-режимом, пользова­тельскими разрешениями, 4:2:0, повышением резкости, DSR и ноутбуками с гибридной графикой.
  • Linux: поддержка в Proton 4.11-10+ (); ограниченная поддержка в XRandR 1.5.1+ () и видео­драйвере nVidia 384.47+ (): во многих играх изобра­жение усекается.
  • Мониторы: поддержка в 27″ 4K- и QHD-мониторах Eve/Dough Spectrum на основе Nano-IPS-матриц LG с частотами обновления до 144 Гц (QHD, 4K) и 240 Гц (QHD); 4K-модель уже доставляется покупателям, QHD@240 и QHD@144 ожидаются в  и  соответ­ственно.

Что такое масштаби­рование

Изобра­жение на компьютерных мониторах и телевизорах состоит из пикселов (точек). Количество пикселов по горизонтали и вертикали называется разрешением.

Масштаби­рование — это изменение размеров (разрешения) изображения. Оно необходимо, если физическое разрешение дисплея (монитора или телевизора) отличается от разрешения подаваемого на него видео­сигнала: например, если игра в разрешении 1920×1080 (Full HD) запускается в полно­экранном режиме на мониторе с физическим разрешением 3840×2160 (4K).

Проблема — размытие

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

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

Решение — целочисленное масштаби­рование

Если коэффи­циент масштаби­рования не дробный (например, 1,5), а цело­численный (например, 2 или 3), то размытия можно избежать, отобразив каждый логический пиксел как квадратную группу из целого (например, 2×2 или 3×3) количества физических пикселов одинакового цвета — т. е. просто повторив соответ­ствующий пиксел исходного изобра­жения несколько раз без какого-либо влияния цветов соседних пикселов.

Такое масштаби­рование без потерь качества известно как integer (integer-ratio, integer-factor, integral) scaling (масштаби­рование с цело­численным коэффи­циентом), pixel-perfect scaling (масштаби­рование с точной привязкой к физическим пикселам), pixel doubling (duplication) (удвоение, или дублирование, пикселов).

Больше, чем интерполяция «По соседним»

Интер­поляция «По соседним» («Ближайший сосед», «Nearest Neighbour») работает без потерь качества только при целочисленных соотношениях размеров резуль­тирующего и исходного изобра­жений, а при дробных соотношениях приводит к искажениям из-за разных размеров результирующих пикселов:

В результате таких искажений одни и те же пикселы движущихся по экрану виртуальных объектов постоянно меняют свои размеры. Это приводит к так называемому дрожанию пикселов (pixel shimmering, jitter).

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

Например, изобра­жение 1280×1024 можно вывести на экран 3840×2160, отобразив каждый пиксел изобра­жения как группу из 4-х (2×2) одинаковых физических пикселов с чёрными полями по 56 физических пикселов наверху и внизу и по 640 — слева и справа.

Примеры

Пиксельная графика

Различия между билинейной интер­поляцией с размытием и цело­численным масштаби­рованием без потерь качества наглядно видны на примере пиксельной графики, или пиксель-арта (pixel art):

Фото

См. также фотографии одного и того же скриншота программы Reaper, сделанные с исполь­зованием трёх способов масштаби­рования:

Демо

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

Сценарии использования

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

  • повышение быстродействия в современных трёх­мерных играх на дисплеях 4K+, особенно на ноутбуках;
  • возможность на дисплеях 4K+ играть в игры, не рассчитанные на HiDPI-дисплеи:

    • не масштабирующие свой пользова­тельский интерфейс;
    • в разрешениях 4K и выше работающие неправильно;
  • при масштаби­ровании без размытия:

    • возможность использовать дисплеи более высокого разрешения с источниками видео­сигнала более низкого разрешения, такими как игровые приставки, без неоправданных потерь качества, связанных с размытием;
    • сохранение пикселизации в старых и pixel-art-играх;
  • снижение энерго­потребления и тепло­выделения компьютера:

    • снижение шума системы охлаждения (кулера) видео­карты;
    • экономия электро­энергии;
    • снижение скорости загрязнения окружающей среды.

Почему это важно

  • На 4K-мониторах при диагонали 24—27″ при разрешении Full HD отдельные пикселы изобра­жения почти неразличимы, и размытие не даёт никакого эффекта сглаживания, а просто бессмысленно снижает резкость, приводя к неоправ­данной потере качества.
  • Цело­численное масштаби­рование повторением пикселов не требует вычислений и потому работает гораздо быстрее, чем билинейная или бикубическая интер­поляция. Благодаря этому можно:

    • уменьшить или устранить задержку (lag), вносимую масштаби­рованием;
    • сэкономить вычисли­тельные ресурсы устройства масштаби­рования;
    • снизить его энерго­потребление, нагрев и шум системы охлаждения.
  • Пользо­ватель имеет право на отсутствие неоправ­данных потерь качества при работе в разрешениях, отличных от физического разрешения дисплея.
  • Более быстро­действующая видео­карта имеет большее тепло­выделение (TDP) и увели­ченный шум системы охлаждения. Это отрица­тельно влияет на комфорт пользо­вателя и в долго­срочной перспективе может приводить к необратимому снижению слуха. В той же мере это относится к видео­карте, вычисли­тельные ресурсы которой задействуются в более высокой степени, чем могли бы в более низком разрешении.
  • Более быстрый процессор и/или видео­карта не решают проблему полностью, т. к. дело не только в быстро­действии компьютера (см. далее).
  • Цело­чис­ленное масштаби­рование необходимо для равно­мерного рас­пре­деления линий scanlines, часто исполь­зуемых для увеличения вос­при­нимаемой детали­зации в старых играх.
  • При использовании чётных цело­чис­ленных масштабных коэффи­циентов в сочетании с цветовой субдис­кре­тизацией 4:2:2 или 4:2:0 цело­чис­ленное масштаби­рование на стороне источника сигнала позволяет без потерь качества снизить необходимую пропускную способность видео­интерфейса в два или четыре раза соответственно. Например, для 4K при 4:2:0 достаточно той же пропускной способности, что для Full HD при 4:4:4.

Ещё важнее с ростом физического разрешения

Чем выше физическое разрешение экрана, тем важнее и эффективнее цело­численное масштаби­рование.

  • Чем выше физическое разрешение экрана, тем труднее достичь комфортного быстро­действия игр при его исполь­зовании. Разрешение 4K вчетверо выше Full HD. Разрешение 8K (7680×4320) ещё в 4 раза выше.
  • Чем выше физическое разрешение экрана, тем менее заметен логический пиксел при тех же размере экрана и масштабном коэффи­циенте, и тем менее оправдано размытие как своего рода сглаживание. Например, на 4K-мониторе логическую точку (пиксел) при разрешении Full HD (1920×1080) ещё при желании можно разглядеть при определённом сочетании размера экрана, расстояния до экрана и качества сглаживания в игре. Но при физическом разрешении 8K и разрешении сигнала 4K логический пиксел в типичных условиях исполь­зования будет совершенно неразличим.
  • Более высокое физическое разрешение дисплея в общем случае позволяет более полно исполь­зовать площадь экрана при цело­численном масштаби­ровании. Например, при типичном для DOS-игр разрешении 320×240 высота экрана Full HD (1920×1080) заполняется лишь на 89% (используется 960 из 1080 точек, увеличение четырёх­кратное), а на 4K-мониторе высота используется полностью (масштабный коэффи­циент — ровно 9).

    Исходное разрешение Разрешение после масштаби­рования Примечание
    FHD 4K 8K
    Масштаб Потеря высоты Масштаб Потеря высоты Масштаб Потеря высоты
    256×224
    SNES
    4,8 17% 9,64 6,7% 19,3 1,5% На 4K потеря высоты в 2,6 раза меньше, чем на FHD. На 8K — в 4,5 раза меньше, чем на 4K, и в 11,5 раз меньше, чем на FHD
    320×240
    qVGA
    4,5 11,1% 9 0 18 0
    640×480
    VGA
    2,25 11,1% 4,5 11,1% 9 0 Потери высоты на FHD и 4K одинаковы
    800×600
    SVGA
    1,8 44,4% 3,6 16,7% 7,2 2,8% На FHD умещается только при масштабе 100% (без увеличения). На 4K потеря высоты в 2,67 раза меньше, чем на FHD; на 8K — в 6 раз меньше, чем на 4K, и в 16 раз меньше, чем на FHD
    1024×768
    XGA
    1,4 28,9% 2,81 28,9% 5,63 11,1% На FHD умещается только при масштабе 100% (без увеличения). На 8K потеря высоты в 2,6 раз меньше, чем на 4K и FHD
  • Более высокое физическое разрешение дисплея позволяет ещё полнее исполь­зовать площадь экрана путём исполь­зования логических пикселов с переменным размером с разницей в размере соседних пикселов в 1 физический пиксел. Чем больше физических пикселов в логическом пикселе, тем менее заметна разница в 1 физический пиксел.

    Например, для разрешения 256×224, характерного для 16-битных игровых приставок, таких как SNES и Sega Mega Drive (Genesis), на экране Full HD макси­мальный цело­численный коэффи­циент составляет 4 (полный дробный коэффи­циент — 4,82), по умолчанию по вертикали пропадают 184 пиксела, или 17% высоты экрана. Но если увеличить высоту каждого второго логического пиксела на 1 физический пиксел (4×5 вместо 4×4), то потерянная высота сократится в 2,5 раза — пропадут уже всего 72 физических пиксела, или 7% высоты экрана. (Для сохранения соотношения сторон изобра­жения следует дополнительно пропор­ционально растянуть изобра­жение по ширине.)

    Однако разница 25% в высоте пикселов в соседних строках на FHD-экране может бросаться в глаза. На 4K-экране относительное увеличение высоты пиксела составляет всего 11% (9×9 → 9×10) — и значительно менее заметно. На 8K-экране в аналогичных условиях разница в высоте пикселов составляет всего 5% (19×19 → 19×20), при этом увеличение высоты пиксела в каждой 4-й строке сокращает потерянную высоту в 8 раз — с 64 до 8 пикселов.

  • При более высоком физическом разрешении дисплея возможно достижение более точных пропорций изображения при цело­чис­ленном масштаби­ровании с коррекцией соотношения сторон. Например, для разрешения 256×224, характерного для 16-битных игровых приставок, таких как SNES и Sega Mega Drive (Genesis), на 4K-экране погрешность относительно идеального соотношения сторон 4:3 составляет 5%, а на 8K-экране — менее 1%.
  • На 8K-экранах при цело­численном масштаби­ровании можно без потерь качества или площади экрана исполь­зовать любое из типичных разрешений, по сути позволяя гибко изменять физическое разрешение экрана:

    • 8K (7680×4320, 1x);
    • 4K (3840×2160, 2x);
    • QHD (2560×1440, 3x);
    • FHD (1920×1080, 4x);
    • HD (1280×720, 6x).

Более быстрая видео­карта — не решение

В ряде случаев исполь­зование более быстро­дейст­вующего процессора и/или видео­карты не решает проблему:

  • если экраном повышенного разрешения оснащён ноутбук, установка мощной видео­карты практически невозможна из-за естест­венных ограничений по габаритам, энерго­потреблению и тепло­выделению;
  • многие игры содержат растровые (точечные) элементы (например, меню в «Half-Life 2» и панели инструментов в «Cities XL Platinum»), которые в разрешении 4K становятся мелкими, и играть в игру почти невозможно;
  • некоторые игры работают в разрешении 4K неправильно (например, в «Bionic Commando Rearmed» не видны элементы голово­ломок на мини-уровнях «Hack enemy network»);
  • некоторые игры (например, «Duck Tales Remastered») имеют фиксиро­ванное разрешение (например, Full HD), а поддержка остальных разрешений достигается встроенным в игру масштаби­рованием с размытием;
  • в играх на основе пиксельной графики (pixel art) быстро­действие не является проблемой, а важен пиксели­зованный характер изобра­жения без неуместного размытия, не соответ­ствующего замыслу авторов игры;
  • быстро­действие компьютера не имеет значения, если источник сигнала — не компьютер, а, например, плеер или игровая приставка.

Частичные решения

Программы масштаби­рования

  • IntegerScaler — программа для масштаби­рования Windows-игр, поддерживающих оконный режим.
  • GeDoSaTo (доступен исходный код) — программа для масштаби­рования 3D-игр. Недостатки:

    • поддерживает только относительно старые игры, использующие DirectX 9 и ниже;
    • работает лишь с некоторыми из них;
    • современные версии программы на некоторых системах не работают вообще, у автора этих строк заработала одна из преды­дущих версий — Beta 10 Poltergeist.

Эмуляторы Glide и DirectX

Glide — программный интер­фейс (API), исполь­зовав­шийся в видео­картах 3dfx. Glide-эмуляторы позволяют играть в игры с поддержкой Glide на компьютерах, поддерживающих современные API DirectX и OpenGL.

  • nGlide — эмулятор Glide — начиная с версии 2.10 () поддерживает цело­численное масштаби­рование без размытия: «Options» → «Aspect ratio» → «Integer scaling»).
  • dgVoodoo 2 (эмулятор Glide и «обёртка» для DirectX) и DXGL (OpenGL-реализация DirectDraw) поддерживают алгоритм масштаби­рования без размытия «По соседним» («Nearest Neighbour») (источники: 1, 2).

Эмуляторы игровых приставок и движки для старых игр

SNES (Super Nintendo)

  • Snes9x — эмулятор SNES — начиная с версии 1.56.2 () поддерживает цело­численное масштаби­рование: «Video» → «Display Configuration (Display Settings)» → «General» → «Integer Scaling». Для отключения размытия размытия следует снять галку «Video» → «Bilinear Filtering», а во избежание других искажений исходного изобра­жения — в обоих выпадающих списках «Video» → «Display Configuration (Display Settings)» → «Output Image Processing» выбрать значение None. В качестве способа вывода («Video» → «Display Configuration» («Display Settings») → «General» → «Output Method») необходимо выбрать «Direct3D» или «OpenGL»; в режиме «DirectDraw» функция не работает. Ограничение: при исполь­зовании фильтра «Scanlines» используется чётный масштабный коэффи­циент, из-за чего высота экрана может исполь­зоваться менее полно, чем без фильтра «Scanlines»: например, на 4K-мониторе используется коэффи­циент 8 вместо 9.
  • Snes9x EX+ — эмулятор SNES для Android — начиная с версии 1.4.4 () поддерживает цело­численное масштаби­рование: «Options» → «Video» → «Screen Shape» → «Content Zoom» → «Integer-only». Для отключения размытия следует установить параметр «Options» → «Video» → «Visuals» → «Image Interpolation» в значение «None» вместо «Linear», используемого по умолчанию.
  • Mesen-S — эмулятор SNES — поддерживает цело­численное масштаби­рование: «Options» → «Video» → «General» → «Use integer scale values when entering fullscreen mode». Для отключения размытия должна быть снята галка «Picture» → «Use bilinear interpolation when scaling» (снята по умолчанию). Поддер­живается отсечение заданного количества пикселов исходного изобра­жения по отдельности для каждой из сторон, благодаря чему можно полнее исполь­зовать площадь экрана: «Options» → «Video» → «Overscan».
  • bsnes-mt — эмулятор SNES (улучшенная версия bsnes) для Windows — имеет режим «Цело­численное масштаби­рование» («Pixel-Perfect»): «Настройки» → «Изображение» → «Цело­численное масштаби­рование»Settings» → «Output» → «Pixel-Perfect»). В отличие от режима «По центру» («Center») оригинальной версии bsnes, в режиме «Цело­численное масштаби­рование» в bsnes-mt масштабные коэффи­циенты цело­численные как по вертикали, так и по гори­зонтали, даже при включённой коррекции соотношения сторон. Благодаря этому все пикселы имеют в точности одинаковый размер, и исключается дрожание пикселов («pixel shimmering», «ripple effect», «jitter»). Кроме того, интер­фейс bsnes-mt переведён на несколько языков, в том числе русский (английский тоже доступен), а скриншоты сохраняются в сжатом формате PNG вместо BMP.
  • bsnes — эмулятор SNES — начиная с версии 107 () в режиме центри­рованного вывода («Settings» → «Output» → «Center») авто­матически применяется цело­численное масштаби­рование. Для отключения размытия следует параметр «Settings» → «Shader» установить в значение «None» вместо используемого по умолчанию «Blur». Ограничение: при исполь­зовании фильтра «Scanlines» и нечётном масштабном коэффи­циенте (например, 9 при физическом разрешении 4K) в сочетании с механизмом отрисовки «OpenGL 3.2» («Settings» → «Drivers» → «Video» → «Driver») scanline-линии отрисовываются неравномерно: например, на 4K-мониторе каждая 7-я линия на 1 пиксел толще остальных.

NES (Nintendo, Famicom, Dendy)

  • Mesen — эмулятор NES — начиная с версии 0.9.1 () поддерживает цело­численное масштаби­рование: «Опции» → «Видео» → «Общие» → «Use integer scale values when entering fullscreen mode» («Options» → «Video» → «General» → «Use integer scale values when entering fullscreen mode»). Для отключения размытия должна быть снята галка «Изображение» → «Билинейная интерполяция»Picture» → «Use bilinear interpolation when scaling») (снята по умолчанию). Поддер­живается отсечение заданного количества пикселов исходного изобра­жения по отдельности для каждой из сторон, в том числе индивидуально для каждой игры, благодаря чему можно полнее исполь­зовать площадь экрана: «Опции» → «Видео» → «Overscan»Options» → «Video» → «Overscan»).
  • puNES — эмулятор NES — начиная с версии 0.105 () поддерживает цело­численное масштаби­рование: «Settings» → «Video» → «Misc» → «Use integer scaling in full­screen». Для отключения размытия следует снять галку «Interpolation».

Game Boy, Game Boy Advance

  • mGBA — эмулятор карманных игровых систем Game Boy, Game Boy Color и Game Boy Advance — начиная с версии 0.6 () поддерживает цело­численное масштаби­рование: «Audio/Video» → «Force integer scaling». Для отключения размытия должна быть снята галка «Audio/Video» → «Bilinear filtering» (по умолчанию снята).
  • SameBoy — эмулятор карманных игровых систем Game Boy и Game Boy Color — начиная с версии 0.9 () поддерживает цело­численное масштаби­рование: «Graphic Options» → «Scaling Mode» → «Retain Integer Factor». Для отключения размытия следует установить параметр «Graphic Options» → «Scaling Filter» в значение «Nearest Neighbor».

Много­системные эмуляторы

  • RetroArch — оболочка для эмуляторов игровых приставок — поддерживает цело­численное масштаби­рование: «Settings» → «Video» → «Integer Scale» → «On». Для отключения размытия следует установить параметр «Settings» → «Video» → «Bilinear Filtering» в значение «Off».
  • BizHawk — эмулятор множества игровых систем — поддерживает цело­численное масштаби­рование: «Config» → «Display» → «Scaling & Filtering» → «Expand pixels by integers only (e.g no 1.3333x)». Для отключения размытия следует установить параметр «Final Filter» в значение «None» (по умолчанию). Но периодически изобра­жение выводится с ошибочным соотношением сторон и искажёнными пропорциями пикселов.
  • MAME — эмулятор множества игровых систем и старых компьютеров — поддерживает цело­численное масштаби­рование без размытия. Для включения цело­численного масштаби­рования служит параметр командной строки -nounevenstretch или его краткий вариант -noues. Во время игры цело­чис­ленное масштаби­рование можно включить через меню, открываемое клавишей Tab: «Video Options» → «Screen #0» → «Non-Integer Scaling» → «Off». Выключить размытие можно параметром командной строки -nofilter, либо установив параметр «Configure Options» → «Video Options» → «Bilinear Filtering» в настройках MAME в значение «Off».

    Алгоритм цело­численного масштаби­рования в MAME использует пикселы одинакового размера, поэтому при малых масштабных коэффи­циентах соотношение сторон отмасштаби­рованного изобра­жения может не точно соответ­ствовать необходимому, если игре требуется коррекция соотношения сторон (aspect-ratio correction). Например, в версии игры «Mortal Kombat 3» для игровых автоматов (исходное разрешение — 400×254, целевое соотношение сторон — 4:3) на дисплеях Full HD изобра­жение заметно сужено по горизонтали (размер логического пиксела — 3×4 физических пиксела, погрешность — 11,42%), а на 4K-дисплеях нарушение пропорции незаметно (размер пиксела — 7×8, погрешность — 3,34%).

  • higan — эмулятор 8/16-битных игровых приставок — начиная с версии 104 () поддерживает цело­численное масштаби­рование: «Settings» → «Video» → «Windowed Mode» / «Fullscreen Mode» → «Integral scaling». Для отключения размытия следует снять галку «Settings» → «Video Emulation» → «Blurring», а параметр «Settings» → «Video Shader» установить в значение «None» вместо «Blur», используемого по умолчанию.
  • Mednafen — эмулятор множества игровых систем и старых компьютеров — поддерживает цело­численное масштаби­рование. Mednafen — консольная программа без встроенного графи­ческого пользова­тельского интер­фейса (GUI). Для включения цело­численного масштаби­рования следует в файле mednafen.cfg параметр *.stretch для нужной эмулируемой системы (например, snes.stretch для SNES) установить в значение aspect_int. Для включения коррекции соотношения сторон следует установить параметр *.correct_aspect в значение 1. Для предот­вращения размытия следует удостовериться, что параметр *.videoip имеет значение 0 (по умолчанию). Например, для SNES:

    snes.stretch aspect_int
    snes.correct_aspect 1
    snes.videoip 0

Прочие эмуляторы

  • BlastEm — эмулятор игровой приставки Sega Mega Drive (Genesis) — поддерживает цело­численное масштаби­рование. Включается путём установки параметра scaling в значение integer вместо значения linear, используемого по умолчанию, в конфигу­рационном файле C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Local\blastem\blastem.cfg.
  • DuckStation — эмулятор игровой приставки Sony PlayStation (PSX) — поддерживает цело­численное масштаби­рование: «Settings» → «Display Settings» → «Screen Display» → «Integer Upscaling». Для предот­вращения размытия следует параметр «Settings» → «Enhancement Settings» → «Rendering Enhancements» → «Texture Filtering» установить в значение «Nearest-Neighbor» и удосто­вериться, что параметр «Internal Resolution Scale» на той же странице настроек установлен в значение «1x» (по умолчанию).
  • PCSX2 1.7+ (Qt-версия) — эмулятор игровой приставки Sony PlayStation 2 — поддерживает цело­численное масштаби­рование: «Settings» → «Graphics» → «Display» → «Integer Upscaling».
  • Cemu — экспери­ментальный эмулятор игровой приставки Wii U для Windows — начиная с версии 1.15.2 () поддерживает алгоритм масштаби­рования «По соседним» («Nearest Neighbour»): «Опции» → «Общие настройки» → «Графика» → «Фильтр масштаби­рования (растяжение)» → «Метод ближайших соседей» («Options» → «General settings» → «Graphics» → «Upscale filter» → «Nearest Neighbor»). Произвольное разрешение для некоторых игр можно установить с помощью графи­ческих пакетов: «Опции» → «Графические пакеты» («Options» → «Graphic packs»).
  • WinUAE — эмулятор Amiga — поддерживает цело­численное масштаби­рование: «Settings» → «Host» → «Filter» → выпадающий список в 3-м сверху ряду, 3-й слева колонке → «Integer scaling» или «Auto Integer scaling».
  • ScummVM — современная программная среда для запуска множества старых игр типа «Broken Sword» — начиная с версии 2.1 () поддерживает цело­численное масштаби­рование: «Настройки» → «Графика» → «Режим р…гивания» → «Масштаби­рование пиксель-в-пиксель» («Options» → «GFX» → «Stretch mode» → «Pixel-perfect scaling». Отключить размытие можно снятием галки «Фильтрование графики» («Filter graphics»).

    В оконном режиме доступна также возможность вывода с фиксированными цело­численными масштабами 2x (200%) и 3x (300%) («Настройки» → «Графика» → «Граф. режим») («Options» → «GFX» → «Graphics mode»), но глобальная настройка применяется только к играм с разрешением не более 320×240, а для игр с более высоким разрешением требуется задавать эту настройку с помощью индивидуального для игры набора настроек: «Настройки игры» → «Графика» → «Перекрыть глобальные установки графики» («Edit Game» → «Graphics» → «Override global graphic settings»).

    Программа формально несовместима с HiDPI (не является DPI-aware), поэтому для гарантии отсутствия размытия и для макси­мального исполь­зования площади экрана рекомендуется отключить DPI-виртуализацию в свойствах её исполняемого файла.

    В графи­ческом режиме «OpenGL» программа может пере­ключать 4K-монитор в разрешение Full HD, что может приводить к размытию из-за масштаби­рования средствами монитора или видео­карты. Помогает переключение программы в другой графи­ческий режим — например, «3x».

    ScummVM также доступна как ядро libretro, которое можно исполь­зовать с таким оболочками, как RetroArch, в которые встроены собственные реализации цело­численного масштаби­рования.

Модификации и FPGA-реализации старых игровых систем и компьютеров

  • PS1Digital (160 $) — набор/плата для модификации игровой приставки Sony PlayStation (PSX) — поддерживает цело­чис­ленное масштаби­рование с выводом по HDMI в разрешении от 480p до 1080p (Full HD). HDMI-порт заменяет собой порт «Serial IO». Поддер­живается установка на модели SCPH-550x и SCPH-700x любых регионов на основе материнских плат PU-18 и PIU-20.
  • DCDigital (бывш. DCHDMI) (130 $) — набор/плата для модификации игровой приставки Sega Dreamcast — поддерживает цело­чис­ленное масштаби­рование с выводом по HDMI в разрешении от 480p до 1080p (Full HD). Поддер­живается установка на модели VA0 и VA1 любых регионов со значком в виде цифры 1 или 0 внутри окружности на наклейке.
  • UltraHDMI (в разработке) — набор/плата для модификации игровой приставки Nintendo 64 — поддерживает цело­чис­ленное масштаби­рование с выводом по HDMI в разрешении от 480p до 1080p (Full HD). Задержка без обработки изображения составляет менее 100 нс (0,1 мс). При включённых обработках (scanlines, усечение [crop] и проч.) средняя задержка составляет 1 кадр (16 мс). Обзор от RetroRGB.
  • Super Nt (190 $), Mega Sg (190 $) и Nt mini — основанные на FPGA полу­аппаратные аналоги игровых приставок SNES (Super Nintendo), Sega Mega Drive (Genesis) и NES (Nintendo, Dendy) соответ­ственно — поддерживают цело­чис­ленное масштаби­рование с возмож­ностью усечения (cropping) изображения для макси­мального исполь­зования высоты экрана. Изображение выводится по HDMI в разрешении Full HD (1920×1080, 1080p).
  • MiSTer — основанная на FPGA полу­аппаратная платформа для создания функцио­нально-точных копий множества старых игровых систем и компьютеров — поддерживает цело­чис­ленное масштаби­рование. Включается параметром vscale_mode=1 в файле настроек MiSTer.ini. Изображение выводится по HDMI в разрешении до Full HD (1920×1080, 1080p) (video_mode=8 в MiSTer.ini), и до 2048×1536 (video_mode=13) при исполь­зовании разгона. Многие ядра поддер­живают цело­чис­ленное масштаби­рование одно­вре­менно по вертикали и по гори­зонтали для предотв­ращения дрожания пикселов (pixel shimmering). Многие ядра при выводе в разрешении Full HD поддерживают усечение (crop) для более полного исполь­зования площади экрана. В основе MiSTer лежит плата для разра­ботчиков Terasic DE10-Nano (170 $), использующая FPGA-чип Intel/Altera Cyclone V.

Виртуализация ОС

  • DOSBox ECE — улучшенная неофициальная версия эмулятора DOSBox для запуска DOS-программ — поддерживает цело­численное масштаби­рование без размытия. Начиная с версии r4318 () функция недоступна, последняя версия с поддержкой цело­численного масштаби­рования — r4301 ().

    В отличие от обычной версии DOSBox, в ECE-версии реализовано полноценное масштаби­рование без использования фильтров, благодаря чему поддер­живается масштаби­рование без размытия в полноэкранном режиме, и масштабный коэффи­циент вычисляется авто­матически и не ограничен малыми значениями (3x в официальных сборках DOSBox).

    В качестве значения параметра output в разделе [sdl] конфи­гураци­онного файла (*.conf) для игры следует исполь­зовать значение openglpp или surfacepp либо не задавать этот параметр вовсе. Для отключения коррекции соотношения сторон (например, растяжения 320×200 до высоты 240, соответ­ствующей соотношению 4:3) и включения строго квадратных пикселов служит параметр aspect=false в разделе [render] конфи­гураци­онного файла. Включить вертикальную синхронизацию (V-Sync) при output=openglpp можно параметром glfullvsync=true в разделе [sdl]. Дополнительную информацию см. в readme-файле pixel-perfect-патча, включённом также и в дистрибутив DOSBox ECE (README for pixel-perfect patch.txt).

    Пример конфи­гураци­онного файла DOSBox ECE для игры «Epic Pinball»:

    [sdl]
    fullscreen=true
    output=openglpp
    glfullvsync=true

    [cpu]
    cycles=4000

    [autoexec]
    mount C "."
    C:
    cd \EPICPIN
    PINBALL.EXE
    exit

  • DOSBox Staging — другой вариант DOSBox — тоже поддерживает цело­численное масштаби­рование без размытия на основе реализации от автора патча, который использовался в DOSBox ECE. По сравнению с DOSBox ECE быстро­действие DOSBox Staging несколько ниже.

    Параметр output в разделе [sdl] конфи­гураци­онного файла (*.conf) для игры следует установить в значение openglpp или texturepp. Параметры scaler и glshader в разделе [render] следует установить в значение none.

    Пример конфи­гураци­онного файла DOSBox Staging для игры «Epic Pinball»:

    [sdl]
    fullscreen=true
    output=openglpp

    [render]
    scaler=none
    glshader=none

    [cpu]
    cycles=4000

    [autoexec]
    mount C "."
    C:
    cd \EPICPIN
    PINBALL.EXE
    exit

  • VirtualBox — программная среда виртуализации — поддерживает масштаби­рование экрана виртуальной машины без размытия в диапазоне 100—300%: «Машина» → «Настроить» → «Дисплей» → «Экран» → «Коэффи­циент масштаби­рования» («Machine» → «Settings» → «Display» → «Screen» → «Scale Factor»).

Пользова­тельские разрешения

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

Необходимые условия

  • Игра должна иметь фиксированное разрешение, не изменяющееся во время работы уже запущенной игры.
  • Разрешение игры должно быть заранее известно.
  • Игра/эмулятор должен поддер­живать:

    • масштабирование без размытия по алгоритму «По соседним» («Ближайший сосед», «Nearest Neighbour»);
    • растяжение изображения на весь экран по обеим осям без сохранения пропорций и без чёрных полос вокруг. Для разрешений, не требующих коррекции соотношения сторон, возможность не сохранять пропорции необязательна.

Как пользоваться

  1. Вычислить размеры отмасштаби­рованного изображения конкретной игры или эмулятора при цело­чис­ленных масштабных коэффициентах исходя из разрешения конкретного дисплея (монитора или телевизора) (см. алгоритм).
  2. В панели управления видео­картой:

    • создать пользова­тельское разрешение, равное вычисленным размерам отмасштаби­рованного изображения;
    • выбрать:

      • масштаби­рование средствами видеокарты (ГП, GPU);
      • режим вывода по центру без масштабирования.
  3. В игре или эмуляторе выбрать режим вывода с растяжением (stretch) изображения на весь экран как по вертикали, так и по гори­зонтали, без сохранения пропорций и без чёрных полос вокруг отмасштаби­рованного изображения.
  4. Пере­ключить системное разрешение экрана в соответ­ствующее пользова­тельское разрешение.
  5. Играть в полно­экранном режиме.

Пример

Например, если разрешение игры — 320×240, а разрешение экрана — 1920×1080 (Full HD), то макси­мальный цело­чис­ленный масштабный коэффи­циент равен 4, а нужное пользова­тельское разрешение — 1280×960:

1080 / 240 = 4,5 → 4

320 * 4 = 1280
240 * 4 = 960

Масштаби­рование, встроенное в игры

В некоторые современные игры масштаби­рование без размытия встроено. В основном это характерно для игр на основе пиксельной графики (pixel art), но встречается и в некоторых трёх­мерных играх.

  • Owlboy () (приключенческий платформер на основе пиксельной графики) — масштаби­рование без размытия встроено в игру.
  • QuakeSpasm (Quake на более современном движке) — начиная с версии 0.93.0 () в игру встроена возможность цело­численного масштаби­рования без размытия с коэффи­циентами до 400% с помощью конфи­гураци­онного параметра r_scale. Для исполь­зования этой возмож­ности следует в подпапку ID1 папки игры поместить текстовый файл autoexec.cfg, содержащий параметр вида r_scale 4, где 4 указывает на масштабный коэффи­циент. Например, при выбранном в игре разрешении 3840×2160 игра отрисовывается в разрешении 960×540 и масшта­бируется до 3840×2160 без размытия путём отображения каждого логического пиксела как квадратной группы из 16-ти (4×4) физических пикселов одинакового цвета.
  • Dusk () (3D-шутер в ретростиле) — в игру встроена возможность цело­численного масштаби­рования без размытия с коэффи­циентами до 800%. Для этого служит параметр «Pixelization» → «1x-8x» в разделе «Advanced Display Settings» настроек игры. По некоторым данным, по умолчанию параметр установлен в значение «2x», что, например, при физическом разрешении 4K соответ­ствует логическому разрешению Full HD.

Просмотр изобра­жений и видео

  • XnView — программа для просмотра изобра­жений — поддерживает масштабирование без размытия. Для этого следует снять галку «Инструменты» → «Опции» → «Вид» → «Высокое качество при масштаби­ровании» → «При увеличении» («Tools» → «Options» → «View» → «High quality zoom» → «Enlarge»). Ограничение: настройка применяется ко всем просмат­риваемым изобра­жениям вне зависимости от кратности их размеров размеру окна XnView и исполь­зования полно­экранного режима.
  • MPC-HC — плеер для просмотра видео — поддерживает масштабирование без размытия. Для этого следует установить в настройках параметр «Вид» → «Настройки» → «Воспроиз­ведение» → «Вывод» → «Интер­поляция» → «Ближайший сосед» («View» → «Options» → «Playback» → «Output» → «Resizer» → «Nearest neighbor»). Настройка доступна при исполь­зовании движков отрисовки «Video Mixing Renderer 9 (renderless)», «Расширенный рендер видео (EVR custom presenter)» («Enhanced Video Renderer (custom presenter)») и «Sync Renderer». Движок отрисовки можно выбрать с помощью выпадающего списка «Вывод DirectShow» («DirectShow Video») на той же странице настроек. Ограничение: настройка применяется ко всем видео вне зависимости от кратности размеров видео­кадра размеру окна плеера и исполь­зования полно­экранного режима. После выпуска версии 1.7.13 () разработка ориги­нального MPC-HC прекращена, разработку плеера теперь продолжает clsid2 на GitHub.

Встроенные средства Windows

  • Для оконных программ — экранная лупа Windows (Windows Magnifier). Недостатки:

    • неудобный интер­фейс — трудно точно совместить масштаби­руемую область с границами подлежащего масштаби­рованию объекта;
    • при некратных размере подлежащего масштаби­рованию объекта и разрешении монитора область вокруг объекта не заполняется однотонной заливкой, поэтому помимо подлежащего масштаби­рованию объекта видны посторонние объекты;
    • в оконном режиме — задержка (lag) и подёргивание;
    • в режиме вывода на полный экран — подёргивание как минимум в некоторых играх (например, WRC 6) (возможно, только в Windows 7) и возможная задержка (lag).
  • Для оконных Windows-программ, несовместимых с HiDPI — исполь­зование Windows 10, где, в отличие от Windows 7, старые программы при цело­численных системных масштабах авто­матически масшта­бируются без размытия.
  • В Windows 10 для игр с поддержкой псевдо­полно­экранного режима «Borderless» возможно масштаби­рование без размытия с масштабом, равным системному масштабу.

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

    Для масштаби­рования с помощью Borderless-режима:

    • игра должна быть запущена в режиме DPI-виртуализации (DPI scaling) — встроенном в Windows режиме масштаби­рования устаревших программ, не рассчитанных на экраны с высокой плотностью точек. Принудительно включить DPI-виртуализацию для игры, даже если она объявлена как совместимая с HiDPI (DPI-aware), в Windows 10 можно, переопределив DPI-режим в значение «Система» через свойства исполняемого файла (*.exe) игры, подробнее см. ниже, в следующем разделе статьи;
    • в настройках игры должен быть выбран режим «Borderless». В разных играх этот режим может называться по-разному, например:

      • Borderless,
      • Borderless Full Screen,
      • Borderless Windowed,
      • Windowed Fullscreen,
      • Fullscreen Windowed.

      В некоторых играх режим, называемый полно­экранным («Full Screen»), на самом деле пред­ставляет собой режим «Borderless» вместо настоящего (exclusive) полно­экранного режима;

    • соотношение системного разрешения и разрешения игры должно быть равно системному масштабу Windows.

    Например, если для монитора разрешением 3840×2160 (4K) в Windows 10 задан масштаб 200% (коэф­фициент — 2), разрешение в настройках игры должно быть 1920×1080 (Full HD):

    3840 / 1920 = 2
    2160 / 1080 = 2

DPI-режим программ в Windows

К программам и играм, не объявленным как совместимые с HiDPI (DPI-aware), Windows авто­матически применяет DPI-виртуализацию (DPI scaling). При DPI-вирту­ализации интер­фейс программы увеличивается как растровое (точечное) изобра­жение с коэффициентом, соответ­ствующим системному масштабу. Например, при системном масштабе 200% такие программы увеличиваются вдвое по горизонтали и вдвое по вертикали.

Чтобы предот­вратить размытие или пикселизацию из-за DPI-виртуализации в играх, важно убедиться, что игра работает в HiDPI-совместимом (DPI-aware) режиме. Определить это легко: размер окна игры в физических пикселах (точках) должен соответ­ствовать разрешению, выбранному в настройках игры. Например, окно игры, работающей в разрешении Full HD, при системном масштабе 200% на 4K-мониторе должно занимать не весь экран, а примерно четверть экрана (половину по горизонтали и половину по вертикали).

Для игр, формально несовместимых с HiDPI, требуется отключить DPI-виртуализацию (DPI scaling) для исполняемого файла игры, чтобы окно игры имело правильный размер и было свободно от размытия, возможного вследствие масштаби­рования, которое Windows авто­матически применяет к HiDPI-несовместимым приложениям.

Отключить DPI-виртуализацию для отдельно взятой игры можно в свойствах (пункт «Свойства» контекстного меню файла) её исполняемого файла (*.exe):

Windows 10
Пункт «Свойства» → вкладка «Совмес­тимость» → секция «Параметры» → кнопка «Изменить параметры высокого DPI» → секция «Пере­определение масштаби­рования с высоким разрешением» → галка «Пере­определите режим масштаби­рования высокого разрешения. Масштаби­рование выполняется» → пункт «Приложение» выпадающего списка.
Windows 10 (устаревшие версии)
Пункт «Свойства» → вкладка «Совмес­тимость» → секция «Параметры» → галка «Пере­определите режим масштаби­рования высокого разрешения. Масштаби­рование выполняется» → пункт «Приложение» выпадающего списка.
Windows 7
Пункт «Свойства» → вкладка «Совмес­тимость» → секция «Параметры» → галка «Отключить масштаби­рование изобра­жения при высоком разрешении экрана».

Чтобы, наоборот, включить DPI-виртуализацию для отдельной игры в Windows 10 для масштаби­рования в border­less-режиме, вместо пункта «Приложение» следует выбрать пункт «Система».

Для некоторых игр, не объявленных как DPI-aware, Windows отключает DPI-виртуализацию авто­матически. Обычно это происходит при первом пере­ключении из полно­экранного режима в оконный.

Телевизоры (ТВ)

  • По некоторым данным (1, 2, 3, 4), размытие отсутствует в режиме «Graphics» в некоторых моделях 4K-телевизоров Sony — например, 65″ модели серии X900E, 55″ модели серии X900H и 42″ OLED-телевизор серии A90K (2022). Режим включается в настройках телевизора: «Settings» (кнопка ⚙️ на пульте) → «Display & Sound» → «Picture» → «Basic» → «Picture mode» → «Graphics». Но есть информация, что когда включена переменная частота обновления (VRR), жёстко устаналивается режим изображения «Game», в котором в разрешениях, отличных от физического, есть размытие.
  • Есть информация, что некоторые 4K-телевизоры Panasonic поддерживают возможность вывода Full-HD-сигнала без размытия. Например, в модели TX-55CX802B это реализуется параметром «1080p Pixel by 4 pixels» в меню «Picture» → «Option Settings». Судя по всему, эта возможность касается исключительно разрешения Full HD (1920×1080) и не работает при иных разрешениях входного видео­сигнала (например, 1280×720). При этом аналогичная модель меньшей диагонали — TX-50CX802 — судя по официальной инструкции, такой функции лишена. Функция также доступна в моделях TH-65AX900A, TX-50AX802 и TX-58DX750. Согласно HDTVTest, в 65-дюймовом OLED-телевизоре TX-65JZ2000B серии JZ2000 эта функция отсутствует.
  • Есть информация (1, 2), что размытие отсутствует в разрешениях 1920×1080 (Full HD) и ниже во входном режиме «Computer» в некоторых моделях 4K-телевизоров TCL на основе платформы Roku TV при исполь­зовании прошивки (firmware) от  — например, 65R625. Но как минимум в разрешении 1920×1080 есть некоторое сглаживание на границах одно­тонных областей.

Прочее

  • SmartUpscale — расширение для браузеров Firefox и Chrome для отключения неоправ­данного размытия изобра­жений на веб-страницах.
  • Есть сведения, что размытие отсутствует при масштаби­ровании с цело­численными коэффи­циентами средствами офици­ального видео­драйвера Intel для опера­ционной системы Linux.
  • gamescope — оконный менеджер-композитор (compositing window manager) для основанной на Debian Linux операционной системы SteamOS — поддерживает цело­чис­ленное масштаби­рование при исполь­зовании видео­карт AMD. Включается с помощью параметра командной строки -n или сочетанием клавиш Super+N.
  • Raspbian — опера­ционная система для мини-компьютеров Raspberry Pi — начиная с  поддерживает масштаби­рование без размытия с коэффи­циентом 200% с помощью параметра настроек «Pixel Doubling» на вкладке «System» в приложении «Raspberry Pi Configuration». Начиная с версии Raspbian от  параметр «Pixel Doubling» и другие параметры экрана перемещены на новую вкладку «Display».
  • При запуске игр Nintendo DS на игровых системах Nintendo 3DS(XL) цело­численное масштаби­рование можно включить удерживанием кнопки Start или Select во время запуска игры.
  • Zisworks ZWS — наборы для модификации 4K-мониторов и телевизоров — поддерживают цело­чис­ленное масштаби­рование с масштабом до 400%. Заявляется близкая к нулю задержка 30 мкс. Доступны наборы:

    • X28 Rev2 (505 $) для 28″ монитора Samsung U28H750 (2017, TN), доступен монитор с предуста­новленным набором (1160 $);
    • X28 Rev2 (Generic) (495 $) для 28″ панели Innolux M280DGJ-L30 (2013, TN);
    • X39 Rev2 (525 $) для 39″ телевизора Seiki SE39UY04 (2017);
    • X40 Rev2 (425 $) для 40″ монитора Philips BDM4065 (2014);
    • X39 Rev2 (490 $) для других панелей 39″, 40″ и 42″.
  • iiRcade — домашние игровые автоматы — поддерживают цело­чис­ленное масштаби­рование («pixel perfect filtering») начиная с версии 9.008 внутреннего программного обеспечения. Режим включён по умолчанию.

Потен­циальные решения

  • Масштаби­рование средствами монитора. Преимущество по сравнению с масштаби­рованием средствами видео­драйвера — экономия пропускной способности видео­интер­фейса и потен­циальное снижение электро­магнитного излучения от сигнального кабеля. Например, 65-дюймовый 4K-телевизор Samsung Q60 (QN65Q60RAFXZA) поддерживает частоту обновления 120 Гц при разрешении Full HD, но лишь 60 Гц при разрешении 4K, поэтому при масштаби­ровании видео­картой частота 120 Гц недоступна. Такое же ограничение имеет телевизор Samsung UN55NU8000. Кроме того, масштаби­рование видео­картой невозможно, если источник сигнала — не компьютер, а игровая приставка или аппаратный видео­плеер.
  • Устройство для масштаби­рования, подключаемое в разрыв между источником видео­сигнала и дисплеем. Преимущество по сравнению с масштаби­рованием средствами видео­драйвера — возможность исполь­зования с любым источником сигнала (например, игровой приставкой или видеоплеером), а не только компьютером. Потен­циальные недостатки:

    • может вносить дополнительную задержку (lag);
    • может пострадать совмес­тимость с техно­логией HDCP, необходимой для воспроиз­ведения защищённого контента. Решаемо с помощью пере­ключателя для временного включения режима прямой передачи видео­сигнала без изменений. Пере­ключатель может быть физическим или управляемым с компьютера по USB.

    Существуют похожие устройства:

    • mCable — HDMI-кабель со встроенной микросхемой для повышения качества входного сигнала в реальном времени с применением шумоподавления, сглаживания и повышения резкости с заявленной задержкой (лагом) менее 1 мс;
    • DCDigital для вывода видео­сигнала игровой приставки Sega Dreamcast по HDMI в формате Full HD с поддержкой цело­численного масштаби­рования с двукратным увеличением изобра­жения (640×480 → 1280×960);
    • UltraHDMI для вывода видео­сигнала игровой приставки Nintendo 64 по HDMI без потерь качества (обзор).

    Возможно, подобное устройство можно реализовать на основе программируемых вентильных матриц FPGA: 1, 2. Есть информация, что для масштабирования до разрешения 4K необходима FPGA-матрица с тактовой частотой не менее 600 МГц.

Что делать

Обычные пользо­ватели

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

Разработчики игр

  • Встраивайте цело­численное масштаби­рование в разрабатываемые вами игры.

    • В трёх­мерных (3D-) играх это можно реализовать с помощью рендеринга в текстуру (Render To Texture) с последующим масштаби­рованием полученной текстуры аппаратными средствами видео­карты с исполь­зованием алгоритма «По соседним» («Nearest Neighbour»).
    • В игровом движке Unreal Engine доступна встроенная возможность масштаби­рования без размытия с помощью консольной пере­менной r.Upscale.Quality со значением 0.
    • Цело­численное масштаби­рование возможно в игровом движке Godot. См. демонст­рационный проект.
  • Лоббируйте встраивание цело­численного масштаби­рования в популярные игровые движки Unity, CryEngine и проч., чтобы авто­матически сделать эту функцию доступной в будущих играх на их основе.

Алгоритм

Авторский алгоритм цело­численного масштаби­рования. Алгоритм — последовательность действий для достижения нужного результата. Если вас интересует готовая реализация, см. библиотеку IntegerScaling (C++/Rust/JS/PHP).

Кратко

Без коррекции соотношения сторон

Делим ширину и высоту экрана на ширину и высоту изобра­жения соответ­ственно. У меньшего из результатов отбрасываем дробную часть. Это искомый цело­численный масштаб.

С коррекцией соотношения сторон

  1. Делим ширину и высоту экрана на ширину и высоту изобра­жения соответ­ственно. Отбрасываем дробные части. Это макси­мальные цело­численные масштабы по горизонтали и вертикали соответственно.
  2. Умножаем их на ширину и высоту изобра­жения соответ­ственно, получаем размеры области, куда будет вписано отмасшта­бированное изображение.
  3. Если соотношение сторон области равно целевому, искомые цело­численные масштабы равны макси­мальным.
  4. В зависимости от того, меньше или больше соотношение сторон области по сравнению с целевым, принимаем искомый цело­численный масштаб по горизонтали или вертикали равным макси­мальному по этой оси.
  5. Масштаб по второй оси прибли­зительно вычисляем исходя из масштаба по первой оси и целевого соотношения сторон. Результат округляем вверх или вниз исходя из мини­мизации погрешности соотношения сторон.

Подробно

  1. Делим ширину SW и высоту SH экрана в физических пикселах соответ­ственно на ширину W и высоту H подлежащего масштаби­рованию изображения. Отбрасываем дробные части у полученных соотношений, получаем макси­мальные цело­численные коэффициенты MRX по горизонтали и MRY по вертикали соответственно.
  2. Если коррекция соотношения сторон изобра­жения не требуется (пикселы квадратные, масштабные коэффициенты по горизонтали и вертикали одинаковы):

    1. Цело­численный масштабный коэффициент R равен меньшему из соотношений MRX и MRY.
    2. Отображаем каждый пиксел исходного изобра­жения как квадратную группу из R×R физических пикселов одинакового цвета, равного цвету пиксела исходного изображения.
    3. Вычисляем ширину UW и высоту UH отмасшта­бированного изобра­жения умножением соответ­ственно ширины W и высоты H исходного изобра­жения на масштабный коэффициент R.
  3. Если коррекция соотношения сторон изобра­жения требуется (пикселы потен­циально прямо­угольные, масштабные коэффи­циенты по горизонтали и вертикали потен­циально разные):

    1. Умножаем ширину W и высоту H изобра­жения на MRX и MRY соответ­ственно, получаем ширину MW и высоту MH области, в которую будет вписано отмасшта­бированное изображение.
    2. Делим ширину MW этой области на её высоту MH, получаем соотношение сторон MA этой области.
    3. Если соотношение MA равно целевому соотношению сторон TA:

      1. Масштабные коэффициенты RX по горизонтали и RY по вертикали принимаем равными MRX и MRY соответственно.
      2. Переходим к центри­рованию отмасшта­бированного изобра­жения (шаг 4.1).
    4. Если соотношение MA меньше целевого соотношения сторон TA:

      1. Масштабный коэффициент RX по горизонтали принимаем равным MRX.
      2. Делим макси­мальную ширину MW на целевое соотношение сторон TA, получаем приблизительную отмасшта­бированную высоту AUH.
    5. Если соотношение MA больше целевого соотношения сторон TA:

      1. Масштабный коэффициент RY по вертикали принимаем равным MRY.
      2. Умножаем макси­мальную высоту MH на целевое соотношение сторон TA, получаем приблизительную отмасшта­бированную ширину AUW.
    6. Приблизительный отмасшта­бированный размер AUW или AUH делим на исходный размер изобра­жения W или H по этой оси. Округляем результат в направлении, при котором погрешность соотношения сторон мини­мальна. Если погрешности в обоих направлениях одинаковы или близки, округляем результат в направлении, при котором соотношение сторон ближе к исходному (масштабы по разным осям ближе друг к другу, пиксел по форме ближе к квадрату). Полученное целое число — масштабный коэффициент по этой оси — RX (по горизонтали) или RY (по вертикали).
    7. Вычисляем ширину UW и высоту UH отмасшта­бированного изобра­жения умножением ширины W и высоты H исходного изобра­жения на масштабные коэффициенты RX по горизонтали и RY по вертикали соответственно.
  4. Выравниваем отмасшта­бированное изобра­жение по центру экрана:

    1. Из ширины SW и высоты SH экрана вычитаем соответ­ственно ширину UW и высоту UH отмасшта­бированного изобра­жения, результаты делим на 2, отрасываем дробную часть, полученные числа обозначаем X и Y соответственно.
    2. Отмасшта­бированное изобра­жение выводим на расстоянии X по горизонтали и Y по вертикали от верхнего-левого угла экрана.
  5. Оставшееся экранное прост­ранство вокруг отмасшта­бированного изобра­жения заполняем чёрным цветом.

Образец реализации

Авторская библиотека IntegerScaling пред­ставляет собой образец реализации алгоритма на нескольких языках програм­мирования: C++, Rust, JavaScript, PHP. Библиотека используется, например, в SNES-эмуляторе bsnes-mt.

Пример без коррекции соотношения сторон

Требуется вывести изобра­жение 640×480 (VGA) на экране 1920×1080 (Full HD):

1920 / 640 = 3
1080 / 480 = 2,25

2,25 меньше, чем 3. Отбрасываем дробную часть 0,25, получаем 2. Значит, выводим каждый пиксел исходного изобра­жения как группу 2×2 физических пиксела.

Ширина и высота отмасшта­бированного изобра­жения — 1280 (640 * 2) и 960 (480 * 2) соответ­ственно. Значит, для центри­рования на экране выводим отмасшта­бированное изобра­жение на расстоянии 320 ((1920 - 1280) / 2) пикселов по горизонтали и 60 ((1080 - 960) / 2) пикселов по вертикали от верхнего-левого угла экрана.

Пример с коррекцией соотношения сторон

Требуется вывести изобра­жение 400×254 с целевым соотношением сторон 4:3 на экране 3840×2160 (4K):

3840 / 400 = 9,6
2160 / 254 ≈ 8,5

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

Умножаем ширину 400 и высоту 254 изобра­жения на 9 и 8 соответ­ственно, получаем ширину 3600 и высоту 2032 области, в которую будет вписано отмасшта­бированное изобра­жение.

Соотношение сторон области 1,77 больше целевого соотношения сторон 4:3 (≈ 1,333). Поэтому:

  • масштабный коэффициент по вертикали принимаем равным 8;
  • умножаем макси­мальную высоту 2032 на целевое соотношение сторон 4:3 (≈ 1,333), получаем приблизительную отмасшта­бированную ширину 2709,333.

Делим 2709,333 на исходную ширину 400 изобра­жения, получаем 6,773, округляем, получаем масштабный коэффициент 7 по горизонтали. Таким образом, размер пиксела — 7×8.

Ширина и высота отмасшта­бированного изобра­жения — 2800 (400 * 7) и 2032 (254 * 8) соответ­ственно. Фактическое соотношение сторон — около 1,378 (2800 / 2032), погрешность относительно целевого соотношения 4:3 (≈ 1,333) — около 3,35%.

Для центри­рования на экране выводим отмасшта­бированное изобра­жение на расстоянии 520 ((3840 - 2800) / 2) пикселов по горизонтали и 64 ((2160 - 2032) / 2) пиксела по вертикали от верхнего-левого угла экрана.

Эталонная отрисовка

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

Во избежание влияния искажений, вносимых веб-браузером, рекомендуется сохранить изобра­жения на компьютер и просматривать их сторонней само­стоя­тельной программой в масштабе 100%. Вы также можете скачать все изобра­жения в виде единого архива (55 КБ).

Изображения Масштаб Чёрный фон Примечание
Исходное В масштабе Полный Целоч. Слева +
справа
Сверху +
снизу
320×240
qVGA, 4:3
3840×2160
4K UHD, 16:9
9
900%
480+480 0 Изобра­жение на всю высоту, чёрный фон только слева/справа
640×480
VGA, 4:3
1920×1080
Full HD, 16:9
2,25
225%
2
200%
320+320 60+60
1280×720
HD, 16:9
1920×1080
Full HD, 16:9
1,5
150%
1
100%
320+320 180+180 Идентично режиму центри­рования
1280×720
HD, 16:9
2560×1600
WQXGA, 16:10
2
200%
0 80+80 Изобра­жение на всю ширину, чёрный фон только сверху/снизу
1920×1080
Full HD, 16:9
3840×2160
4K UHD, 16:9
2
200%
0 0 Разрешения кратны, поэтому чёрного фона нет

Пользова­тельский интерфейс

Введение

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

Более гибкий вариант — раздельное управление размытием и цело­численностью масштаба. Тогда нужны две настройки:

  1. для отключения размытия вне зависимости от цело­численности или дробности масштабного коэффи­циента — в результате просто используется алгоритм «По соседним» вместо билинейной интер­поляции;
  2. для исполь­зования строго цело­численных масштабных коэффи­циентов с целью предот­вращения искажений изобра­жения в режиме масштаби­рования без размытия.

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

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

Галка + выбор пере­менности размера пиксела

Потен­циально наиболее интуитивно-понятный пользова­тельский интер­фейс мог бы содержать галку (флажок) «Предотвращать размытие при масштаби­ровании».

Включение галки включало бы алгоритм масштаби­рования «По соседним» и одно­временно делало бы доступной дополни­тельную настройку «Размер пиксела» с двумя вариантами на выбор:

«Одинаковый»
(без искажений изобра­жения, но возможны чёрные полосы вокруг изображения);
«Переменный»
(макси­мальное исполь­зование площади экрана ценой некоторых искажений изображения).

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

Раздельные настройки для фильтрации и цело­численного масштаба

Пользова­тельский интер­фейс мог бы быть аналогичным интер­фейсу RetroArch, в видео­настройках которого есть два булевых (вкл./выкл.) параметра:

  • «Билинейная фильтрация»;
  • «Целочисленный масштаб».

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

Такой интер­фейс допускает сочетание размытия с цело­численным масштабом, но на практике это не имеет смысла.

Термины «билинейная фильтрация» и «цело­численный масштаб» могут быть недос­таточно понятны непро­двинутым пользо­вателям.

Два новых пункта в линейном списке режимов масштаби­рования

Можно добавить два новых пункта в сущест­вующий список класси­ческих режимов масштаби­рования («По центру», «Растянуть», «Растянуть с сохранением соотношения сторон»):

  • «Предотвращать размытие (макси­мальное исполь­зование экрана, возможны искажения)»;
  • «Предотвращать размытие и искажения (возможны чёрные полосы вокруг изображения)».

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

Вопросы и ответы (FAQ)

Это только для пиксельной графики, эмуляторов и старых игр?

Нет, это миф и заблуждение. Важнейший сценарий исполь­зования цело­численного масштаби­рования — запуск совре­мен­ных трёх­мерных (3D) игр в разрешении Full HD на 4K-экране без неоправ­данных потерь качества по сравнению с Full-HD-экраном такого же размера. В обозримом будущем — масштабирование QHD (3x) и 4K (2x) до 8K.

Разрешение ниже физического разрешения экрана может использоваться для повышения быстродействия игр (особенно на ноутбуках) либо в играх, при физическом разрешении экрана работающих неправильно, а также при работе с несов­местимыми с HiDPI программами, для которых DPI-виртуа­лизация (DPI scaling) в Windows приводит к графическим или функцио­нальным проблемам.

Кроме того, цело­чис­ленное масштаби­рование полезно для предот­вращения потерь качества при просмотре фильмов.

Это то же самое, что «Nearest Neighbour»?

Лишь отчасти. Результаты применения алгоритма «Nearest Neighbour» («По соседним», «Ближайший сосед») и цело­численного масштаби­рования одинаковы только при целочисленных масштабных коэффи­циентах — например, 2 или 3.

  • При дробных масштабных коэффи­циентах (например, 4,5 при масштаби­ровании 640×480 до 4K) «Nearest Neighbour» приводит к искажению изобра­жения и так называемому дрожанию пикселов (pixel shimmering). Это происходит из-за разных размеров разных пикселов в одном и том же изобра­жении: например, при масштабе 150% одни пикселы имеют размер 1×1, а другие — 2×2, 2×1 и 1×2.
  • При цело­численном масштаби­ровании масштабный коэффи­циент всегда цело­численный (например, ровно 4 для случая 640×480→4K) — вне зависимости от соотношения физического и логического разрешений. Прост­ранство, которое может остаться пустым из-за некратности разрешений, заполняется чёрным, как в режиме центри­рования.
Имеется в виду отключение сглаживания?
Нет. Размытие не имеет отношения к сглаживанию (antialiasing). Сглаживание применяется при отрисовке (рендеринге) трёх­мерной сцены, а размытие добавляется при увеличении уже отрисо­ванного растрового изобра­жения как набора точек. Цело­численное масштаби­рование можно (и следует) исполь­зовать в сочетании со сглажи­ванием. Включаем сглаживание в игре, выключаем размытие при масштаби­ровании в настройках дисплея или видео­драйвера и получаем изобра­жение Full HD на 4K-мониторе с таким же качеством, как на мониторе с физическим разрешением Full HD.
Разве без размытия пикселы не будут заметны?

Это не всегда так, а когда так — не обязательно плохо.

  • Заметность пикселов зависит от сочетания разрешения дисплея, разрешения исходного изобра­жения, расстояния до экрана и качества сглаживания (anti­aliasing) в игре. Например, в разрешении Full HD на 4K-мониторе диагональю 24″ на типичном расстоянии 50-60 см от экрана при качест­венном сглаживании в игре логические пикселы почти неразличимы, и размытие лишь бессмысленно снижает резкость. При низко­качест­венном или выключенном сглаживании пикселы заметны вне зависимости от того, есть ли размытие при масштабировании. Автор этих строк регулярно играет в игры в разрешении Full HD с помощью IntegerScaler и смотрит Full-HD-видео с помощью MPC-HC на 24″ 4K-мониторе Dell P2415Q. Теперь представьте себе цело­чис­ленное масштаби­рование QHD или 4K в 8K или 8K в 16K в тех же условиях. Плотность точек, соответ­ствующая 8K при диагонали 27″, имеет место уже сейчас в 13,3″ 4K-ноутбуках.
  • Уместность заметной пикселизации зависит от типа исходного изобра­жения: например, для пиксельной графики (pixel art) пиксе­лизация — задуманный эффект, и размытие искажает авторский замысел.
Но мне нравится размытие!
Без проблем. Цело­численное масштаби­рование задумано как включаемо-выключаемая (опциональная) функция. Если вам нравится размытие, вы сможете просто не включать цело­численное масштаби­рование в настройках видео­драйвера или дисплея.
Зачем 4K-монитор, если исполь­зовать всё равно в Full HD?
  • У компьютеров много сценариев исполь­зования, во многих из них разрешение 4K даёт преимущество, а быстро­действие не является проблемой:

    • комфорт при любой работе с текстом (просмотр веб-страниц, текстовые редакторы, програм­мирование, веб-разработка), схемами, чертежами, графиками на 4K-мониторе несоизмеримо выше, чем на FHD-мониторе, благодаря увели­ченной детали­зации, невидимой меж­пиксельной сетке и значительно сниженному «мельтешению», связанному с попере­менным мерцанием субпикселов из-за инверсии кристаллов, характерной для ЖК-технологии;
    • более высокое физическое разрешение позволяет с более высоким качеством просматривать фотографии;
    • более высокое физическое разрешение позволяет увеличить глубину (разрядность) цвета без мерцания — путём отображения усреднённых оттенков с помощью соседних пикселов, отображающих слегка разные оттенки (dithering).
  • Даже если компьютер достаточно быстр для запуска игр в разрешении 4K, не все игры работают в этом разрешении правильно: например, в «Cities XL Platinum» элементы управления становятся слишком мелкими, а в «Bionic Commando Rearmed» не видны элементы голово­ломок на мини-уровнях «Hack enemy network».
  • Чем выше физическое разрешение, тем полнее может исполь­зоваться экран при цело­численном масштаби­ровании. Например, при масштаби­ровании 320×240 до Full HD теряется (заполняется чёрным) 1/9 (11%) высоты экрана (1080/240 = 4,5), а на 4K-дисплее коэффи­циент составляет ровно 9, и изобр­ажение занимает всю высоту экрана. На 8K-дисплеях то же будет применимо к разрешению 640×480; кроме того, можно будет без потерь качества или экранного прост­ранства исполь­зовать любое из типичных разрешений: 4K (3840×2160, 2x), QHD (2560×1440, 3x), FHD (1920×1080, 4x), HD (1280×720, 6x).
Выглядит ли FHD на 4K-мониторе при цело­чис­ленном масштаби­ровании так же, как на FHD-мониторе?

Да. Более того, игры и видео в разрешении Full HD при цело­чис­ленном масштаби­ровании на 4K-мониторе выглядят даже лучше, чем на мониторе с физическим разрешением FHD, в частности не видна меж­пик­сельная сетка, и почти незаметно мерцание ЖК-дисплеев, связанное с инверсией кристаллов.

Единственный особый случай — суб­пик­сельное сглажи­вание текста, которое работает только при физическом разрешении экрана, т. к. основано на опре­делён­ном взаимном рас­поло­жении суб­пикселов:

Может ли это улучшить качество 1440p на 4K-мониторе?

Нет. Цело­численное масшта­бирование — не волшебная палочка, повышающая качество любого изобра­жения. Оно основано на простом матема­тическом принципе, согласно которому при увеличении изобра­жения в целое количество раз можно просто повторить исходный пиксел без необ­ходимости подме­шивания цветов соседних пикселов и тем самым избежать размытия. Для исполь­зования цело­численного масшта­бирования на разрешении QHD (2560×1440) нужен экран разрешением 5K (5120×2880) или 8K (7680×4320):

5120 / 2560 = 2880 / 1440 = 2,0
7680 / 2560 = 4320 / 1440 = 3,0

При исполь­зовании экрана 4K (3840×2160) макси­мальным логическим разрешением, при котором возможно цело­численное масшта­бирование, является Full HD (1920×1080):

3840 / 1920 = 2160 / 1080 = 2,0

При разрешении QHD соотношение физического и логического разрешений составляет 1,5:

3840 / 2560 = 2160 / 1440 = 1,5

Группы размером 1,5×1,5 пиксела физически невозможны. Макси­мальный цело­численный масштаб составляет 1,0, что эквивалентно обычному режиму центри­рования в масштабе 100% с широкими чёрными полосами вокруг изображения.

То же самое относится к масштаби­рованию HD (1280×720) до Full HD (1920×1080). Для цело­численного масштаби­рования 1280×720 требуется дисплей с разрешением как минимум 2560×1440 (масштаб 200%, пикселы 2×2).

Что лучше: более низкое разрешение без размытия или более высокое — с размытием?

При более низком разрешении, отмасштабированном без размытия (например, FHD→4K), изображение более резкое. При более высоком разрешении, отмасштабированном с размытием (например, QHD→4K), изображение более детализированное, хотя и неизбежно несколько размытое из-за неточного совпадения логических пикселов с физическими.

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

Разве в OpenGL и DirectX это не встроено?
В программных интер­фейсах (API) отрисовки трёх­мерной графики типа OpenGL (режим GL_NEAREST) и DirectX (D3DTEXF_POINT в Direct3D 9) алгоритм «Nearest Neighbour» действительно доступен, но пред­назначен для масштаби­рования текстур. Хотя разработчики отдельно взятой игры могут косвенно исполь­зовать эту возможность для цело­численного масштаби­рования в конкретной игре, масштаби­рование текстур не имеет прямого отношения к универ­сальному полно­экранному масштаби­рованию, прозрачному для опера­ционной системы и программ.
Это задача дисплея или видео­карты?

Поддержка цело­чис­ленного масштаби­рования видео­картой не противо­речит поддержке со стороны дисплея, и наоборот.

  • Даже если новые дисплеи начнут поддерживать масштаби­рование без размытия, владельцам сущест­вующих дисплеев это не поможет, а масштаби­рование средствами видео­карты — поможет.
  • Масшта­бирование видео­картой недоступно, если источник сигнала — не компьютер, а, например, игровая приставка (Nintendo Switch, PlayStation 3/4, MiSTer FPGA, Super Nt, Mega Sg, SNES Mini) или аппаратный видео­плеер.
  • При масштаби­ровании видео­картой сигнал всегда выводится в физическом разрешении дисплея, поэтому имеют место все ограничения по сравнению с масштаби­рованием средствами дисплея, в том числе потен­циально сниженная частота обновления или сниженная глубина цвета.

    Например, при подключении по HDMI 1.x максимальная частота обновления при разрешении 4K составляет 30 Гц, а при разрешении Full HD — 120 Гц. При масштаби­ровании видео­картой частота была бы ограничена теми же 30 Гц, как при настоящем разрешении 4K, даже если логическое разрешение до масштаби­рования — Full HD.

  • В случае видео­карт nVidia цело­численное масштаби­рование доступно только для современных видео­карт начиная с поколения Turing (2019) (RTX и GTX 16*) и только под Windows 10 и новее.
  • Реализация цело­численного масштаби­рования конкретно в видео­драйвере nVidia имеет ряд серьёзных ограничений, в том числе несовме­стимость с рас­ширенным динами­ческим диапазоном (HDR), пользова­тельскими разрешениями (custom resolutions), цветовой суб­дискре­тизацией 4:2:0 и tiled-режимом (используется в 8K-мониторе Dell UP3218K).
  • AMD прекратила выпуск видео­драйверов для Windows 7, поэтому цело­чис­ленное масштаби­рование средствами видео­карты, скорее всего, не будет доступно в Windows 7 с видео­картами, выпущенными после этого. Собственное масштаби­рование дисплея работает вне зависимости от модели видео­карты и версий операционной системы и видео­драйвера.
  • Есть информация, что масшта­бирование видео­картой увеличивает задержку ввода (input lag).
  • Масштаби­рование средствами видео­карты не работает во время загрузки компьютера и в BIOS.
  • Передача большего объёма данных от видео­карты к дисплею занимает больше времени и может увели­чивать задержку ввода (input lag). Поэтому встроенное масштаби­рование дисплея пред­почтительно.
Разве это не задача опера­ционной системы?
У Windows нет доступа к содержимому экрана в реальном (эксклюзивном, exclusive) полно­экранном режиме. Для воз­можности реализации полно­экранного масштаби­рования средствами Windows нужно было бы принци­пиально изменить модель видео­драйверов Windows (WDDM), и даже в этом случае не исключалась бы дополни­тельная задержка (lag) по сравнению с масштаби­рованием собст­венными средствами видео­драйвера.
Разве DLSS не лучше?

Метод масштаби­рования DLSS не является универсальным решением:

  • доступен только на современных видео­картах nVidia;
  • требует индивидуальной поддержки со стороны каждой конкретной игры. Подавляющее большинство игр не поддерживают DLSS. Цело­чис­ленное масштаби­рование работает с любой игрой;
  • может приводить к непред­сказуемым дефектам изображения. Цело­чис­ленное масштаби­рование увеличивает изображение как есть, без внесения каких-либо изменений;
  • основан на машинном обучении и требует больших вычисли­тельных мощностей. Вычисли­тельная мощность, необходимая для цело­чис­ленного масштаби­рования, близка к нулю;
  • пред­назначен для трёх­мерных (3D) игр и неприменим к играм других типов — например, основанным на пиксельной графике (pixel art). Цело­чис­ленное масштаби­рование применимо к любому изображению;
  • недоступен, если источник сигнала — не компьютер, а, например, игровая приставка или аппаратный видео­плеер.
Чем это отличается от повышения резкости (sharpening)?
Цело­численное масштаби­рование без размытия не имеет отношения к повышению контурной резкости (sharpening). Цело­численное масштаби­рование предотвращает потери качества, обусловленные размытием, а повышение резкости призвано повысить разборчивость уже размытого изображения.
Чем это отличается от DSR/VSR?

DSR/VSR и цело­численное масштаби­рование изменяют размер изобра­жения в разных направлениях, разными способами и с разными целями.

  • При исполь­зовании DSR/VSR изобра­жение отрисо­вывается в разрешении выше физиче­ского разрешения дисплея и затем умень­шается (downscaling) до разрешения дисплея. По сути это просто сглаживание методом SuperSampling (SSAA), которое можно исполь­зовать в играх, не имеющих встроенной поддержки сглаживания этого типа.
  • При цело­численном масштаби­ровании изобра­жение отрисовывается в разрешении ниже физиче­ского разрешения дисплея и затем увеличи­вается (растягивается) (upscaling) без размытия до разрешения, не превышающего разрешение дисплея при макси­мально возможном цело­численном масштабном коэффициенте.

Единственное, что объединяет DSR/VSR и цело­численное масштаби­рование — универсальная виртуа­лизация разрешения, прозрачная для опера­ционной системы и программ и совместимая со всеми полно­экранными программами.

Чем это отличается от «Resolution Scaling»?
Функция «Resolution Scaling» (масштаби­рование разрешения), доступная в некоторых играх, пред­назначена для управления масштабом встроенными средствами игры. В отличие от исполь­зования одного из предопре­делённых разрешений, она позволяет более тонко подбирать сочетание детали­зации и быстро­действия: например, если при разрешении 2560×1440 быстро­действие недос­таточно, а при 1920×1080 — избыточно, то можно выбрать в игре разрешение 2560×1440 и с помощью «Resolution Scaling» уменьшить его, например, до 2400×1350. В подавляющем большинстве игр эта функция работает с размытием даже при цело­численном коэффи­циенте масштаби­рования разрешения. Цело­численное масштаби­рование без размытия свободно от потерь качества, вызываемых размытием, и при правильной реализации должно быть совместимо со всеми полно­экранными программами.
Чем это отличается от шахматного рендеринга?
Как и исполь­зование меньшего разрешения, метод отрисовки «Checkerboard Rendering» (шахматный рендеринг) позволяет повысить быстродействие. Но к масштаби­рованию шахматный рендеринг отношения не имеет: трёх­мерная сцена отрисо­вывается в половинном разрешении путём просчёта пикселов, распо­ложенных в шахматном порядке, затем цвета недостающих пикселов вычисляются усреднением цветов соседних пикселов и/или на основе пикселов преды­дущего кадра. Такой подход подобен черес­строчной развёртке, обычно используемой в теле­вещании для кодиро­вания видео, и позволяет в играх добиться качества, близкого к таковому при отрисовке в полном разрешении (например, 4K), но с почти вдвое более высоким быстро­действием. При цело­численном масштаби­ровании без размытия полноценно просчитываются все пикселы изобра­жения, которое затем увеличи­вается без внесения в него каких-либо изменений и вычисления каких-либо усреднённых цветов.

Прогресс

AMD — поддержка для GCN 2+ под Windows 7/10

В видео­драйвере AMD для Windows цело­численное масштаби­рование без размытия доступно начиная с Radeon Software 2020 (19.12.2) () для Windows 7/10. Начиная с версии 20.1.4 () устранена проблема, проявлявшаяся в недоступности функции под Windows 7 на некоторых системах. Начиная с версии 21.6.1 () поддержка Windows 7 прекращена, последней версией с поддержкой Windows 7 стала 21.5.2 ().

Функция доступна для видео­карт многих преды­дущих поколений начиная с архитектуры GCN 2-го поколения (), в том числе видео­карт линеек R7 260, R9 285 и R9 290. Это является выгодным отличием от реализаций Intel и nVidia.

Включить цело­численное масштаби­рование можно установкой параметра «Integer Scaling» в значение «Enabled» на странице «Display», открываемой выбором одно­имённого пункта меню, открывающегося при нажатии кнопки с пикто­граммой в виде шестерёнки (⚙️) в верхней-правой части окна Radeon Software. Кроме того, можно пере­определить режим масштаби­рования для отдельно взятой игры в свойствах игры на странице «Gaming».

Совместимо с повышением резкости и VSR

Есть информация, что в реализации AMD цело­численное масштаби­рование можно исполь­зовать совместно с повышением резкости (RIS) и VSR, что наряду с поддержкой видео­карт преды­дущих поколений является преимуществом по сравнению с реализацией nVidia.

Исполь­зование VSR совместно с цело­численным масштаби­рованием потен­циально позволяет, например, полностью исполь­зовать высоту экрана разрешением Full HD при логическом разрешении 320×240 (чистое соотношение — 4,5) ценой некоторого размытия границ пикселов в результате превращения физического разрешения Full HD в виртуальное 4K (соотношение — ровно 9).

Ограничения

  • В примечаниях к выпуску Radeon Software 2020 19.12.2 говорится, что в некоторых случаях при исполь­зовании цело­численного масштаби­рования возможно мерцание.
  • Некоторые пользо­ватели сообщают, что при видеозахвате содержимого экрана (например, с помощью программы OBS) при включённом цело­численном масштаби­ровании захватывается область отмасшта­бированного изобра­жения в верхнем-левом углу экрана, размер которой соответ­ствует исходному (до масшта­бирования) разрешению, при этом остальная часть кадра в видеозаписи чёрная.
  • Один из пользо­вателей видео­карты Radeon RX 5700 XT () сообщил, что при исполь­зовании Radeon Software 19.12.3 цело­численное масштаби­рование работает в играх, но не работает в самой Windows. В то же время у пользо­вателя Radeon RX Vega 64 () при исполь­зовании Radeon Software 19.2.2 и 4K-телевизора TCL S425 проблема не наблюдается.
  • Один из пользо­вателей видео­карты Radeon RX 480 () сообщил, что имеют место задержка (лаг) и падение быстро­действия при исполь­зовании цело­численного масштаби­рования в сочетании с вертикальной синхронизацией (VSync) и разрешениями, при которых над и под отмасшта­бированным изобра­жением выводятся чёрные полосы (letterboxing). Проблема имеет место и в режиме центри­рования, в том числе с преды­дущей версией драйвера, не имевшей поддержки цело­численного масштаби­рования.
  • Один из пользо­вателей сообщил, что при некратных логическом и физическом разрешениях отмасшта­бированное изобра­жение отцентри­ровано по горизонтали, но прижато к верхнему краю экрана вместо центри­рования по вертикали.
  • Один из пользо­вателей сообщил, что стресс-тесты при включённом цело­чис­ленном масштаби­ровании приводили к падениям (crash) вплоть до видео­драйвера AMD версии 20.11.2 (), начиная с которой проблема больше не проявляется.
  • Один из пользо­вателей сообщил, что параметр для включения цело­чис­ленного масштаби­рования в панели управления AMD недоступен с видео­картами серии 6000, в частности RX 6600 XT и Radeon PRO W6600.

Опросы

Реализации функции в драйвере AMD пред­шест­вовали два опроса, проводившихся в течение 2019 года. В обоих опросах пункт «GPU Integer Scaling Support» («Поддержка цело­численного масштаби­рования средствами видео­карты») был на первом месте по количеству голосов (около 50% голосов), и количество голосов продолжало расти даже после реализации функции.

AMD — работа по реализации для Linux

Идёт работа по реализации поддержки цело­численного масштаби­рования без размытия в рамках специфичной для графики AMD части ядра Linux.

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

Intel — поддержка для процессоров Ice Lake (Gen10) под Windows 10

Анонс и статья

Поддержка полно­экранного цело­численного масштаби­рования без размытия доступна в видео­драйвере Intel для Windows начиная с бета-версии 25.20.100.7155 (). Стабильная версия 26.20.100.7212 вышла . Изначально поддержку возмож­ности Intel анонсировала . на сайте Intel опубликовали статью с подробностями.

Функция доступна с помощью параметра «Retro Scaling» в программе «Центр управления графикой Intel» (Intel Graphics Command Center). У параметра три возможных значения:

  • Off
  • Scaled width
  • Fixed width
Скриншот параметра «Retro Scaling» в Intel Graphics Command Center

«Scaled width» означает исполь­зование алгоритма масштаби­рования «По соседним», а значение «Fixed width» соответ­ствует сочетанию алгоритма «По соседним» с исполь­зованием только цело­численных масштабных коэффи­циентов для предот­вращения искажений — т. е. собственно цело­численное масштаби­рование (integer scaling).

Системные требования

Требуется графи­ческое ядро 11-го поколения (Gen11), которое будет исполь­зоваться в процессорах Intel 10-го поколения (Ice Lake). Выход первых процессоров Ice Lake ожидается в конце , первыми устройствами будут ноутбуки.

Для работы видео­драйвера Intel и программы «Центр управления графикой Intel» требуется опера­ционная система Windows 10 версии 1709 или выше.

Аппаратная поддержка и быстродействие

Видео­ядра Intel начиная с 11-го поколения имеют аппаратную поддержку алгоритма масштаби­рования «По соседним» («Nearest Neighbour»). Благодаря этому включение масштаби­рования без размытия средствами видео­драйвера Intel не будет оказывать отрица­тельного влияния на быстро­действие.

В видео­ядрах Intel преды­дущих поколений (10-го и ниже) аппаратная поддержка «Nearest Neighbour», пригодная для полно­экранного масштаби­рования, отсутст­вовала. Поэтому поддержка возмож­ности для них была бы возможна только на чисто программном уровне, из-за чего реализация была бы нетриви­альной, а быстро­действие — низким.

Поддержка цело­численных и дробных масштабов

Доступны оба варианта масштаби­рования без размытия:

  • масштаби­рование с цело­численным коэффи­циентом, одинаковыми размерами пикселов и без искажений изобра­жения, но с возможными чёрными полосами вокруг изображения;
  • алгоритм «По соседним» с макси­мально полным исполь­зованием площади экрана ценой некоторых искажений изобра­жения из-за неодинаковых размеров соседних пикселов.

Их можно включить с помощью значений «Fixed width» и «Scaled width» параметра «Retro Scaling» соответственно.

Ограничения

  • Мини­мальное разрешение, которое будет поддерживаться первой реализацией — 640×480. Поддержка более низких или заданных пользо­вателем разрешений может появиться в последующих версиях графи­ческого ПО Intel.
  • Один из пользо­вателей ноутбука со встроенным видео­ядром Intel сообщил через Discord о ступенчатости (banding) плавных цветовых переходов в режиме расширенного динамического диапазона (HDR).

nVidia — поддержка для поколения Turing под Windows 10

Поддержка цело­численного масштаби­рования доступна в Windows-драйвере nVidia начиная с версии 436.02 от 20 августа 2019 года, но только при исполь­зовании видео­карт nVidia поколения Turing (RTX и GTX 16*) и только в Windows 10 начиная с версии 1803 (Redstone 4) от апреля 2018 года. Под Windows 7 функция недоступна, хотя сам драйвер доступен. Текущая реализация позицио­нируется как экспери­ментальная и имеет бета-статус.

Функция также доступна в видео­драйвере для профессио­нальных видео­карт nVidia Quadro начиная с версии R440 U1 (440.97) ().

Функция включается выбором пункта «Цело­численное масштаби­рование» («Integer scaling») в списке «Дисплей» → «Регулировка размера и положения рабочего стола» → «Масштаби­рование» → «Выберите режим масштаби­рования» («Display» → «Adjust desktop size and position» → «Scaling» → «Select a scaling mode») в панели управления nVidia. При этом для масштаби­рования средствами видео­карты необходимо выбрать пункт «ГП» («GPU») в выпадающем списке «Выполнить масштаби­рование на» («Perform scaling on»).

Ограничения

Функция недоступна:

  • в режиме «Surround»;
  • в tiled-режиме. Режим используется, например, в мониторе Dell UP3218K — единственном 8K-мониторе на рынке;
  • при исполь­зовании пользова­тельских разрешений (custom resolutions);
  • при цветовой субдискретизации 4:2:0 (YUV420) (поддерживаемые цветовые форматы: RGB, YUV444, YUV422);
  • при активной функции DSR;
  • при активной функции повышения резкости nVidia Image Sharpening (441.08+, );
  • на ноутбуках с гибридной (MSHybrid, nVidia Optimus) графи­ческой под­системой (встроенное графи­ческое ядро + дискретная видео­карта), в которых настройками экрана управляет встроенное графи­ческое ядро. По некоторым данным, одним из таких ноут­буков является MSI GS65 Stealth 9SG, сочетающий видео­ядро Intel UHD Graphics 630, встроенное в процессор Intel i7-9750H, и мобильную дискретную видео­карту nVidia GeForce RTX 2080. Другой пример — ноутбук Lenovo Yoga C940-15. По некоторым данным, на подавляющем большинстве таких ноут­буков ограничение не проявляется при исполь­зовании внешнего дисплея вместо собственного экрана ноутбука.

Кроме того, согласно примечаниям к выпуску (release notes), смена разрешения при сочетании режима цело­численного масштаби­рования с режимом расширенного динами­ческого диапазона (HDR) может приводить к «падению» системы («синему экрану смерти», или BSOD) или зависанию компьютера.

Кроме того, согласно официальному комментарию на форуме nVidia, их реализация цело­численного масштаби­рования использует алгоритм «По соседним» («Nearest Neighbour»), только если разрешение отмасштаби­рованного изобра­жения отличается от разрешения исходного изобра­жения в целое количество раз. Из этого вытекает, что их реализация не использует принудительно цело­численный масштаб, если соотношение разрешения экрана и логического разрешения не целое. Значит, например, 640×480 на дисплее 1920×1080, вероятно, масшта­бируется с размытием, и над и под отмасшта­бированным изобра­жением нет чёрных полос даже при формально включённом цело­численном масштаби­ровании.

Согласно nVidia, несовмес­тимость с HDR и пользова­тельскими разрешениями — непреодолимое фундамен­тальное ограничение програм­мируемого фильтра, исполь­зованного для реализации цело­численного масштаби­рования, и это невозможно исправить как минимум для видео­карт nVidia поколения Turing. Представители nVidia говорят, что цело­численное масштаби­рование невозможно задействовать параллельно с так называемым Scan Out Compositor, используемым, например, для реализации DSR и пользова­тельских разрешений.

Устранены ли выше­пере­численные ограни­чения в новой линейке 2020 года RTX 3000 на основе архитектуры Ampere, неизвестно. На форуме nVidia есть соответ­ствующая тема-вопрос от . Один из поль­зователей видео­карты RTX 3080 Founders Edition сообщил, что цело­численное масштаби­рование у него не работает вообще.

Некоторые пользователи сообщают, что им удаётся использовать цело­чис­ленное масштаби­рование параллельно с HDR, пользова­тельскими разрешениями и 4:2:0.

Недоступно для видео­карт преды­дущих поколений

Для видео­карт преды­дущих поколений в Windows-версии драйвера nVidia GeForce функция недоступна. 25 марта 2019 года представитель nVidia сообщил, что реализация масштаби­рования без размытия в видео­драйвере для Windows не планируется, признав при этом, что сам алгоритм тривиален.

В качестве причины называется невозможность такой реализации, которая не потребовала бы постоянного сопро­вождения («ongoing continuous support») на фоне регулярных изменений WDDM-специ­фикации видео­драйверов в Windows 10.

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

nVidia — ограниченная поддержка в Linux-драйвере

В видео­драйвере nVidia GeForce для опера­ционных систем Linux, Solaris и FreeBSD начиная с версии 384.47 () доступен алгоритм масштаби­рования «По соседним»Nearest Neighbour») в рамках функцио­нальности фильтров транс­формации (transform filter). Включается командой следующего вида:

nvidia-settings -a CurrentMetaMode="DP-1: 3840x2160_60 {ViewPortIn=1920x1080, ViewPortOut=3840x2160, ResamplingMethod=Nearest }"

где:

  • DP-1 — видеовыход, к которому подключён монитор;
  • 3840x2160 — разрешение сигнала, получаемого монитором; должно быть равно физическому разрешению монитора, иначе будет размытие из-за масштаби­рования средствами монитора;
  • ViewPortIn — размер области отрисовки (рендеринга) в логических точках (пикселах);
  • ViewPortOut — размер изобра­жения в физических точках после масштаби­рования;
  • ResamplingMethod — алгоритм масштаби­рования (значение по умолчанию — Bilinear).

Результат масштаби­рования может быть меньше физического разрешения монитора. Например, для вывода изобра­жения размером 1280×720 с двукратным увеличением (пикселами 2×2) по центру экрана монитора с физическим разрешением 3840×2160 нужна следующая команда:

nvidia-settings -a CurrentMetaMode="DP-1: 3840x2160_60 {ViewPortIn=1280x720, ViewPortOut=2560x1440+640+360, ResamplingMethod=Nearest }"

где 640 и 360 — сдвиги в физических пикселах от верхнего левого угла по горизонтали и вертикали соответ­ственно, необходимые для центри­рования отмасшта­бированного изобра­жения.

Команды можно исполнить в терминале, который можно открыть сочетанием клавиш Ctrl+Alt+T.

Программная реализация и быстродействие

На аппаратном уровне в видео­картах nVidia реализована только билинейная интер­поляция с размытием, поэтому алгоритм масштаби­рования «По соседним» реализован программно и задействует часть вычисли­тельных ресурсов графи­ческого процессора. Теоретически это может несколько снизить макси­мальное быстро­действие видео­карты. На практике быстро­действие примерно одинаково вне зависимости от типа интер­поляции: «По соседним» (Nearest) или билинейная (Bilinear).

К сожалению, в некоторых играх к серьёзному падению быстродействия приводит сам факт исполь­зования фильтра транс­формации. Например, в игре «F1 2017» в разрешении 1280×720 при исполь­зовании фильтра транс­формации быстро­действие ниже, чем в разрешении 1920×1080 в обычном полно­экранном режиме. При масштаби­ровании игры при её работе в оконном режиме быстро­действие заметно выше, чем при полно­экранном масштаби­ровании средствами фильтра транс­формации, но всё равно ниже, чем в обычном полно­экранном режиме.

Только оконные и псевдо­полно­экранные игры

К сожалению, функция работает только с оконными и псевдо­полно­экранными (выводимыми поверх рабочего стола ОС) играми. К полно­экранным играм, переключающим разрешение монитора (например, «Euro Truck Simulator 2»), масштаби­рование не применяется.

При этом во многих псевдо­полно­экранных играх функция работает неправильно: изобра­жение отрисо­вывается в разрешении, выбранном в настройках игры (например, 1920×1080), затем масшта­бируется с размытием до разрешения ViewPortOut (например, 3840×2160), затем из него вырезается верхняя-левая или нижняя-левая часть, соответ­ствующая размеру ViewPortIn (например, 1920×1080), и лишь эта часть выводится на монитор.

Проблема не зависит от конкретного окружения рабочего стола (desktop environment) и проявляется как минимум в Unity (Ubuntu 17.04) и GNOME (Ubuntu 17.10).

Чтобы при работе в оконном режиме была видна макси­мально возможная часть полезного прост­ранства окна игры, можно включить авто­мати­ческое скрытие панели задач (Dock) в настройках Ubuntu («Параметры» → «Панель задач» → «Авто­матически скрывать панель задач») («Settings» → «Dock» → «Auto-hide the Dock»), а для авто­мати­ческого скрытия верхней панели исполь­зовать GNOME-расширение Hide Top Bar. Для мини­мизации высоты заголо­вочной панели окна игры имеет смысл переключиться на системный масштаб 100%.

Мышь и разрешение

Сопутствующая проблема — даже если результат отрисовки игры виден целиком, её меню, кнопки и другие элементы управления могут быть недоступны для наведения указателя и щелчков мышью, если не переключиться на нужное логическое разрешение (ViewPortIn) в настройках игры до включения Nearest-режима в видео­драйвере.

Это связано с тем, что по умолчанию игра может запускаться в выходном (ViewPortOut) разрешении видео­драйвера вместо логического (ViewPortIn). Это же может приводить к серьёзному снижению быстро­действия: игра будет сначала отрисовываться в высоком разрешении, затем масштаби­роваться в низкое, а затем — снова в высокое с интер­поляцией «По соседним».

Официальные комментарии nVidia

Один из разработчиков Linux-драйвера Аарон Платтнер (Aaron Plattner) считает, что проблема не в драйвере, а в том, что игры неправильно трактуют данные, предо­ставляемые программной под­системой RandR.

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

Проверенные игры

В таблице — результаты проверки некоторых игр в виртуальном разрешении Full HD (1920×1080) на мониторе Dell P2415Q с физическим разрешением 4K (3840×2160) в опера­ционной системе Ubuntu версий 17.10 и 18.04.

Linux — ограниченная поддержка в XRandR

Системная Linux-программа XRandR для управления графи­ческой под­системой позволяет включить масштаби­рование без размытия вне зависимости от произ­водителя графи­ческого чипа. Функция доступна начиная с версии 1.5.1 () и включается такой командой:

xrandr --output DP-1 --scale 0.5x0.5 --filter nearest

где:

  • DP-1 — условное обозначение видеовыхода, к которому подключён монитор;
  • 0.5 — понижающий коэффи­циент: например, 0.5 на 4K-мониторе (3840×2160) включит виртуальное разрешение Full HD (1920×1080);

Увидеть обозначение видеовыхода можно в панели управления видео­картой либо в списке, выводимом командой:

xrandr | grep " connected " | awk '{ print$1 }'

Например, в вирту­альной машине VMware Player 15.5.6 эта команда выводит строку Virtual1.

Во многих дистрибутивах Linux, в том числе Ubuntu 21.04, по-прежнему по умолчанию поставляется устаревшая версия XRandR 1.5.0. Эта версия поддерживает масштаби­рование, но не поддерживает отключение размытия. При попытке исполь­зования параметра --filter выводится такое сообщение об ошибке:

xrandr: unrecognized option '--filter'

Установка экспери­ментальной версии XRandR

Внимание: установка экспери­ментальных версий фундаментальных системных программ в Linux может повлиять на работо­способность всей системы, отдельных её функций или сторонних программ.

Установить экспери­ментальную версию XRandR можно такой последо­ватель­ностью команд:

git clone git://anongit.freedesktop.org/xorg/app/xrandr xr
cd xr
./autogen.sh
sudo make install

Перед этим может потребоваться установить дополнительные пакеты или экспери­ментальные версии уже установленных пакетов. Например, в только что установленной Ubuntu 18.10 достаточно установить пакеты git, xorg-dev, xutils-dev, autoconf следующими командами:

sudo apt install git
sudo apt install xorg-dev
sudo apt install xutils-dev
sudo apt install autoconf

Только оконные и псевдо­полно­экранные игры

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

Некоторые игры в псевдо­полно­экранном режиме выводятся в усечённом виде: например, при внутриигровом разрешении Full HD на 4K-мониторе обычно видна нижняя левая или верхняя левая четверть изображения. В полно­экранном режиме видна ещё меньшая часть изобра­жения, т. к. не только часть исходного изобра­жения масшта­бируется до физического разрешения монитора, но и монитор переключается в меньшее разрешение.

Linux — поддержка в Proton

Proton начиная с версии 4.11-10 () поддерживает цело­численное масштаби­рование без размытия. Включить можно с помощью пере­менной среды:

WINE_FULLSCREEN_INTEGER_SCALING=1

Proton — улучшенная версия Wine. Proton используется в функции “Steam Play”, позволяющей запускать Windows-игры в Linux напрямую через программу-клиент Steam без необхо­димости ручной установки и настройки Wine.

По сравнению с фильтрами транс­формации nVidia и масштаби­рованием средствами XRandR, встроенное в Proton цело­численное масштаби­рование потен­циально удобнее:

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

Мониторы — 4K- и QHD-мониторы Eve/Dough Spectrum

Уже реализовано и проверено

Eve/Dough Spectrum — первые в мире компьютерные мониторы со встроенным цело­численным масштаби­рованием. Функция уже реализована и работает: проверено вашим покорным слугой.

4K-модель с частотой обновления до 144 Гц уже находится в производстве и доставляется покупателям, зарезер­вировавшим монитор. Также запланированы две модели с разрешением QHD (2560×1440) и частотами обновления до 144 Гц и 240 Гц соответственно. Модель 240 Гц будет доступна ориентировочно в , модель 144 Гц — в .

Мониторы основаны на ЖК-панелях «Nano IPS» производства LG Display со временем отклика 1 мс и под­дер­живают пере­менную частоту обновления (variable refresh rate, VRR) «FreeSync Premium Pro» («G-Sync Compatible») с мини­мальной частотой 48 Гц и расширенный динами­ческий диапазон (HDR): у старших моделей — HDR600, у младшей — HDR400.

Ограничения

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

  • Цело­чис­ленное масштаби­рование работает только в предо­пределённых разрешениях. В других разрешениях изображение центрируется без масштаби­рования, как в режиме центрирования («1:1»).
  • При включённом в настройках монитора режиме низкой задержки («Low-latency mode») или режиме переменной частоты обновления («Adaptive-Sync», «VRR») цело­чис­ленное масштаби­рование не работает, вместо этого изображение растягивается на весь экран без сохранения пропорций, как в режиме «Stretch to fill». В этом случае включение цело­чис­ленного масштаби­рования в настройках монитора лишь отключает размытие.

Аналог LG не поддер­живает цело­чис­ленное масштаби­рование

4K-монитор другого произ­водителя на основе той же ЖК-матрицы — LG 27GN950 — по данным одного из владельцев, не поддер­живает цело­численное масштаби­рование.

зафик­сирован переход на эту статью со служебного (пред­положи­тельно почтового) сервера LG, что позволяет надеяться, что в LG обратили внимание на цело­чис­ленное масштаби­рование.

Похожие и гибридные способы масштаби­рования

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

Цело­численное по вертикали

Верти­кальный масштабный коэффи­циент цело­численный, горизон­тальный — дробный. Достигаются:

  • точное целевое соотношение сторон при коррекции соотношения сторон;
  • равно­мерное распре­деление линий scanlines по вертикали.

Но по гори­зонтали есть либо искажения (если для горизон­тального масштаби­рования исполь­зуется алгоритм «По соседним»), либо размытие (при билинейной или аналогичной горизон­тальной интер­поляции).

Пример
  • SNES-эмуляторы bsnes и bsnes-mt в режиме «Center» («По центру»).

В зависимости от кратности разрешений

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

  • без размытия — при кратных размерах: например, FHD на 4K-мониторе, соотношение 2,0;
  • с размытием — при некратных размерах: например, FHD на QHD-мониторе, соотношение 1,333.

Таким образом:

  • при цело­численном соотношении размеров (2,0 в случае FHD→4K) нет неоправ­данного размытия, и чёткость максимальна;
  • при дробном соотношении размеров (1,333 в случае QHD→4K) усредняются все пикселы исходного изображения, и есть размытие;
  • в обоих случаях отмасштаби­рованное изображение соответ­ствует исходному, и нет искажений;
  • размер отмасштаби­рованного изображения всегда равен размеру области, в которую оно вписывается, чёрный фон вокруг не добавляется.
Примеры
  • Масштаби­рование интер­фейса программ механизмом DPI-вирту­ализации (DPI scaling) в Windows 10.
  • Браузерное расширение Smart­Upscale для цело­чис­ленного масштаби­рования изображений на веб-страницах.

Пикселизация с размытием границ пикселов

Пиксели­зованное изображение с физическими пикселами усреднённых цветов на границах логических пикселов. Реализуется алгоритмами «Sharp Bilinear», «Pixellate» и «AANN» («Anti­Aliased Nearest Neighbour»), дающими слегка различающиеся, но в целом аналогичные результаты.

Sharp Bilinear — двухэтапное масштаби­рование:

  1. цело­численное масштаби­рование без размытия;
  2. растяжение или сжатие до размеров экрана с размытием.

Обеспе­чиваются одно­временно:

  • макси­мальное заполнение экрана;
  • точное соблюдение целевого соотношения сторон;
  • частично пиксели­зованный характер изображения;
  • отсутствие заметного дрожания пикселов (pixel shimmering).

Но границы логических пикселов размыты, и чёткость ниже, чем при чистом цело­численном масштаби­ровании.

Примеры

Шейдеры (shaders) (подпрограммы постоб­работки изображения, исполняемые на видео­карте) «Sharp Bilinear», «Pixellate» и «AANN» в эмуляторах:

  • SNES-эмуляторы bsnes и bsnes-mt в режимах «Center» («По центру»), «Scale» («Масштаби­рование с сохранением пропорций») и «Stretch» («Растяжение без сохранения пропорций»);
  • libretro-оболочка RetroArch.