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

Кратко

Проблема

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

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

Например, изображение 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-экранах при цело­численном масштаби­ровании можно использовать без потерь качества или площади экрана любое из типичных разрешений:

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

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

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

  • если экраном повышенного разрешения оснащён ноутбук, установка мощной видеокарты практически невозможна из-за естественных ограничений по габаритам, энергопотреблению и тепловыделению;
  • многие игры содержат растровые (точечные) элементы (например, меню в «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). Ограничение: настройка применяется ко всем просматриваемым изображениям вне зависимости от кратности их размеров размеру окна программы и использования полноэкранного режима.
  • Для просмотра видео — плеер 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») на той же странице настроек. Ограничение: настройка применяется ко всем видео вне зависимости от кратности размеров видеокадра размеру окна программы и использования полноэкранного режима.

Встроенные средства 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 режиме масштаби­рования устаревших программ, не рассчитанных на экраны с высокой плотностью точек;
    • в настройках игры должен быть выбран режим «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-виртуализацию для игры, даже если она объявлена как совместимая с HiDPI (DPI-aware), в Windows 10 можно через свойства исполняемого файла (*.exe) игры, подробнее см. ниже.

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-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)

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

    • комфорт при любой работе с текстом (просмотр веб-страниц, текстовые редакторы, программирование, веб-разработка), схемами, чертежами, графиками на 4K-мониторе несоизмеримо выше, чем на FHD-мониторе, благодаря увеличенной детализации, невидимой межпиксельной сетке и значительно сниженному «мельтешащему» попеременному мерцанию субпикселов;
    • более высокое физическое разрешение позволяет с более высоким качеством просматривать фотографии;
    • более высокое физическое разрешение позволяет увеличить глубину (разрядность) цвета без мерцания — путём отображения усреднённых оттенков с помощью соседних пикселов, отображающих слегка разные оттенки.
  • Даже если компьютер достаточно быстр для запуска игр в разрешении 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 это не встроено?
В программных интерфейсах отрисовки трёхмерной графики типа OpenGL (режим GL_NEAREST) и DirectX алгоритм «Nearest Neighbour» действительно доступен, но предназначен для масштаби­рования текстур. Хотя разработчики отдельно взятой игры могут косвенно использовать эту возможность для цело­численного масштаби­рования в конкретной игре, масштаби­рование текстур не имеет прямого отношения к универ­сальному полно­экранному масштаби­рованию, прозрачному для операционной системы и программ.
Это задача дисплея или видеокарты?
Поддержка масштаби­рования видео­картой не противоречит поддержке со стороны дисплея, и наоборот. Даже если новые дисплеи начнут поддерживать масштаби­рование без размытия, владельцам существующих дисплеев это не поможет, а масштаби­рование средствами видео­драйвера — поможет. Но масшта­бирование видео­картой недоступно, если источник сигнала — не компьютер, а, например, игровая приставка или видео­плеер, тогда неизбежно используется собственное масштаби­рование монитора или телевизора. Кроме того, при масштабировании видео­картой сигнал всегда выводится в физическом разрешении дисплея, поэтому имеют место все ограничения по сравнению с масштабированием средствами дисплея, в том числе сниженная частота обновления или сниженная глубина цвета. А реализация цело­численного масштаби­рования конкретно в видео­драйвере nVidia имеет ряд серьёзных ограничений, в том числе несовме­стимость с рас­ширенным динами­ческим диапазоном (HDR), пользова­тельскими разрешениями и цветовой суб­дискре­тизацией 4:2:0.
Разве это не задача операционной системы?
У Windows нет доступа к содержимому экрана в реальном (exclusive) полно­экранном режиме. Для возможности реализации полно­экранного масштаби­рования средствами Windows нужно было бы принци­пиально изменить модель видео­драйверов Windows (WDDM), и даже в этом случае не исключалась бы дополни­тельная задержка (lag) по сравнению с масштаби­рованием собственными средствами видеодрайвера.
Не лучше ли использовать DLSS?

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

  • доступен только на современных видеокартах nVidia;
  • требует индивидуальной поддержки со стороны каждой конкретной игры;
  • может приводить к разнообразным непредсказуемым артефактам изображения;
  • предназначен для трёхмерных игр и неприменим к играм других типов — например, основанным на пиксельной графике (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). Проблема имеет место и в режиме центрирования, в том числе с предыдущей версией драйвера, не имевшей поддержки цело­численного масштабирования.
  • Один из пользователей сообщил, что при некратных логическом и физическом разрешениях отмасшта­бированное изображение отцентри­ровано по горизонтали, но прижато к верхнему краю экрана вместо центри­рования по вертикали.
  • Один из пользователей сообщил, что цело­численное масштаби­рование не работает с видеокартой Radeon HD 7950 (), хотя формально возможность для этих видеокарт поддерживается и параметр «Integer Scaling» в настройках Radeon Software доступен.

Опросы

Реализации функции в драйвере 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);
  • при использовании пользова­тельских разрешений;
  • при цветовой субдискретизации 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 или пользовательских разрешений.

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

Для видеокарт предыдущих поколений в 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 }'

Во многих дистрибутивах Linux, в том числе Ubuntu 19.10, по-прежнему по умолчанию поставляется устаревшая версия XRandR 1.5.0. Эта версия поддерживает масштаби­рование, но не поддерживает параметр --filter, поэтому отключение размытия в ней недоступно. При попытке использования параметра --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-мониторе обычно видна нижняя левая или верхняя левая четверть изображения. В реальном (exclusive) полноэкранном режиме видна ещё меньшая часть изображения, т. к. не только часть исходного изображения масшта­бируется до физического разрешения монитора, но и монитор переключается в меньшее разрешение.

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 $.