Целочисленное масштабирование без размытия
(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 ожидаются в  и  соответ­ственно.
  • Автономные устройства масштаби­рования: в конце 2023 года ожидается выпуск RetroTink-4K (1000 $) и Morph 4K (400-500 $) с поддержкой вывода в разрешении 4K, цело­чис­ленного масштаби­рования цифровых и аналоговых сигналов и имитации экранов ЭЛТ (CRT).

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

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

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

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

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

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

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

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

Такое масштаби­рование без потерь качества известно как:

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

Больше, чем Nearest Neighbour

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

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

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

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

Примеры

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

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

Фото

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

Демо

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

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

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

  • повышение быстро­действия в современных трёх­мерных играх на экранах 4K+, особенно на ноутбуках;

  • возможность на экранах 4K+ играть в игры, не рассчитанные на экраны с высокой плотностью точек (HiDPI):

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

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

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

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

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

    • уменьшить или устранить дополнительную задержку ввода (input 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 раза выше.
  • Чем выше физическое разрешение экрана, тем менее заметен логический пиксел при тех же размере экрана и масштабном коэффи­циенте, и тем менее оправдано размытие как своего рода сглаживание. Например, на 24—27″ 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
  • При более высоком физическом разрешении экрана возможно достижение более точных пропорций изображения при цело­чис­ленном масштаби­ровании по обеим осям с коррекцией соотношения сторон. Например, для разрешения 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).

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

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

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

  • если экраном повышенного разрешения оснащён ноутбук, установка мощной видео­карты практически невозможна из-за естест­венных ограничений по габаритам, энерго­потреблению и тепло­выделению;
  • многие игры содержат растровые (точечные) элементы (например, меню в «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»).
  • FCEUX — эмулятор NES — поддерживает цело­чис­ленное масштаби­рование по обеим осям в оконном режиме, и оно включено по умолчанию: «Config» → «Video…» → «Windowed Settings» → «Force integral scaling factors». Коррекцию соотношения сторон можно включить галкой «Aspect ratio» → «TV Aspect». В полно­экранном режиме цело­чис­ленное масштаби­рование не поддерживается.
  • 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

  • Mesen 2.0 — находящийся в разработке эмулятор NES (Dendy), SNES (Super Nintendo), Game Boy, PC Engine, Sega Master System, Sega Game Gear — поддерживает цело­численное масштаби­рование в полно­экранном режиме: «Settings» → «Video» → «General» → «Use integer scale values when entering fullscreen mode».

    Для отключения размытия должна быть снята галка «Settings» → «Video» → «Picture» → «Use bilinear interpolation when scaling» (снята по умолчанию).

    Поддер­живается отсечение заданного количества пикселов исходного изобра­жения по отдельности для каждой из сторон, благодаря чему можно полнее исполь­зовать площадь экрана: «Settings» → «NES / SNES / Game Boy / PC Engine / SMS» → «Video» → «Overscan».

    В Windows-сборке от  в SNES-играх изображение выводится в двойном разрешении с шириной 512 пикселов, даже если игра работает в обычном разрешении с шириной 256 пикселов, поэтому экран используется менее полно, чем мог бы при использовании реального разрешения игры.

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

  • 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 Scaling».
  • 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-X — улучшенная неофициальная версия эмулятора DOSBox для запуска DOS-программ — поддерживает полное цело­численное масштаби­рование — с цело­численными масштабами одно­временно по вертикали и горизонтали: «Video» → «Output» → «OpenGL Perfect».

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

    Windows-версия DOSBox-X не объявлена как HiDPI-совместимая (DPI-aware) программа, поэтому для более полного использования площади экрана и более точного соотношения сторон следует вручную пере­определить DPI-режим на значение «Приложение» через свойства исполняемого файла перед запуском DOSBox-X.

  • 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 несколько ниже. В настоящее время функция удалена, последняя версия с поддержкой цело­численного масштаби­рования по обеим осям — 0.80.1 ().

    Параметр 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

  • Для версий DOSBox с поддержкой шейдеров (shaders) существуют шейдеры pixel_perfect.glsl и pixel_perfect-scanlines.glsl для полного цело­численного масштаби­рования — одно­временно по вертикали и горизонтали, реализующие авторский алгоритм автора статьи.
  • 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 есть некоторое сглаживание на границах одно­тонных областей.

Игровые автоматы

  • iiRcade — домашние игровые автоматы — поддерживают цело­чис­ленное масштаби­рование («pixel perfect filtering») начиная с версии 9.008 внутреннего программного обеспечения. Режим включён по умолчанию.
  • Arcade1Up — домашние игровые автоматы — как минимум Killer Instinct, поддерживают цело­чис­ленное масштаби­рование. Включается параметром «Integer scaling» → «On» в настройках по отдельности для каждой игры (Killer Instinct 1/2, BattleToads и проч.). Параметр «Smoothing» рядом с параметром «Integer scaling», вероятно, следует установить в значение «Off» для предотвращения размытия.

Прочее

  • 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″.

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

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

Цело­численное масштаби­рование повышает быстро­действие?

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

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

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

При более низком разрешении, отмасштабированном без размытия (например, 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 (AMD Software: Adrenalin Edition) (19.12.2, ) для Windows 7/10.

Как включить цело­численное масштаби­рование

Включить цело­численное масштаби­рование можно установкой параметра «Цело­численное масштаби­рование» («Integer Scaling») в значение «Включено» («Enabled») на странице «Игры» → «Дисплей» («Gaming» → «Display»), или ⚙️ → «Дисплей» (⚙️ → «Display») в версиях AMD Software ниже 23.7.1 (). Также можно пере­определить режим масштаби­рования для отдельной игры на странице «Игры» → «Компьютерные игры» («Gaming» → «Games»).

Перед включением цело­численного масштаби­рования в панели управления AMD необходимо включить масштаби­рование средствами видео­карты («Масштаби­рование ГП», «GPU Scaling») на той же странице панели управления. Иначе отображается информация, что цело­численное масштаби­рование не поддерживается (Not supported), и включить его невозможно.

При включённом цело­численном масштаби­ровании параметр «Режим масштабирования» («Scaling Mode») игнорируется.

Преимущества: совместимо со старыми видео­картами, Windows 7 и повышением резкости

  • В отличие от Intel и nVidia, поддерживающих цело­численное масштаби­рование только для видеокарт 2019 года и новее, в реализации AMD функция доступна для видео­карт многих преды­дущих поколений начиная с архитектуры GCN 2-го поколения (), в том числе видео­карт линеек R7 260, R9 285 и R9 290.
  • В отличие от Intel и nVidia, поддерживающих цело­численное масштаби­рование только в Windows 10 и выше, реализация AMD также поддерживает Windows 7. Начиная с версии 21.6.1 () регулярный выпуск новых версий видео­драйверов AMD для Windows 7 прекращён, последней версией с поддержкой Windows 7 на тот момент была 21.5.2 (). Но спустя год была выпущена новая версия 22.6.1 (2022-06-23) с поддержкой Windows 7, что сделало видео­карты серии RX 6000 совместимыми с Windows 7.
  • В отличие от реализации nVidia, в реализации AMD цело­численное масштаби­рование можно исполь­зовать совместно с повышением резкости (RIS).

Ограничения

  • Есть информация, что цело­численное масштаби­рование недоступно при использовании встроенного экрана на ноутбуках с интегрированным видеоядром в составе APU-процессоров AMD. При использовании внешнего дисплея функция доступна.
  • В примечаниях к выпуску 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). Проблема имеет место и в режиме центри­рования, в том числе с преды­дущей версией драйвера, не имевшей поддержки цело­численного масштаби­рования.
  • При использовании видеокарт серии RX 500 и, возможно, других, при некратных логическом и физическом разрешениях отмасшта­бированное изобра­жение прижато к верхнему краю экрана вместо центри­рования по вертикали. Автор этой статьи столкнулся с этой проблемой при использовании видео­карты RX 550 с видео­драйверами AMD как минимум вплоть до версии 23.2.1 () включительно.
  • Один из пользо­вателей сообщил, что стресс-тесты при включённом цело­чис­ленном масштаби­ровании приводили к падениям (crash) вплоть до видео­драйвера AMD версии 20.11.2 (), начиная с которой проблема больше не проявляется.
  • Один из пользо­вателей сообщил, что параметр для включения цело­чис­ленного масштаби­рования в панели управления AMD недоступен с видео­картами серии 6000, в частности RX 6600 XT и Radeon PRO W6600. По опыту автора этой статьи, с видео­картой RX 6400 это не проявляется как минимум с видео­драйвером AMD версий 23.3.1 () и новее.
  • Автор этой статьи при исполь­зовании видео­карты RX 6400 столкнулся с искажёнными пропорциями при цело­численном масштаби­ровании в разрешениях с соотношением сторон, отличным от 16:9 — например, 640×480, 800×600, 1024×768, 1280×1024 — изображение было вытянуто по вертикали и/или сжато по горизонтали. Проблема проявлялась как минимум до версии видео­драйвера AMD 23.2.2 () включительно. Как минимум начиная с версии видео­драйвера AMD 23.3.2 () проблема больше не проявляется.
  • Начиная с версии 20.1.4 () устранена проблема, проявлявшаяся в недоступности функции под Windows 7 на некоторых системах.

Опросы

Реализации функции в драйвере 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) или зависанию компьютера. Позднее один из пользователей подтвердил работо­способность HDR при использовании видео­карты RTX 4090 на основе архитектуры Ada Lovelace ().
  • Согласно nVidia, несовмес­тимость с HDR и пользова­тельскими разрешениями — непреодолимое фундамен­тальное ограничение програм­мируемого фильтра, исполь­зованного для реализации цело­численного масштаби­рования, и это невозможно исправить как минимум для видео­карт nVidia поколения Turing. Представители nVidia говорят, что цело­численное масштаби­рование невозможно задействовать параллельно с так называемым Scan Out Compositor, используемым, например, для реализации DSR и пользова­тельских разрешений.
  • Согласно официальному комментарию на форуме nVidia, их реализация цело­численного масштаби­рования использует алгоритм «По соседним» («Nearest Neighbour»), только если разрешение отмасштаби­рованного изобра­жения отличается от разрешения исходного изобра­жения в целое количество раз. Из этого вытекает, что их реализация не использует принудительно цело­численный масштаб, если соотношение разрешения экрана и логического разрешения не целое. Значит, например, 640×480 на дисплее 1920×1080, вероятно, масшта­бируется с размытием, и над и под отмасшта­бированным изобра­жением нет чёрных полос даже при формально включённом цело­численном масштаби­ровании.
  • Пользователь видео­карты RTX 2080 Ti сообщил, что при использовании видео­драйвера 531.61 () под Windows 10 x64 цело­численное масштаби­рование периодически перестаёт работать, помогает его выключение и повторное включение в панели управления nVidia.
  • Поль­зователь видео­карты RTX 3080 Founders Edition сообщил, что цело­численное масштаби­рование у него не работает вообще.

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

Некоторые пользователи сообщают, что им удаётся использовать цело­чис­ленное масштаби­рование параллельно с 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 обратили внимание на цело­чис­ленное масштаби­рование.

Автономные устройства масштабирования

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

RetroTink-4K (750 $)

RetroTink-4K (RT4K) — устройство масштаби­рования на основе FPGA. Анонсировано . Разработчик — Майк Чи (Mike Chi). В продаже с конца по цене 750 $.

Максимальное выходное разрешение — 4K (3840×2160) при частоте обновления 60 Гц с полным цветовым разрешением 4:4:4, без цветовой субдискретизации. Также поддерживается вывод Full HD (1080p), QHD (1440p) и 480p. Пользовательские (custom) видео­режимы можно добавить с помощью текстовых файлов на SD-карте. Возможно сохранение до 65,5 тыс. пользова­тельских профилей на SD-карте.

Поддерживаются как цело­чис­ленное масштаби­рование, так и имитация изображения, характерного для дисплеев на основе электронно-лучевых трубок (ЭЛТ, CRT), в том числе линий scanlines. Поддерживается режим расширенного динамического диапазона (HDR) для компенсации потери яркости при имитации ЭЛТ.

Есть как цифровой вход HDMI, так и аналоговые входы, в том числе SCART, компонентный (component), S-Video и HD-15 (VGA). Вход HDMI поддерживает произвольные видео­режимы в пределах доступной пропускной способности, в том числе режимы в рамках функцио­нальности MiSTer DirectVideo.

Для электро­питания служит порт USB-C (5 В, 2 А). Управление осуществляется с помощью пульта дистанционного управления.

Morph 4K (400—500 $)

Pixel FX Morph 4K — модульное устройство масштаби­рования на основе FPGA. Анонсировано . Доступен предзаказ. Первые поставки ожидаются в 1-м квартале . Выпуск модуля с аналоговыми входами ожидается во 2-м квартале . Анонсированные цены — 400 $ и 500 $ за версии без аналоговых входов и с аналоговыми входами соответственно.

Максимальное выходное разрешение — 4K (3840×2160) при частоте обновления 60 Гц с полным цветовым разрешением 4:4:4, без цветовой субдискретизации. Пользова­тельские профили можно сохранять на карте MicroSD.

Поддерживаются как цело­чис­ленное масштаби­рование, так и имитация изображения, характерного для дисплеев на основе электронно-лучевых трубок (ЭЛТ, CRT), в том числе линий scanlines. Поддерживается полифазное масштаби­рование (polyphase upscaling) для макси­мального заполнения экрана. Есть поддержка HDR, переменной частоты обновления (VRR), вставки чёрного кадра (BFI).

Вход HDMI поддерживает разрешения от 240p до 1080p.

Базовая версия имеет только цифровой вход HDMI. Дополнительный модуль «Analog Bridge» добавляет аналоговые входы: два VGA, SCART, компонентный (component), 5-BNC.

Порт USB-A позволяет управлять другими устройствами.

Поддерживается обновление прошивки (firmware) как с помощью карты MicroSD, так и по Wi-Fi.

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

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

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

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

  • точное целевое соотношение сторон при коррекции соотношения сторон;
  • равно­мерное распре­деление линий 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.