Целочисленное масштабирование без размытия
(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, пользова­тельскими разрешениями, DSR, 4:2:0, повышением резкости и ноутбуками с гибридной графикой.
  • Linux: поддержка в Proton 4.11-10+ (); ограниченная поддержка в XRandR 1.5.1+ () и видео­драйвере nVidia 384.47+ (): во многих играх изобра­жение усекается.
  • Мониторы: анонсировано для 27″ QHD- и 4K-мониторов Eve Spectrum на основе IPS-матриц LG с поддержкой HDR и частотами до 144 (QHD, 4K) и 240 Гц (QHD); ожидаются в 3-м и 4-м кварталах ; доступен предзаказ.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры

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

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

Фото

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

Демо

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

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

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

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

    • не масштабирующие свой пользова­тельский интерфейс;
    • в разрешениях 4K и выше работающие неправильно;
  • при масштаби­ровании без размытия — сохранение пикселизации в старых и pixel-art-играх;
  • снижение энерго­потребления и тепло­выделения компьютера:

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

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

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

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

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

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

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

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

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

  • На 8K-экранах при цело­численном масштаби­ровании можно исполь­зовать без потерь качества или площади экрана любое из типичных разрешений:

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

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

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

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

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

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

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

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

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

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

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

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

SNES (Super Nintendo)

  • SNES-эмулятор Snes9x начиная с версии 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.
  • SNES-эмулятор Snes9x EX+ для Android начиная с версии 1.4.4 () поддерживает цело­численное масштаби­рование (Options → Video → Zoom → Integer-only). При этом для предот­вращения размытия следует установить параметр Options → Video → Image Interpolation в значение None вместо используемого по умолчанию Linear.
  • SNES-эмулятор Mesen-S поддерживает цело­численное масштаби­рование: Options → Video → General → Use integer scale values when entering fullscreen mode. При этом для предот­вращения размытия должна быть снята галка Picture → Use bilinear interpolation when scaling (снята по умолчанию). Поддер­живается отсечение заданного количества пикселов исходного изобра­жения по отдельности для каждой из сторон, благодаря чему можно полнее исполь­зовать площадь экрана: Options → Video → Overscan.
  • В SNES-эмуляторе bsnes-mt (улучшенной версии bsnes) для Windows есть режим «Цело­численное масштаби­рование» («Pixel-Perfect»): Настройки → Изображение → Цело­численное масштаби­рование (Settings → Output → Pixel-Perfect). В отличие от режима «По центру» («Center») оригинальной версии bsnes, в режиме «Цело­численное масштаби­рование» в bsnes-mt масштабные коэффи­циенты цело­численные как по вертикали, так и по гори­зонтали, даже при включённой коррекции соотношения сторон. Благодаря этому все пикселы имеют в точности одинаковый размер, и исключается дрожание пикселов («pixel shimmering», «ripple effect», «jitter»). Кроме того, интер­фейс bsnes-mt руси­фицирован (англо­язычный тоже доступен), а скриншоты сохраняются в сжатом формате PNG вместо BMP.
  • В SNES-эмуляторе bsnes начиная с версии 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)

  • NES-эмулятор Mesen начиная с версии 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).
  • NES-эмулятор puNES начиная с версии 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. Эмулятор формально несовместим с HiDPI (не является DPI-aware), поэтому для гарантии отсутствия размытия и для макси­мального исполь­зования площади экрана рекомендуется отключить DPI-виртуализацию в свойствах его исполняемого файла.

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

  • Оболочка 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. Выключить размытие можно параметром командной строки -nofilter, либо установив параметр Configure Options → Video Options → Bilinear Filtering в настройках MAME в значение Off.

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

  • Эмулятор 8/16-битных игровых приставок higan начиная с версии 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

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

  • DuckStation — эмулятор игровой приставки Sony PlayStation (PSX) — поддерживает цело­численное масштаби­рование. Программа доступна в двух вариантах: с интер­фейсом на основе библиотек Qt и SDL.

    • В Qt-версии: Settings → GPU Settings → Screen Display → Integer Upscaling; для предот­вращения размытия следует снять галку Linear Upcaling и удосто­вериться, что снята галка Enhancements → Bilinear Texture Filtering (по умолчанию снята).
    • В SDL-версии: Settings → GPU → Integer Scaling; для предот­вращения размытия следует снять галку Linear Filtering и удосто­вериться, что снята галка Texture Filtering (по умолчанию снята).
  • Cemu — экспери­ментальный эмулятор игровой приставки Wii U для Windows — начиная с версии 1.15.2 () поддерживает алгоритм масштаби­рования «По соседним» («Nearest Neighbour») (Options → General settings → Graphics → Upscale filter / Downscale filter → Nearest Neighbor). Произвольное разрешение можно установить для каждой конкретной игры с помощью графи­ческих пакетов (Options → Graphic packs).
  • Amiga-эмулятор WinUAE поддерживает цело­численное масштаби­рование: «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 или BizHawk, в которые встроены собственные реализации цело­численного масштаби­рования.

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

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

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

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

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

    [sdl]
    fullscreen=true
    output=texturepp

    [render]
    scaler=none
    glshader=none

    [cpu]
    cycles=4000

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

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

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

В некоторые современные игры масштаби­рование без размытия встроено. В основном это характерно для игр на основе пиксельной графики (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 Full Screen», «Borderless Windowed», «Borderless», «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-виртуализацию авто­матически. Обычно это происходит при первом переключении из полно­экранного режима в оконный.

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

  • Есть информация, что некоторые 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.
  • По некоторым данным, функция масштаби­рования без размытия доступна в режиме «Graphics» в некоторых моделях 4K-телевизоров Sony — например, X900E.

Прочее

  • Для отключения неоправ­данного размытия изобра­жений на веб-страницах — расширение SmartUpscale для браузеров Firefox и Chrome.
  • Есть сведения, что размытие отсутствует при масштаби­ровании с цело­численными коэффи­циентами средствами офици­ального видео­драйвера Intel для опера­ционной системы Linux.
  • Опера­ционная система Raspbian для мини-компьютеров Raspberry Pi начиная с  поддерживает масштаби­рование без размытия с коэффи­циентом 200% с помощью параметра настроек «Pixel Doubling» на вкладке «System» в приложении «Raspberry Pi Configuration». Начиная с версии Raspbian от  параметр «Pixel Doubling» и другие параметры экрана перемещены на новую вкладку «Display».
  • При запуске игр Nintendo DS на игровых системах Nintendo 3DS(XL), цело­численное масштаби­рование можно включить удерживанием кнопки Start или Select во время запуска игры.

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

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

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

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

    • mCable — HDMI-кабель со встроенной микросхемой для повышения качества входного сигнала в реальном времени с применением шумоподавления, сглаживания и повышения резкости с заявленной задержкой (лагом) менее 1 мс;

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

    Возможно, подобное устройство можно реализовать на основе программируемых вентильных матриц FPGA: 1, 2.

Что делать

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

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

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

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

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

Алгоритм

Готовый алгоритм цело­численного масштаби­рования. Алгоритм — последовательность действий для достижения нужного результата.

Кратко

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

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

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

  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%. Вы также можете скачать все изобра­жения в виде единого архива (80 КБ).

Изображения Масштаб Чёрный фон Примечание
Исходное В масштабе Полный Целоч. Слева +
справа
Сверху +
снизу
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.
Разве без размытия пикселы не будут заметны?

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

  • Заметность пикселов зависит от сочетания разрешения дисплея, разрешения исходного изобра­жения, расстояния до экрана и качества сглаживания в игре. Например, в разрешении 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; кроме того, можно будет без потерь качества или экранного прост­ранства исполь­зовать любое из типичных разрешений: HD (1280×720, 6x), FHD (1920×1080, 4x), QHD (2560×1440, 3x), 4K (3840×2160, 2x).
Может ли это улучшить качество 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).

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

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

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

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

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

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

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

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

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

Прогресс

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

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

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

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

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

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

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

Ограничения

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

Опросы

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

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

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

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

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

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

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

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

Мониторы — анонсировано для QHD- и 4K-мониторов Eve Spectrum

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

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

Будут доступны три модели мониторов диагональю 27″ на основе ЖК-панелей IPS-типа производства LG Display: две — с разрешением 2560×1440 (QHD), и одна — с разрешением 3840×2160 (4K). 4K-модель и младшая QHD-модель будут поддерживать частоты обновления до 144 Гц, старшая QHD-модель — до 240 Гц. Поддер­живается техно­логия пере­менной частоты обновления (variable refresh rate, VRR) «FreeSync Premium Pro» («G-Sync Compatible») с мини­мальной частотой 48 Гц. Поддер­живается расширенный динами­ческий диапазон (HDR): у двух старших моделей — HDR600, у младшей — HDR400. ЖК-матрица младшей QHD-модели — LG 27GL850 типа «Nano IPS» со временем отклика 1 мс.

Ориентировочный срок выпуска мониторов: 3-й квартал  — для младшей QHD-модели, и 4-й квартал — для 4K-модели и старшей QHD-модели. Доступен предзаказ мониторов по ценам 380 (QHD@144), 520 (QHD@240) и 620 $ (4K@144); цена необяза­тельной подставки — 100 $.

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