Целочисленное масштабирование —
способ увеличения изображений без размытия и искажений.
Превращает каждый пиксел в квадратную или прямоугольную группу
из целого количества пикселов одинакового цвета.
Предотвращает потерю резкости в фильмах и трёхмерных играх
при увеличении Full HD до 4K и сохраняет пикселизацию в старых играх
и играх на основе пиксельной графики (pixel art).
Кратко
Проблема
Full HD на 4K-мониторах
и подавляющем большинстве 4K-телевизоров выглядит хуже,
чем на Full-HD-мониторах и телевизорах.
Это происходит из-заразмытия,
добавляемого всеми мониторами и подавляющим большинством телевизоров
при любом масштабном коэффициенте,
хотя при увеличении в целое количество раз
(например, 2 в случае FHD→4K) этого можно избежать.
В результате в фильмах и трёхмерных играх снижается резкость,
белые линии становятся серыми, а пиксельная графика
(pixel art) перестаёт быть пиксельной.
Решение
Можно каждую логическую точку отображать как квадратную группу
из целого (2×2, 3×3) количества физических точек
одинакового цвета без подмешивания цветов соседних точек.
Если физическое разрешение экрана не делится нацело на логическое разрешение,
можно использовать максимальный целочисленный масштаб,
при котором отмасштабированное изображение умещается на экране,
а оставшееся пространство заполнить чёрным цветом,
как в режиме центрирования без масштабирования.
Такое масштабирование без потерь качества уже встроено
в драйверы видеокарт и некоторые программные видеоплееры
и устраняет размытие вне зависимости от монитора или телевизора.
Но такое предварительное масштабирование невозможно,
если источник сигнала — не компьютер,
а, например, игровая приставка или аппаратный видеоплеер.
Кроме того, предварительное масштабирование впустую расходует
пропускную способность видеоинтерфейса (HDMI, DP).
Из-за этого могут страдать частота обновления и глубина цвета.
AMD: поддержка для видеокарт начиная с архитектуры
GCN 2-го поколения ()
в Radeon Software 2020 (19.12.2+) () для Windows 7/10;
идёт работа по реализации для Linux.
Intel: поддержка для видеоядер 11-го поколения
в драйвере 25.20.100.7155+ () для Windows 10;
доступно с сентября в ноутбуках с процессорами
10-го поколения на основе архитектуры Ice Lake.
nVidia: ограниченная поддержка для RTX и GTX 16*
в драйвере 436.02+ () для Windows 10;
несовместимо с HDR, tiled-режимом,
пользовательскими разрешениями, 4:2:0, повышением резкости,
DSR и ноутбуками с гибридной графикой.
Linux: поддержка в Proton 4.11-10+ ();
ограниченная поддержка в XRandR 1.5.1+ ()
и видеодрайвере nVidia 384.47+ ():
во многих играх изображение усекается.
Мониторы:
Поддержка в 27″ 4K- и QHD-мониторах Eve/Dough Spectrum
на основе Nano-IPS-матриц LG с частотами обновления
до 144 Гц (QHD, 4K) и 240 Гц (QHD).
Поддержка в двухрежимном 27″ 4K-мониторе Alienware AW2725QF
в FHD при 360 Гц согласно Monitors Unboxed.
Автономные устройства масштабирования:
выпущены RetroTink-4K (750 $) и Morph 4K (275 $)
(пока без модуля с аналоговыми входами за 100 $)
с поддержкой вывода в разрешении 4K, целочисленного масштабирования
цифровых и аналоговых сигналов и имитации экранов
ЭЛТ (CRT).
Что такое масштабирование
Изображение на компьютерных мониторах
и телевизорах состоит из пикселов (точек).
Количество пикселов по горизонтали и вертикали называется разрешением.
Масштабирование — это изменение размеров (разрешения) изображения.
Оно необходимо, если физическое разрешение экрана отличается
от разрешения подаваемого на него видеосигнала:
например, если игра в разрешении 1920×1080 (Full HD)
запускается в полноэкранном режиме
на мониторе с физическим разрешением 3840×2160 (4K).
Проблема — размытие
На всех мониторах, подавляющем большинстве телевизоров и многих видеокартах
предыдущих поколений масштабирование приводит к снижению резкости
при любом коэффициенте масштабирования.
Такое снижение резкости воспринимается как размытие
и представляет собой необратимую потерю качества.
Но на самом деле размытие неизбежно только
при увеличении в нецелое количество раз.
Например, невозможно один логический пиксел отобразить как 1,5×1,5 физических пиксела,
поэтому приходится применять интерполяцию, состоящую
в усреднении цветов соседних пикселов масштабируемого изображения.
Решение — целочисленное масштабирование
Если коэффициент масштабирования не дробный (например, 1,5),
а целочисленный (например, 2 или 3),
то размытия можно избежать, отобразив каждый логический пиксел
как квадратную группу из целого (например, 2×2 или 3×3)
количества физических пикселов одинакового цвета —
т. е. просто повторив
соответствующий пиксел исходного изображения несколько раз
без какого-либо влияния цветов соседних пикселов.
Такое масштабирование без потерь качества известно как:
integer scaling
(integer-ratio, integer-factor, integral scaling)
(целочисленное масштабирование,
масштабирование с целочисленным коэффициентом);
pixel-perfect scaling
(масштабирование с точной привязкой к физическим пикселам);
pixel doubling (duplication)
(удвоение, или дублирование, пикселов).
Больше, чем Nearest Neighbour
Алгоритм масштабирования «По соседним»
(«Ближайший сосед», «Nearest Neighbour»)
работает без потерь качества только при целочисленных соотношениях
размеров результирующего и исходного изображений,
а при дробных соотношениях приводит к искажениямиз-заразных размеров результирующих пикселов:
В результате таких искажений одни и те же пикселы
движущихся по экрану виртуальных объектов постоянно меняют свои размеры.
Это приводит к так называемому дрожанию пикселов
(pixel shimmering, jitter).
Целочисленное масштабирование свободно от потерь качества,
т. к. масштабный коэффициент всегда
целочисленный и размеры всех пикселов одинаковые.
Если разрешения экрана и изображения некратны,
изображение масштабируется с таким целочисленным коэффициентом,
при котором оно максимально заполняет экран,
а оставшееся пространство заполняется чёрным фоном так же,
как при выводе изображения по центру экрана без масштабирования.
Например, изображение 1280×1024 можно вывести на экран 3840×2160 (4K),
отобразив каждый пиксел изображения как группу из 4-х (2×2)
одинаковых физических пикселов с чёрными полями
по 56 физических пикселов наверху и внизу
и по 640 пикселов — слева и справа.
Примеры
Пиксельная графика
Различия между билинейной интерполяцией с размытием
и целочисленным масштабированием без потерь качества
наглядно видны на примере пиксельной графики,
или пиксель-арта (pixel art):
Фото
См. также фотографии одного и того же
скриншота
программы Reaper, сделанные с использованием трёх способов масштабирования:
Для лучшего понимания сути целочисленного масштабирования без размытия
см. демо-страницу.
Можно сравнить изображение, отмасштабированное
с целочисленным коэффициентом без размытия,
и обычное размытое изображение.
Поддерживаются просмотр произвольных изображений,
коррекция соотношения сторон, scanline-линии.
Сценарии использования
Работа в разрешении ниже физического разрешения экрана имеет смысл для следующих целей:
повышение быстродействия в современных трёхмерных играх
на экранах 4K+, особенно на ноутбуках;
возможность на экранах 4K+ играть в игры,
не рассчитанные на экраны с высокой плотностью точек (HiDPI):
не масштабирующие свой пользовательский интерфейс;
в разрешениях 4K и выше работающие неправильно;
при целочисленном масштабировании без размытия:
возможность использовать экраны более высокого разрешения
с источниками видеосигнала более низкого разрешения,
такими как игровые приставки,
без неоправданных потерь качества, связанных с размытием;
сохранение пикселизации в старых
и pixel-art-играх;
снижение энергопотребления и тепловыделения компьютера:
снижение шума системы охлаждения (кулера) видеокарты;
экономия электроэнергии;
снижение скорости загрязнения окружающей среды.
Почему это важно
На 4K-мониторах при диагонали 24—27″
при разрешении Full HD отдельные пикселы изображения почти неразличимы,
и размытие не даёт никакого эффекта сглаживания,
а просто бессмысленно снижает резкость,
приводя к неоправданной потере качества.
Целочисленное масштабирование повторением пикселов
не требует вычислений и потому работает гораздо быстрее,
чем билинейная или бикубическая интерполяция.
Благодаря этому можно:
уменьшить или устранить дополнительную задержку ввода
(input lag), вносимую масштабированием;
сэкономить вычислительные ресурсы устройства масштабирования;
снизить его энергопотребление, нагрев и шум системы охлаждения.
Пользователь имеет право на отсутствие
неоправданных потерь качества при работе в разрешениях,
отличных от физического разрешения экрана.
Более быстродействующая видеокарта имеет большее тепловыделение
(TDP)
и увеличенный шум системы охлаждения.
Шум отрицательно влияет на комфорт пользователя
и в долгосрочной перспективе может приводить
к необратимому снижению слуха.
В той же мере это относится к видеокарте,
вычислительные ресурсы которой задействуются в более высокой степени,
чем могли бы в более низком разрешении.
Более быстрый процессор и/или видеокарта не решают проблему полностью,
т. к. дело не только в быстродействии компьютера
(см. далее).
Целочисленное масштабирование необходимо
для равномерного распределения линий scanlines,
часто используемых для увеличения
воспринимаемой детализации в старых играх.
При использовании чётных целочисленных масштабных коэффициентов
в сочетании с цветовой субдискретизацией 4:2:2 или 4:2:0
целочисленное масштабирование на стороне источника сигнала
позволяет без потерь качества снизить необходимую пропускную способность
видеоинтерфейса в два или четыре раза соответственно.
Например, для 4K при 4:2:0 достаточно той же пропускной способности,
что для Full HD при 4:4:4.
Ещё важнее с ростом физического разрешения
Чем выше физическое разрешение экрана,
тем важнее и эффективнее целочисленное масштабирование.
Чем выше физическое разрешение экрана, тем труднее достичь
комфортного быстродействия игр при его использовании.
Разрешение 4K вчетверо выше Full HD.
Разрешение 8K (7680×4320) ещё в 4 раза выше.
Чем выше физическое разрешение экрана, тем менее заметен логический пиксел
при тех же размере экрана и масштабном коэффициенте,
и тем менее оправдано размытие как своего рода сглаживание.
Например, на 24—27″ 4K-мониторе
логическую точку (пиксел) при разрешении Full HD (1920×1080)
ещё при желании можно разглядеть при определённом сочетании
расстояния до экрана и качества сглаживания в игре.
Но при физическом разрешении 8K и разрешении сигнала 4K
логический пиксел в тех же условиях будет совершенно неразличим.
Более высокое физическое разрешение экрана в общем случае
позволяет более полно использовать площадь экрана
при целочисленном масштабировании.
Например, при типичном для DOS-игр разрешении 320×240
высота экрана Full HD (1920×1080) заполняется лишь на 89%
(используется 960 из 1080 точек, увеличение четырёхкратное),
а на 4K-мониторе
высота используется полностью (масштабный коэффициент — ровно 9).
Исходное разрешение
Разрешение после масштабирования
Примечание
FHD
4K
8K
Масштаб
Потеря высоты
Масштаб
Потеря высоты
Масштаб
Потеря высоты
256×224
SNES
4,8
17%
9,64
6,7%
19,3
1,5%
На 4K потеря высоты в 2,6 раза меньше, чем на FHD.
На 8K — в 4,5 раза меньше, чем на 4K, и в 11,5 раз меньше, чем на FHD
320×240
qVGA
4,5
11,1%
9
0
18
0
640×480
VGA
2,25
11,1%
4,5
11,1%
9
0
Потери высоты на FHD и 4K одинаковы
800×600
SVGA
1,8
44,4%
3,6
16,7%
7,2
2,8%
На FHD умещается только при масштабе 100% (без увеличения).
На 4K потеря высоты в 2,67 раза меньше, чем на FHD; на 8K — в 6 раз меньше, чем на 4K, и в 16 раз меньше, чем на FHD
1024×768
XGA
1,4
28,9%
2,81
28,9%
5,63
11,1%
На FHD умещается только при масштабе 100% (без увеличения).
На 8K потеря высоты в 2,6 раз меньше, чем на 4K и FHD
При более высоком физическом разрешении экрана
возможно достижение более точных пропорций изображения
при целочисленном масштабировании по обеим осям
с коррекцией соотношения сторон.
Например, для разрешения 256×224, характерного для 16-битных игровых приставок,
таких как SNES и Sega Mega Drive (Genesis), на 4K-экране
погрешность относительно идеального соотношения сторон 4:3 составляет 5%,
а на 8K-экране — менее 1%.
На 8K-экранах при целочисленном масштабировании можно
без потерь качества или площади экрана использовать любое из типичных разрешений,
по сути позволяя гибко изменять физическое разрешение экрана:
8K (7680×4320, 1x);
4K (3840×2160, 2x);
QHD (2560×1440, 3x);
FHD (1920×1080, 4x);
HD (1280×720, 6x).
На разрешениях, кратных трём (QHD, HD),
технически возможно даже имитировать субпиксельную структуру пикселов,
отображая каждый виртуальный субпиксел как физический пиксел или группу физических пикселов.
Более быстрая видеокарта — не решение
В ряде случаев использование более быстродействующего процессора
и/или видеокарты не решает проблему:
если экраном повышенного разрешения оснащён ноутбук,
установка мощной видеокарты практически невозможнаиз-за естественных ограничений по габаритам,
энергопотреблению и тепловыделению;
многие игры содержат растровые (точечные) элементы
(например, меню в «Half-Life 2»
и панели инструментов в «Cities XL Platinum»),
которые в разрешении 4K становятся мелкими,
и играть в игру почти невозможно;
некоторые игры работают в разрешении 4K неправильно
(например, в «Bionic Commando Rearmed» не видны элементы головоломок
на мини-уровнях «Hack enemy network»);
некоторые игры (например, «Duck Tales Remastered») имеют фиксированное разрешение (например, Full HD),
а поддержка остальных разрешений достигается встроенным в игру масштабированием с размытием;
в играх на основе пиксельной графики (pixel art)
быстродействие не является проблемой,
а важен именно пикселизованный характер изображения без неуместного размытия,
не соответствующего замыслу авторов игры;
быстродействие компьютера не имеет значения, если источник видеосигнала —
не компьютер, а, например, игровая приставка или аппаратный видеоплеер.
Частичные решения
Программы масштабирования
IntegerScaler —
программа для масштабирования Windows-игр, поддерживающих оконный режим.
GeDoSaTo
(доступен исходный код) —
программа для масштабирования 3D-игр. Недостатки:
поддерживает только относительно старые игры, использующие DirectX 9 и ниже;
работает лишь с некоторыми из них;
современные версии программы на некоторых системах не работают вообще,
у автора этих строк заработала одна из предыдущих версий —
Beta 10 Poltergeist.
Эмуляторы Glide и DirectX-обёртки
Glide — программный интерфейс (API),
использовавшийся в видеокартах 3dfx.
Glide-эмуляторы позволяют играть в игры с поддержкой Glide на компьютерах,
поддерживающих современные API DirectX и OpenGL.
nGlide —
эмулятор Glide — начиная с версии
2.10 ()
поддерживает целочисленное масштабирование без размытия:
«Options» → «Aspect ratio» → «Integer scaling»).
dgVoodoo 2
(эмулятор Glide и «обёртка» [wrapper] для DirectX до вепсии 9 включительно)
поддерживает целочисленное масштабирование.
Пример для игры «POD Gold» (GOG)
(щёлкните, чтобы развернуть)
Настройка dgVoodoo 2.82.5 () для включения
целочисленного масштабирования в GOG-версии игры «POD Gold»:
Скопировать следующие файлы из папки dgVoodoo в папку игры:
dgVoodoo.conf
MS\x86\D3D9.dll
DXGL (OpenGL-реализация DirectDraw)
поддерживает алгоритм масштабирования без размытия «По соседним» («Nearest Neighbour»)
(источники: 1,
2).
Эмуляторы игровых приставок и движки для старых игр
SNES (Super Nintendo)
Snes9x —
эмулятор SNES — начиная с версии
1.56.2 ()
поддерживает целочисленное масштабирование:
«Video» → «Display Configuration (Display Settings)» →
«General» → «Integer Scaling».
Для отключения размытия размытия следует снять галку
«Video» → «Bilinear Filtering»,
а во избежание других искажений исходного изображения —
в обоих выпадающих списках
«Video» → «Display Configuration (Display Settings)» →
«Output Image Processing» выбрать значение None.
В качестве способа вывода («Video» → «Display Configuration»
(«Display Settings») → «General» → «Output Method»)
необходимо выбрать «Direct3D» или «OpenGL»;
в режиме «DirectDraw» функция не работает.
Ограничение: при использовании фильтра «Scanlines»
используется чётный масштабный коэффициент, из-за чего высота экрана
может использоваться менее полно, чем без фильтра «Scanlines»:
например, на 4K-мониторе используется коэффициент 8 вместо 9.
Snes9x EX+ —
эмулятор SNES для Android — начиная с версии 1.4.4 ()
поддерживает целочисленное масштабирование:
«Options» → «Video» → «Screen Shape» →
«Content Zoom» → «Integer-only».
Для отключения размытия следует установить параметр
«Options» → «Video» →
«Visuals» → «Image Interpolation»
в значение «None» вместо «Linear», используемого по умолчанию.
Mesen-S —
эмулятор SNES — поддерживает целочисленное масштабирование:
«Options» → «Video» → «General» →
«Use integer scale values when entering fullscreen mode».
Для отключения размытия должна быть снята галка
«Picture» → «Use bilinear interpolation when scaling» (снята по умолчанию).
Поддерживается отсечение заданного количества пикселов исходного изображения
по отдельности для каждой из сторон,
благодаря чему можно полнее использовать площадь экрана:
«Options» → «Video» → «Overscan».
bsnes-mt —
эмулятор SNES (улучшенная версия bsnes) для Windows —
имеет режим «Целочисленное масштабирование» («Pixel-Perfect»):
«Настройки» → «Изображение» → «Целочисленное масштабирование»
(«Settings» → «Output» → «Pixel-Perfect»).
В отличие от режима «По центру» («Center») оригинальной версии bsnes,
в режиме «Целочисленное масштабирование» в bsnes-mt
масштабные коэффициенты целочисленные как по вертикали, так и по горизонтали,
даже при включённой коррекции соотношения сторон.
Благодаря этому все пикселы имеют в точности одинаковый размер,
и исключается дрожание пикселов
(«pixel shimmering», «ripple effect», «jitter»).
Кроме того, интерфейс bsnes-mt переведён на несколько языков,
в том числе русский (английский тоже доступен),
а скриншоты сохраняются в сжатом формате PNG вместо BMP.
bsnes —
эмулятор SNES — начиная с версии 107 ()
в режиме центрированного вывода
(«Settings» → «Output» → «Center»)
автоматически применяется целочисленное масштабирование.
Для отключения размытия следует параметр «Settings» → «Shader»
установить в значение «None» вместо используемого по умолчанию «Blur».
Ограничение: при использовании фильтра «Scanlines»
и нечётном масштабном коэффициенте (например, 9 при физическом разрешении 4K)
в сочетании с механизмом отрисовки «OpenGL 3.2»
(«Settings» → «Drivers» →
«Video» → «Driver»)
scanline-линии отрисовываются неравномерно:
например, на 4K-мониторе каждая
7-я линия на 1 пиксел толще остальных.
NES (Nintendo, Famicom, Dendy)
Mesen —
эмулятор NES — начиная с версии
0.9.1 ()
поддерживает целочисленное масштабирование:
«Опции» → «Видео» → «Общие» →
«Use integer scale values when entering fullscreen mode»
(«Options» → «Video» → «General» →
«Use integer scale values when entering fullscreen mode»).
Для отключения размытия должна быть снята галка «Изображение» → «Билинейная интерполяция»
(«Picture» → «Use bilinear interpolation when scaling») (снята по умолчанию).
Поддерживается отсечение заданного количества пикселов исходного изображения
по отдельности для каждой из сторон, в том числе индивидуально для каждой игры,
благодаря чему можно полнее использовать площадь экрана:
«Опции» → «Видео» → «Overscan»
(«Options» → «Video» → «Overscan»).
FCEUX —
эмулятор NES — поддерживает целочисленное масштабирование
по обеим осям в оконном режиме, и оно включено по умолчанию:
«Config» → «Video…» →
«Windowed Settings» → «Force integral scaling factors».
Коррекцию соотношения сторон можно включить галкой «Aspect ratio» → «TV Aspect».
В полноэкранном режиме целочисленное масштабирование не поддерживается.
puNES —
эмулятор NES — начиная с версии
0.105 ()
поддерживает целочисленное масштабирование:
«Settings» → «Video» → «Misc» →
«Use integer scaling in fullscreen».
Для отключения размытия следует снять галку «Interpolation».
Game Boy, Game Boy Advance
mGBA — эмулятор карманных игровых систем
Game Boy, Game Boy Color и Game Boy Advance — начиная с версии
0.6 ()
поддерживает целочисленное масштабирование:
«Audio/Video» → «Force integer scaling».
Для отключения размытия должна быть снята галка
«Audio/Video» → «Bilinear filtering» (по умолчанию снята).
SameBoy —
эмулятор карманных игровых систем Game Boy и Game Boy Color —
начиная с версии
0.9 ()
поддерживает целочисленное масштабирование:
«Graphic Options» → «Scaling Mode» → «Retain Integer Factor».
Для отключения размытия следует установить параметр
«Graphic Options» → «Scaling Filter» в значение «Nearest Neighbor».
Многосистемные эмуляторы
RetroArch —
оболочка для эмуляторов игровых приставок — поддерживает целочисленное масштабирование:
«Settings» → «Video» →
«Integer Scale» → «On».
Для отключения размытия следует установить параметр
«Settings» → «Video» →
«Bilinear Filtering» в значение «Off».
BizHawk —
эмулятор множества игровых систем — поддерживает целочисленное масштабирование:
«Config» → «Display» →
«Scaling & Filtering» →
«Expand pixels by integers only (e.g no 1.3333x)».
Для отключения размытия следует установить параметр «Final Filter»
в значение «None» (по умолчанию).
Но периодически изображение выводится с ошибочным соотношением сторон
и искажёнными пропорциями пикселов.
MAME —
эмулятор множества игровых систем и старых компьютеров —
поддерживает целочисленное масштабирование без размытия.
Для включения целочисленного масштабирования служит параметр командной строки
-nounevenstretch или его краткий вариант -noues.
Во время игры целочисленное масштабирование можно включить через меню, открываемое клавишей Tab:
«Video Options» → «Screen #0» →
«Non-Integer Scaling» → «Off».
Выключить размытие можно параметром командной строки -nofilter,
либо установив параметр
«Configure Options» → «Video Options» →
«Bilinear Filtering»
в настройках MAME в значение «Off».
Алгоритм целочисленного масштабирования в MAME использует пикселы одинакового размера,
поэтому при малых масштабных коэффициентах соотношение сторон отмасштабированного изображения
может не точно соответствовать необходимому,
если игре требуется коррекция соотношения сторон (aspect-ratio correction).
Например, в версии игры «Mortal Kombat 3» для игровых автоматов
(исходное разрешение — 400×254, целевое соотношение сторон — 4:3) на экранах Full HD
изображение заметно сужено по горизонтали
(размер логического пиксела — 3×4 физических пиксела, погрешность — 11,42%),
а на 4K-экранах нарушение пропорции незаметно
(размер пиксела — 7×8, погрешность — 3,34%).
higan —
эмулятор 8/16-битных игровых приставок — начиная с версии
104
() поддерживает целочисленное масштабирование:
«Settings» → «Video» → «Windowed Mode» /
«Fullscreen Mode» → «Integral scaling».
Для отключения размытия следует снять галку
«Settings» → «Video Emulation» → «Blurring»,
а параметр «Settings» → «Video Shader»
установить в значение «None» вместо «Blur», используемого по умолчанию.
Mednafen —
эмулятор множества игровых систем и старых компьютеров —
поддерживает целочисленное масштабирование.
Mednafen — консольная программа без встроенного графического пользовательского интерфейса
(GUI).
Для включения целочисленного масштабирования следует в файле mednafen.cfg
параметр *.stretch для нужной эмулируемой системы (например, snes.stretch для SNES)
установить в значение aspect_int.
Для включения коррекции соотношения сторон следует установить параметр
*.correct_aspect в значение 1.
Для предотвращения размытия следует удостовериться,
что параметр *.videoip имеет значение 0 (по умолчанию).
Например, для SNES:
Mesen 2.0 —
находящийся в разработке эмулятор NES (Dendy), SNES (Super Nintendo),
Game Boy, PC Engine, Sega Master System, Sega Game Gear —
поддерживает целочисленное масштабирование в полноэкранном режиме:
«Settings» → «Video» → «General» →
«Use integer scale values when entering fullscreen mode».
Для отключения размытия должна быть снята галка
«Settings» → «Video» → «Picture» →
«Use bilinear interpolation when scaling» (снята по умолчанию).
Поддерживается отсечение заданного количества пикселов исходного изображения
по отдельности для каждой из сторон,
благодаря чему можно полнее использовать площадь экрана:
«Settings» →
«NES / SNES / Game Boy / PC Engine / SMS» →
«Video» → «Overscan».
В Windows-сборке от в SNES-играх
изображение выводится в двойном разрешении с шириной 512 пикселов,
даже если игра работает в обычном разрешении с шириной 256 пикселов,
поэтому экран используется менее полно, чем мог бы при использовании реального разрешения игры.
jgenesis —
эмулятор SNES (Super Nintendo), Sega Mega Drive (Genesis),
Sega CD, Sega Master System, Sega Game Gear —
поддерживает целочисленное масштабирование:
«Video» → «General» → «Force integer height scaling».
Для отключения размытия параметр «Filter mode» следует
переключить в значение «Nearest neighbor» вместо
выбранного по умолчанию «Linear interpolation».
Прочие эмуляторы
BlastEm —
эмулятор игровой приставки Sega Mega Drive (Genesis) —
поддерживает целочисленное масштабирование.
Включается путём установки параметра scaling в значение integer
вместо значения linear, используемого по умолчанию, в конфигурационном файле
C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Local\blastem\blastem.cfg.
DuckStation —
эмулятор игровой приставки Sony PlayStation (PSX) — поддерживает целочисленное масштабирование:
«Settings» → «Display Settings» →
«Screen Display» → «Integer Upscaling».
Для предотвращения размытия следует параметр
«Settings» → «Enhancement Settings» →
«Rendering Enhancements» → «Texture Filtering»
установить в значение «Nearest-Neighbor»
и удостовериться, что параметр «Internal Resolution Scale»
на той же странице настроек установлен в значение «1x» (по умолчанию).
PCSX2 1.7+ (Qt-версия) —
эмулятор игровой приставки Sony PlayStation 2 —
поддерживает целочисленное масштабирование:
«Settings» → «Graphics» →
«Display» → «Integer Scaling».
Cemu —
эмулятор игровой приставки Wii U для Windows —
начиная с версии 1.15.2 ()
поддерживает алгоритм масштабирования «По соседним» («Nearest Neighbour»):
«Опции» → «Общие настройки» → «Графика» →
«Фильтр масштабирования (растяжение)» → «Метод ближайших соседей»
(«Options» → «General settings» → «Graphics» →
«Upscale filter» → «Nearest Neighbor»).
Произвольное разрешение для некоторых игр можно установить с помощью
графических пакетов:
«Опции» → «Графические пакеты»
(«Options» → «Graphic packs»).
WinUAE — эмулятор Amiga —
поддерживает целочисленное масштабирование:
«Settings» → «Host» → «Filter» →
выпадающий список в 3-м сверху ряду,
3-й слева колонке →
«Integer scaling» или «Auto Integer scaling».
ScummVM —
современная программная среда для запуска множества старых игр типа
«Broken Sword» — начиная с версии
2.1 ()
поддерживает целочисленное масштабирование:
«Настройки» → «Графика» → «Режим р…гивания» →
«Масштабирование пиксель-в-пиксель»
(«Options» → «GFX» →
«Stretch mode» → «Pixel-perfect scaling».
Отключить размытие можно снятием галки
«Фильтрование графики»
(«Filter graphics»).
В оконном режиме доступна также возможность вывода
с фиксированными целочисленными масштабами 2x (200%) и 3x (300%)
(«Настройки» → «Графика» → «Граф. режим»)
(«Options» → «GFX» → «Graphics mode»),
но глобальная настройка применяется только к играм с разрешением не более 320×240,
а для игр с более высоким разрешением требуется задавать эту настройку
с помощью индивидуального для игры набора настроек:
«Настройки игры» → «Графика» →
«Перекрыть глобальные установки графики»
(«Edit Game» → «Graphics» →
«Override global graphic settings»).
Программа формально несовместима с HiDPI (не является DPI-aware),
поэтому для гарантии отсутствия размытия и для максимального использования площади экрана
рекомендуется отключить DPI-виртуализацию в свойствах её исполняемого файла.
В графическом режиме «OpenGL» программа может переключать
4K-монитор в разрешение Full HD,
что может приводить к размытию из-за
масштабирования средствами монитора или видеокарты.
Помогает переключение программы в другой графический режим — например, «3x».
ScummVM также доступна как ядро libretro,
которое можно использовать с таким оболочками, как RetroArch,
в которые встроены собственные реализации целочисленного масштабирования.
Модификации и FPGA-реализации старых игровых систем и компьютеров
PS1Digital (160 $) —
набор/плата для модификации игровой приставки Sony PlayStation (PSX) —
поддерживает целочисленное масштабирование
с выводом по HDMI в разрешении от 480p до 1080p (Full HD).
HDMI-порт заменяет собой порт «Serial IO».
Поддерживается установка на модели SCPH-550x и SCPH-700x любых регионов
на основе материнских плат PU-18 и PIU-20.
DCDigital (бывш. DCHDMI) (130 $) —
набор/плата для модификации игровой приставки Sega Dreamcast —
поддерживает целочисленное масштабирование
с выводом по HDMI в разрешении от 480p до 1080p (Full HD).
Поддерживается установка на модели VA0 и VA1 любых регионов
со значком в виде цифры 1 или 0 внутри окружности на наклейке.
UltraHDMI —
набор/плата для модификации игровой приставки Nintendo 64 —
поддерживает целочисленное масштабирование
с выводом по HDMI в разрешении от 480p до 1080p (Full HD).
Задержка без обработки изображения составляет менее 100 нс (0,1 мс).
При включённых обработках (scanlines, усечение [crop] и проч.)
средняя задержка составляет 1 кадр (16 мс).
Обзор от RetroRGB.
Super Nt (190 $),
Mega Sg (190 $)
и Nt mini —
основанные на FPGA полуаппаратные аналоги
игровых приставок SNES (Super Nintendo), Sega Mega Drive (Genesis) и NES (Nintendo, Dendy) соответственно —
поддерживают целочисленное масштабирование с возможностью
усечения (cropping) изображения для максимального использования высоты экрана.
Изображение выводится по HDMI в разрешении Full HD (1920×1080, 1080p).
MiSTer —
основанная на FPGA полуаппаратная платформа
для создания функционально-точных копий множества старых игровых систем и компьютеров —
поддерживает целочисленное масштабирование.
Включается параметром
vscale_mode=1
в файле настроек MiSTer.ini.
Изображение выводится по HDMI в разрешении до Full HD (1920×1080, 1080p)
(video_mode=8 в MiSTer.ini),
и до 2048×1536 (video_mode=13) при использовании разгона.
Многие ядра поддерживают целочисленное масштабирование одновременно по вертикали
и по горизонтали
для предотвращения дрожания пикселов (pixel shimmering).
Многие ядра при выводе в разрешении Full HD поддерживают
усечение (crop)
для более полного использования площади экрана.
В основе MiSTer лежит плата для разработчиков
Terasic DE10-Nano (170 $),
использующая FPGA-чип Intel/Altera Cyclone V.
Виртуализация ОС
DOSBox-X —
улучшенная неофициальная версия эмулятора DOSBox для запуска DOS-программ —
поддерживает полное целочисленное масштабирование —
с целочисленными масштабами одновременно по вертикали и горизонтали:
«Video» → «Output» → «OpenGL Perfect».
В отличие от обычной версии DOSBox,
в DOSBox-X реализовано
полноценное масштабирование без использования фильтров,
благодаря чему поддерживается целочисленное масштабирование в полноэкранном режиме,
и масштабный коэффициент вычисляется автоматически
и не ограничен малыми значениями (3x в официальных сборках DOSBox).
Windows-версия DOSBox-X не объявлена
как HiDPI-совместимая (DPI-aware) программа,
поэтому для более полного использования площади экрана и более точного соотношения сторон
следует вручную переопределить
DPI-режим на значение «Приложение» через свойства
исполняемого файла перед запуском DOSBox-X.
DOSBox ECE —
улучшенная неофициальная версия эмулятора DOSBox для запуска DOS-программ —
поддерживает целочисленное масштабирование без размытия.
Начиная с версии r4318 () функция недоступна,
последняя версия с поддержкой целочисленного масштабирования —
r4301 ().
В отличие от обычной версии DOSBox,
в ECE-версии реализовано
полноценное масштабирование без использования фильтров,
благодаря чему поддерживается целочисленное масштабирование в полноэкранном режиме,
и масштабный коэффициент вычисляется автоматически
и не ограничен малыми значениями (3x в официальных сборках DOSBox).
В качестве значения параметра output в разделе [sdl]
конфигурационного файла (*.conf) для игры следует использовать
значение openglpp или surfacepp либо не задавать этот параметр вовсе.
Для отключения коррекции соотношения сторон
(например, растяжения 320×200 до высоты 240, соответствующей соотношению 4:3)
и включения строго квадратных пикселов служит параметр aspect=false
в разделе [render] конфигурационного файла.
Включить вертикальную синхронизацию (V-Sync)
при output=openglpp можно параметром glfullvsync=true в разделе [sdl].
Дополнительную информацию см. в readme-файле
pixel-perfect-патча,
включённом также и в дистрибутив DOSBox ECE
(README for pixel-perfect patch.txt).
Пример конфигурационного файла DOSBox ECE для игры «Epic Pinball»
(щёлкните, чтобы развернуть)
[autoexec]
mount C "."
C:
cd \EPICPIN
PINBALL.EXE
exit
DOSBox Staging —
другой вариант DOSBox —
тоже поддерживает
целочисленное масштабирование
без размытия на основе реализации от автора патча,
который использовался в DOSBox ECE.
По сравнению с DOSBox ECE быстродействие DOSBox Staging несколько ниже.
В настоящее время функция
удалена,
последняя версия с поддержкой целочисленного масштабирования по обеим осям —
0.80.1
().
Параметр output в разделе [sdl]
конфигурационного файла (*.conf)
для игры следует установить в значение openglpp или texturepp.
Параметры scaler и glshader
в разделе [render] следует установить в значение none.
Пример конфигурационного файла DOSBox Staging для игры «Epic Pinball»
(щёлкните, чтобы развернуть)
[sdl]
fullscreen=true
output=openglpp
[render]
scaler=none
glshader=none
[cpu]
cycles=4000
[autoexec]
mount C "."
C:
cd \EPICPIN
PINBALL.EXE
exit
Для версий DOSBox с поддержкой шейдеров
(shaders) существуют шейдеры
pixel_perfect.glsl
и pixel_perfect-scanlines.glsl
для полного целочисленного масштабирования —
одновременно по вертикали и горизонтали,
реализующие авторский алгоритм автора статьи.
VirtualBox —
программная среда виртуализации — поддерживает масштабирование экрана
виртуальной машины без размытия в диапазоне 100—300%:
«Машина» → «Настроить» → «Дисплей» →
«Экран» → «Коэффициент масштабирования»
(«Machine» → «Settings» → «Display» →
«Screen» → «Scale Factor»).
Пользовательские разрешения
В играх и эмуляторах, не поддерживающих целочисленное масштабирование,
в некоторых случаях можно использовать для этой цели пользовательские разрешения
(custom resolutions) в сочетании с выводом по центру экрана средствами видеокарты.
Необходимые условия
Игра должна иметь фиксированное разрешение, не изменяющееся во время работы уже запущенной игры.
Разрешение игры должно быть заранее известно.
Игра/эмулятор должен поддерживать:
масштабирование без размытия по алгоритму «По соседним» («Ближайший сосед», «Nearest Neighbour»);
растяжение изображения на весь экран по обеим осям без сохранения пропорций и без чёрных полос вокруг.
Для разрешений, не требующих коррекции соотношения сторон, возможность не сохранять пропорции необязательна.
Как пользоваться
Вычислить размеры отмасштабированного изображения конкретной игры или эмулятора
при целочисленных масштабных коэффициентах исходя из разрешения конкретного экрана
(монитора или телевизора) (см. алгоритм).
В панели управления видеокартой:
создать пользовательское разрешение, равное вычисленным размерам отмасштабированного изображения;
выбрать:
масштабирование средствами видеокарты (ГП, GPU);
режим вывода по центру без масштабирования.
В игре или эмуляторе выбрать режим вывода с растяжением (stretch) изображения
на весь экран как по вертикали, так и по горизонтали,
без сохранения пропорций и без чёрных полос вокруг отмасштабированного изображения.
Переключить системное разрешение экрана в соответствующее пользовательское разрешение.
Играть в полноэкранном режиме.
Пример
Например, если разрешение игры — 320×240, а разрешение экрана — 1920×1080 (Full HD),
то максимальный целочисленный масштабный коэффициент равен 4,
а нужное пользовательское разрешение — 1280×960:
1080 / 240 = 4,5 → 4
320 * 4 = 1280
240 * 4 = 960
Масштабирование, встроенное в игры
В некоторые современные игры масштабирование без размытия встроено.
В основном это характерно для игр на основе пиксельной графики
(pixel art), но встречается и в некоторых трёхмерных играх.
Owlboy ()
(приключенческий платформер на основе пиксельной графики) —
масштабирование без размытия встроено в игру.
Resident Evil 3
() — GOG-версия игры имеет встроенное целочисленное масштабирование.
QuakeSpasm
(Quake на более современном движке) — начиная с версии
0.93.0 ()
в игру встроена возможность целочисленного масштабирования
с коэффициентами до 400% с помощью конфигурационного параметра r_scale.
Для использования этой возможности следует в подпапку ID1 папки игры
поместить текстовый файл autoexec.cfg, содержащий параметр вида r_scale 4,
где 4 указывает на масштабный коэффициент.
Например, при выбранном в игре разрешении 3840×2160 игра отрисовывается в разрешении 960×540
и масштабируется до 3840×2160 без размытия путём отображения каждого логического пиксела
как квадратной группы из 16-ти (4×4) физических пикселов одинакового цвета.
Dusk ()
(3D-шутер в ретростиле) — в игру встроена возможность
целочисленного масштабирования с коэффициентами до 800%.
Для этого служит параметр «Pixelization» → «1x-8x»
в разделе «Advanced Display Settings» настроек игры.
По некоторым данным,
по умолчанию параметр установлен в значение «2x»,
что, например, при физическом разрешении 4K соответствует логическому разрешению Full HD.
Просмотр изображений и видео
XnView —
программа для просмотра изображений — поддерживает масштабирование без размытия.
Для этого следует снять галку
«Инструменты» → «Опции» → «Вид» →
«Высокое качество при масштабировании» → «При увеличении»
(«Tools» → «Options» → «View» →
«High quality zoom» → «Enlarge»).
Ограничение: настройка применяется ко всем просматриваемым изображениям
вне зависимости от кратности их размеров размеру окна XnView и использования полноэкранного режима.
Ограничение (безотносительно масштабирования): не поддерживается просмотр изображений,
в именах файлов которых есть символы, отличные от буквенно-цифровых латинских
и соответствующих основному языку системы.
MPC-HC —
плеер для просмотра видео — поддерживает масштабирование без размытия.
Для этого следует установить в настройках параметр
«Вид» → «Настройки» → «Воспроизведение» →
«Вывод» → «Интерполяция» → «Ближайший сосед»
(«View» → «Options» → «Playback» →
«Output» → «Resizer» → «Nearest neighbor»).
Настройка доступна при использовании движков отрисовки
«Video Mixing Renderer 9 (renderless)»,
«Расширенный рендер видео (EVR custom presenter)»
(«Enhanced Video Renderer (custom presenter)»)
и «Sync Renderer».
Движок отрисовки можно выбрать с помощью выпадающего списка «Вывод DirectShow»
(«DirectShow Video») на той же странице настроек.
Ограничение: настройка применяется ко всем видео вне зависимости
от кратности размеров видеокадра размеру окна плеера и использования полноэкранного режима.
После выпуска версии 1.7.13 () разработка оригинального MPC-HC прекращена,
разработку плеера теперь продолжает clsid2
на GitHub.
Встроенные средства Windows
Для оконных программ — экранная лупа Windows (Windows Magnifier).
Недостатки:
неудобный интерфейс — трудно точно совместить масштабируемую область с границами подлежащего масштабированию объекта;
при некратных размере подлежащего масштабированию объекта и разрешении монитора
область вокруг объекта не заполняется однотонной заливкой,
поэтому помимо подлежащего масштабированию объекта видны посторонние объекты;
в оконном режиме — задержка (lag) и подёргивание;
в режиме вывода на полный экран —
подёргивание как минимум в некоторых играх (например, WRC 6)
(возможно, только в Windows 7)
и возможная задержка (lag).
Для оконных Windows-программ, несовместимых с HiDPI —
использование Windows 10, где, в отличие от Windows 7,
старые программы при целочисленных системных масштабах
автоматически
масштабируются без размытия.
В Windows 10 для игр с поддержкой псевдополноэкранного режима
«Borderless» возможно масштабирование без размытия с масштабом,
равным системному масштабу.
«Borderless» — особый вариант оконного режима,
который отличается от обычного оконного режима тем,
что использует окно без рамок и заголовочной панели,
и вся площадь окна представляет собой область отрисовки игры.
В зависимости от конкретной игры или её настроек
такое окно может занимать весь экран без возможности
задать разрешение в настройках игры,
либо иметь фиксированный размер, равный внутриигровому разрешению.
Для масштабирования с помощью Borderless-режима:
игра должна быть запущена в режиме DPI-виртуализации (DPI scaling) —
встроенном в Windows режиме масштабирования устаревших программ,
не рассчитанных на экраны с высокой плотностью точек.
Принудительно включить DPI-виртуализацию для игры, даже если она объявлена
как совместимая с HiDPI (DPI-aware),
в Windows 10 можно, переопределив DPI-режим в значение «Система»
через свойства исполняемого файла (*.exe) игры,
подробнее см. ниже, в следующем разделе статьи;
в настройках игры должен быть выбран режим «Borderless».
В разных играх этот режим может называться по-разному, например:
Borderless,
Borderless Full Screen,
Borderless Windowed,
Windowed Fullscreen,
Fullscreen Windowed.
В некоторых играх режим, называемый полноэкранным («Full Screen»),
на самом деле представляет собой режим «Borderless»
вместо настоящего (exclusive) полноэкранного режима;
соотношение системного разрешения и разрешения игры
должно быть равно системному масштабу Windows.
Например, если для монитора разрешением 3840×2160 (4K) в Windows 10
задан масштаб 200% (коэффициент — 2),
разрешение в настройках игры должно быть 1920×1080 (Full HD):
3840 / 1920 = 2
2160 / 1080 = 2
DPI-режим программ в Windows
К программам и играм, не объявленным как совместимые с HiDPI
(DPI-aware),
Windows автоматически применяет DPI-виртуализацию (DPI scaling).
При DPI-виртуализации интерфейс программы увеличивается
как растровое (точечное) изображение с коэффициентом,
соответствующим системному масштабу.
Например, при системном масштабе 200% такие программы
увеличиваются вдвое по горизонтали и вдвое по вертикали.
Чтобы предотвратить размытие или пикселизацию из-за DPI-виртуализации в играх,
важно убедиться, что игра работает в HiDPI-совместимом (DPI-aware) режиме.
Определить это легко: размер окна игры в физических пикселах (точках)
должен соответствовать разрешению, выбранному в настройках игры.
Например, окно игры, работающей в разрешении Full HD, при системном масштабе 200%
на 4K-мониторе должно занимать не весь экран,
а примерно четверть экрана (половину по горизонтали и половину по вертикали).
Для игр, формально несовместимых с HiDPI, требуется отключить DPI-виртуализацию
(DPI scaling) для исполняемого файла игры,
чтобы окно игры имело правильный размер и было свободно от размытия,
возможного вследствие масштабирования,
которое Windows автоматически применяет к HiDPI-несовместимым приложениям.
Отключить DPI-виртуализацию для отдельно взятой игры можно в свойствах
(пункт «Свойства» контекстного меню файла) её исполняемого файла (*.exe):
Windows 10
Пункт «Свойства» → вкладка «Совместимость» → секция «Параметры» →
кнопка «Изменить параметры высокого DPI» →
секция «Переопределение масштабирования с высоким разрешением» →
галка «Переопределите режим масштабирования высокого разрешения.
Масштабирование выполняется» → пункт «Приложение» выпадающего списка.
Windows 10 (устаревшие версии)
Пункт «Свойства» → вкладка «Совместимость» → секция «Параметры» →
галка «Переопределите режим масштабирования высокого разрешения.
Масштабирование выполняется» → пункт «Приложение» выпадающего списка.
Windows 7
Пункт «Свойства» → вкладка «Совместимость» → секция «Параметры» →
галка «Отключить масштабирование изображения при высоком разрешении экрана».
Чтобы, наоборот, включить DPI-виртуализацию для отдельной игры в Windows 10
для масштабирования в borderless-режиме,
вместо пункта «Приложение» следует выбрать пункт «Система».
Для некоторых игр, не объявленных как DPI-aware,
Windows отключает DPI-виртуализацию автоматически.
Обычно это происходит при первом переключении из полноэкранного режима в оконный.
Телевизоры (ТВ)
По некоторым данным
(1,
2,
3,
4),
размытие отсутствует в режиме «Graphics»
в некоторых моделях 4K-телевизоров Sony —
например, 65″ модели серии X900E, 55″ модели серии X900H
и 42″ OLED-телевизор серии A90K (2022).
Режим включается в настройках телевизора:
«Settings» (кнопка ⚙️ на пульте) → «Display & Sound» →
«Picture» → «Basic» → «Picture mode» → «Graphics».
Но есть информация,
что когда включена переменная частота обновления (VRR),
жёстко устаналивается режим изображения «Game»,
в котором в разрешениях, отличных от физического, есть размытие.
Есть информация,
что некоторые 4K-телевизорыPanasonic
поддерживают возможность вывода Full-HD-сигнала без размытия.
Например, в модели TX-55CX802B это реализуется параметром
«1080p Pixel by 4 pixels»
в меню «Picture» → «Option Settings».
Судя по всему, эта возможность касается исключительно разрешения Full HD (1920×1080)
и не работает при иных разрешениях входного видеосигнала (например, 1280×720).
При этом аналогичная модель меньшей диагонали — TX-50CX802 —
судя по официальной инструкции, такой функции лишена.
Функция также доступна в моделях
TH-65AX900A,
TX-50AX802
и TX-58DX750.
Согласно HDTVTest,
в 65-дюймовом OLED-телевизоре TX-65JZ2000B серии JZ2000
эта функция отсутствует.
Есть информация (1,
2),
что размытие отсутствует в разрешениях 1920×1080 (Full HD) и ниже во входном режиме «Computer»
в некоторых моделях 4K-телевизоров TCL на основе платформы Roku TV
при использовании прошивки (firmware) от —
например, 65R625.
Но как минимум в разрешении 1920×1080 есть некоторое
сглаживание на границах однотонных областей.
Игровые автоматы
iiRcade —
домашние игровые автоматы — поддерживают
целочисленное масштабирование («pixel perfect filtering»)
начиная с версии 9.008 внутреннего программного обеспечения. Режим включён по умолчанию.
Arcade1Up —
домашние игровые автоматы — как минимум
Killer Instinct,
поддерживают
целочисленное масштабирование.
Включается параметром «Integer scaling» → «On»
в настройках по отдельности для каждой игры
(Killer Instinct 1/2, BattleToads и проч.).
Параметр «Smoothing» рядом с параметром «Integer scaling»,
вероятно, следует установить в значение «Off» для предотвращения размытия.
Прочее
SmartUpscale —
расширение для браузеров Firefox и Chrome для отключения
неоправданного размытия изображений на веб-страницах.
Есть сведения,
что размытие отсутствует при масштабировании с целочисленными коэффициентами
средствами официального видеодрайвера Intel для операционной системы Linux.
gamescope —
оконный менеджер-композитор (compositing window manager)
для основанной на Debian Linux операционной системы SteamOS —
поддерживает целочисленное масштабирование при использовании видеокарт AMD.
Включается с помощью параметра командной строки -n
или сочетанием клавиш Super+N.
Raspbian —
операционная система для мини-компьютеров Raspberry Pi — начиная
с
поддерживает масштабирование без размытия с коэффициентом 200% с помощью параметра настроек «Pixel Doubling»
на вкладке «System» в приложении «Raspberry Pi Configuration».
Начиная с версии Raspbian от
параметр «Pixel Doubling» и другие параметры экрана перемещены на новую вкладку «Display».
При запуске игр Nintendo DS на карманных игровых системах
Nintendo 3DS(XL) целочисленное масштабирование можно
включить
удерживанием кнопки Start или Select во время запуска игры.
Zisworks ZWS —
наборы для модификации 4K-мониторов и телевизоров —
поддерживают целочисленное масштабирование с масштабом до 400%.
Заявляется близкая к нулю задержка 30 мкс.
Доступны наборы:
X28 Rev2 (505 $) для 28″ монитора Samsung U28H750
(2017, TN), доступен монитор с предустановленным набором (1160 $);
X39 Rev2 (525 $) для 39″ телевизора Seiki SE39UY04 (2017);
X40 Rev2 (425 $) для 40″ монитора Philips BDM4065 (2014);
X39 Rev2 (490 $) для других панелей 39″, 40″ и 42″.
Потенциальные решения
Масштабирование средствами монитора.
Преимущество по сравнению с масштабированием средствами видеодрайвера —
экономия пропускной способности видеоинтерфейса
и потенциальное снижение электромагнитного излучения от сигнального кабеля.
Например, 65-дюймовый4K-телевизор Samsung Q60 (QN65Q60RAFXZA)
поддерживает частоту обновления 120 Гц при разрешении Full HD,
но лишь 60 Гц при разрешении 4K,
поэтому при масштабировании видеокартой частота 120 Гц
недоступна.
Такое же ограничение имеет телевизор
Samsung UN55NU8000.
Кроме того, масштабирование видеокартой невозможно, если источник сигнала —
не компьютер, а игровая приставка или аппаратный видеоплеер.
Устройство для масштабирования, подключаемое
в разрыв между источником видеосигнала и дисплеем.
Преимущество по сравнению с масштабированием средствами видеодрайвера —
возможность использования с любым источником сигнала
(например, игровой приставкой или видеоплеером), а не только компьютером.
Потенциальные недостатки:
может вносить дополнительную задержку (lag);
может пострадать совместимость с технологией
HDCP,
необходимой для воспроизведения защищённого контента.
Решаемо с помощью переключателя для временного включения режима прямой передачи видеосигнала без изменений.
Переключатель может быть физическим или управляемым с компьютера по USB.
Существуют похожие устройства:
mCable —
HDMI-кабель со встроенной микросхемой для повышения качества входного сигнала
в реальном времени с применением шумоподавления, сглаживания и повышения резкости
с заявленной задержкой (лагом) менее 1 мс;
DCDigital
для вывода видеосигнала игровой приставки Sega Dreamcast по HDMI
в формате Full HD с поддержкой целочисленного масштабирования
с двукратным увеличением изображения (640×480 → 1280×960);
UltraHDMI
для вывода видеосигнала игровой приставки Nintendo 64 по HDMI
без потерь качества (обзор).
Возможно, подобное устройство можно реализовать на основе
программируемых вентильных матриц FPGA:
1,
2.
Есть информация,
что для масштабирования до разрешения 4K
необходима FPGA-матрица с тактовой частотой не менее 600 МГц.
Что делать
Обычные пользователи
Пожалуйтесь на размытие при масштабировании
в техническую поддержку производителя вашего монитора или телевизора.
Спрашивайте о поддержке целочисленного масштабирования
в комментариях к обзорам мониторов и телевизоров
в средствах массовой информации в интернете.
Расскажите о проблеме размытия как можно большему количеству людей,
указав ссылки на петицию и эту статью.
Разработчики игр
Встраивайте целочисленное масштабирование в разрабатываемые вами игры.
В трёхмерных (3D-) играх это можно реализовать с помощью
рендеринга в текстуру
(Render To Texture) с последующим масштабированием полученной текстуры
аппаратными средствами видеокарты с использованием алгоритма «По соседним»
(«Nearest Neighbour»).
В игровом движке Unreal Engine
доступна встроенная возможность масштабирования без размытия
с помощью консольной переменной
r.Upscale.Quality
со значением 0.
Целочисленное масштабирование возможно в игровом движке
Godot.
См. демонстрационный
проект.
Лоббируйте встраивание целочисленного масштабирования
в популярные игровые движки
Unity,
CryEngine и проч.,
чтобы автоматически сделать эту функцию доступной в будущих играх на их основе.
Алгоритм
Авторский алгоритм целочисленного масштабирования.
Алгоритм — последовательность действий для достижения нужного результата.
Если вас интересует готовая реализация, см. библиотеку
IntegerScaling (C++/Rust/JS/PHP).
Кратко
Без коррекции соотношения сторон
Делим ширину и высоту экрана на ширину и высоту изображения соответственно.
Отбрасываем дробные части.
Меньший из результатов — искомый целочисленный масштаб.
В виде математической формулы это можно представить так:
где SW, SH, W, H —
ширина экрана, высота экрана, ширина изображения и высота изображения соответственно.
С коррекцией соотношения сторон
Делим ширину и высоту экрана на ширину и высоту изображения соответственно.
Отбрасываем дробные части.
Это максимальные целочисленные масштабы по горизонтали и вертикали соответственно.
Умножаем их на ширину и высоту изображения соответственно, получаем размеры области, куда будет вписано отмасштабированное изображение.
Если соотношение сторон области равно целевому, искомые целочисленные масштабы равны максимальным.
В зависимости от того, меньше или больше соотношение сторон области по сравнению с целевым, принимаем искомый целочисленный масштаб по горизонтали или вертикали равным максимальному по этой оси.
Масштаб по второй оси приблизительно вычисляем исходя из масштаба по первой оси и целевого соотношения сторон.
Результат округляем вверх или вниз исходя из минимизации погрешности соотношения сторон.
Подробно
Делим ширину SW и высоту SH экрана в физических пикселах соответственно на ширину W и высоту H подлежащего масштабированию изображения.
Отбрасываем дробные части у полученных соотношений, получаем максимальные целочисленные коэффициенты MRX по горизонтали и MRY по вертикали соответственно.
Если коррекция соотношения сторон изображения не требуется (пикселы квадратные, масштабные коэффициенты по горизонтали и вертикали одинаковы):
Целочисленный масштабный коэффициент R равен меньшему из соотношений MRX и MRY.
Отображаем каждый пиксел исходного изображения как квадратную группу из R×R физических пикселов одинакового цвета, равного цвету пиксела исходного изображения.
Вычисляем ширину UW и высоту UH отмасштабированного изображения умножением соответственно ширины W и высоты H исходного изображения на масштабный коэффициент R.
Если коррекция соотношения сторон изображения требуется (пикселы потенциально прямоугольные, масштабные коэффициенты по горизонтали и вертикали потенциально разные):
Умножаем ширину W и высоту H изображения на MRX и MRY соответственно, получаем ширину MW и высоту MH области, в которую будет вписано отмасштабированное изображение.
Делим ширину MW этой области на её высоту MH, получаем соотношение сторон MA этой области.
Если соотношение MAравно целевому соотношению сторон TA:
Масштабные коэффициенты RX по горизонтали и RY по вертикали принимаем равными MRX и MRY соответственно.
Переходим к центрированию отмасштабированного изображения (шаг 4.1).
Если соотношение MAменьше целевого соотношения сторон TA:
Масштабный коэффициент RX по горизонтали принимаем равным MRX.
Делим максимальную ширину MW на целевое соотношение сторон TA, получаем приблизительную отмасштабированную высоту AUH.
Если соотношение MAбольше целевого соотношения сторон TA:
Масштабный коэффициент RY по вертикали принимаем равным MRY.
Умножаем максимальную высоту MH на целевое соотношение сторон TA, получаем приблизительную отмасштабированную ширину AUW.
Приблизительный отмасштабированный размер AUW или AUH делим на исходный размер изображения W или H по этой оси.
Округляем результат в направлении, при котором погрешность соотношения сторон минимальна.
Если погрешности в обоих направлениях одинаковы или близки, округляем результат в направлении, при котором соотношение сторон ближе к исходному
(масштабы по разным осям ближе друг к другу, пиксел по форме ближе к квадрату).
Полученное целое число — масштабный коэффициент по этой оси — RX (по горизонтали) или RY (по вертикали).
Вычисляем ширину UW и высоту UH отмасштабированного изображения умножением ширины W и высоты H исходного изображения на масштабные коэффициенты RX по горизонтали и RY по вертикали соответственно.
Выравниваем отмасштабированное изображение по центру экрана:
Из ширины SW и высоты SH экрана вычитаем соответственно ширину UW и высоту UH отмасштабированного изображения, результаты делим на 2, отрасываем дробную часть, полученные числа обозначаем X и Y соответственно.
Отмасштабированное изображение выводим на расстоянии X по горизонтали и Y по вертикали от верхнего-левого угла экрана.
Оставшееся экранное пространство вокруг отмасштабированного изображения заполняем чёрным цветом.
Образец реализации
Авторская библиотека IntegerScaling представляет собой образец реализации алгоритма на нескольких языках программирования: C++, Rust, JavaScript, PHP.
Библиотека используется, например, в SNES-эмуляторе bsnes-mt.
Пример без коррекции соотношения сторон
Требуется вывести изображение 640×480 (VGA) на экране 1920×1080 (Full HD):
1920 / 640 = 3
1080 / 480 = 2,25
2,25 меньше, чем 3.
Отбрасываем дробную часть 0,25, получаем 2.
Значит, выводим каждый пиксел исходного изображения как группу 2×2 физических пиксела.
Ширина и высота отмасштабированного изображения — 1280 (640 * 2) и 960 (480 * 2) соответственно.
Значит, для центрирования на экране выводим отмасштабированное изображение на расстоянии 320 ((1920 - 1280) / 2) пикселов по горизонтали и 60 ((1080 - 960) / 2) пикселов по вертикали от верхнего-левого угла экрана.
Пример с коррекцией соотношения сторон
Требуется вывести изображение 400×254 с целевым соотношением сторон 4:3 на экране 3840×2160 (4K):
3840 / 400 = 9,6
2160 / 254 ≈ 8,5
Отбрасываем дробную часть у полученных соотношений, получаем максимальные целочисленные коэффициенты 9 по горизонтали и 8 по вертикали соответственно.
Умножаем ширину 400 и высоту 254 изображения на 9 и 8 соответственно, получаем ширину 3600 и высоту 2032 области, в которую будет вписано отмасштабированное изображение.
Соотношение сторон области 1,77 больше целевого соотношения сторон 4:3 (≈ 1,333). Поэтому:
масштабный коэффициент по вертикали принимаем равным 8;
умножаем максимальную высоту 2032 на целевое соотношение сторон 4:3 (≈ 1,333), получаем приблизительную отмасштабированную ширину 2709,333.
Делим 2709,333 на исходную ширину 400 изображения, получаем 6,773, округляем, получаем масштабный коэффициент 7 по горизонтали.
Таким образом, размер пиксела — 7×8.
Ширина и высота отмасштабированного изображения — 2800 (400 * 7) и 2032 (254 * 8) соответственно.
Фактическое соотношение сторон — около 1,378 (2800 / 2032), погрешность относительно целевого соотношения 4:3 (≈ 1,333) — около 3,35%.
Для центрирования на экране выводим отмасштабированное изображение на расстоянии 520 ((3840 - 2800) / 2) пикселов по горизонтали и 64 ((2160 - 2032) / 2) пиксела по вертикали от верхнего-левого угла экрана.
Эталонная отрисовка
Изображения ниже показывают, как должны выглядеть результаты целочисленного масштабирования без коррекции соотношения сторон.
При правильной реализации целочисленного масштабирования результаты масштабирования приведённых исходных изображений должны быть идентичны приведённым образцам отмасштабированных изображений.
Во избежание влияния искажений, вносимых веб-браузером, рекомендуется сохранить изображения на компьютер и просматривать их сторонней самостоятельной программой в масштабе 100%.
Вы также можете скачать все изображения в виде единого архива (55 КБ).
Простейший интерфейс для управления масштабированием без размытия может быть представлен единственной галкой (флажком) «Предотвращать размытие при масштабировании», включающей целочисленное масштабирование без размытия.
Более гибкий вариант — раздельное управление размытием и целочисленностью масштаба.
Тогда нужны две настройки:
для отключения размытия вне зависимости от целочисленности или дробности масштабного коэффициента — в результате просто используется алгоритм «По соседним» вместо билинейной интерполяции;
для использования строго целочисленных масштабных коэффициентов с целью предотвращения искажений изображения в режиме масштабирования без размытия.
Целочисленность имеет смысл в основном в сочетании с отсутствием размытия, поэтому второй параметр можно делать доступным только при выборе первого.
Но для большей гибкости или упрощения технической реализации интерфейса они могут быть независимыми.
Каждая из двух настроек может быть представлена либо галкой, либо списком из двух взаимоисключающих вариантов, один из которых выбран по умолчанию.
Галка + выбор переменности размера пиксела
Потенциально наиболее интуитивно-понятный пользовательский интерфейс мог бы содержать галку (флажок) «Предотвращать размытие при масштабировании».
Включение галки включало бы алгоритм масштабирования «По соседним» и одновременно делало бы доступной дополнительную настройку «Размер пиксела» с двумя вариантами на выбор:
«Одинаковый»
(без искажений изображения, но возможны чёрные полосы вокруг изображения);
«Переменный»
(максимальное использование площади экрана ценой некоторых искажений изображения).
Текст в скобках можно было бы отображать уменьшенным шрифтом или динамически отображать как подсказку, появляющуюся при наведении указателя мыши на соответствующий вариант.
Раздельные настройки для фильтрации и целочисленного масштаба
Пользовательский интерфейс мог бы быть аналогичным интерфейсу 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.
Разве без размытия пикселы не будут заметны?
Это не всегда так, а когда так — не обязательно плохо.
Заметность пикселов зависит от сочетания
физического разрешения экрана, разрешения исходного изображения,
расстояния до экрана и качества сглаживания
(antialiasing) в игре.
Например, в разрешении Full HD на 4K-мониторе диагональю 24″ на типичном расстоянии 50-60 см от экрана при качественном сглаживании в игре логические пикселы почти неразличимы, и размытие лишь бессмысленно снижает резкость.
При низкокачественном или выключенном сглаживании пикселы заметны вне зависимости от того, есть ли размытие при масштабировании.
Автор этих строк регулярно играет в игры в разрешении Full HD с помощью IntegerScaler и смотрит Full-HD-видео с помощью MPC-HC на 24″ 4K-монитореDell P2415Q.
Теперь представьте себе целочисленное масштабирование QHD или 4K в 8K или 8K в 16K в тех же условиях.
Плотность точек, соответствующая 8K при диагонали 27″, имеет место уже сейчас в 13,3″ 4K-ноутбуках.
Уместность заметной пикселизации зависит от типа исходного изображения: например, для пиксельной графики (pixel art) пикселизация — задуманный эффект, и размытие искажает авторский замысел.
Но мне нравится размытие!
Без проблем. Целочисленное масштабирование задумано как включаемо-выключаемая (опциональная) функция.
Если вам нравится размытие, вы сможете просто не включать целочисленное масштабирование в настройках видеодрайвера или дисплея.
Зачем 4K-монитор, если использовать всё равно в Full HD?
У компьютеров много сценариев использования, во многих из них разрешение 4K даёт преимущество, а быстродействие не является проблемой:
комфорт при любой работе с текстом (просмотр веб-страниц, текстовые редакторы, программирование, веб-разработка), схемами, чертежами, графиками на 4K-мониторе несоизмеримо выше, чем на FHD-мониторе, благодаря увеличенной детализации, невидимой межпиксельной сетке и значительно сниженному «мельтешению», связанному с попеременным мерцанием субпикселов из-заинверсии кристаллов, характерной для ЖК-технологии;
более высокое физическое разрешение позволяет с более высоким качеством просматривать фотографии;
более высокое физическое разрешение позволяет увеличить глубину (разрядность) цвета без мерцания — путём отображения усреднённых оттенков с помощью соседних пикселов, отображающих слегка разные оттенки (dithering).
Даже если компьютер достаточно быстр для запуска игр в разрешении 4K, не все игры работают в этом разрешении правильно: например, в «Cities XL Platinum» элементы управления становятся слишком мелкими, а в «Bionic Commando Rearmed» не видны элементы головоломок на мини-уровнях «Hack enemy network».
Чем выше физическое разрешение, тем полнее может использоваться экран при целочисленном масштабировании.
Например, при масштабировании 320×240 до Full HD теряется (заполняется чёрным) 1/9 (11%) высоты экрана (1080/240 = 4,5), а на 4K-дисплее коэффициент составляет ровно 9, и изображение занимает всю высоту экрана.
На 8K-дисплеях то же будет применимо к разрешению 640×480; кроме того, можно будет без потерь качества или экранного пространства использовать любое из типичных разрешений: 4K (3840×2160, 2x), QHD (2560×1440, 3x), FHD (1920×1080, 4x), HD (1280×720, 6x).
Выглядит ли FHD на 4K-мониторе при целочисленном масштабировании так же, как на FHD-мониторе?
Да. Более того, игры и видео в разрешении Full HD при целочисленном
масштабировании на 4K-мониторе выглядят даже лучше,
чем на мониторе с физическим разрешением FHD,
в частности не видна межпиксельная сетка,
и почти незаметно мерцание ЖК-дисплеев, связанное
с инверсией кристаллов.
Единственный особый случай — субпиксельное сглаживание текста, которое работает только при физическом разрешении экрана,
т. к. основано на определённом взаимном расположении субпикселов:
Может ли это улучшить качество 1440p на 4K-мониторе?
Нет. Целочисленное масштабирование — не волшебная палочка, повышающая качество любого изображения.
Оно основано на простом математическом принципе, согласно которому при увеличении изображения в целое количество раз можно просто повторить исходный пиксел без необходимости подмешивания цветов соседних пикселов и тем самым избежать размытия.
Для использования целочисленного масштабирования на разрешении QHD (2560×1440) нужен экран разрешением 5K (5120×2880) или 8K (7680×4320):
При использовании экрана 4K (3840×2160) максимальным логическим разрешением, при котором возможно целочисленное масштабирование, является Full HD (1920×1080):
3840 / 1920 = 2160 / 1080 = 2,0
При разрешении QHD соотношение физического и логического разрешений составляет 1,5:
3840 / 2560 = 2160 / 1440 = 1,5
Группы размером 1,5×1,5 пиксела физически невозможны.
Максимальный целочисленный масштаб составляет 1,0, что эквивалентно обычному режиму центрирования в масштабе 100% с широкими чёрными полосами вокруг изображения.
То же самое относится к масштабированию HD (1280×720) до Full HD (1920×1080).
Для целочисленного масштабирования 1280×720 требуется дисплей с разрешением как минимум 2560×1440 (масштаб 200%, пикселы 2×2).
Нет. Целочисленное масштабирование лишь предотвращает размытие.
К повышению быстродействия приводит снижение разрешения —
вне зависимости от наличия размытия.
Как обычное масштабирование с размытием,
так и целочисленное масштабирование без размытия
не влияют на быстродействие.
Но благодаря вычислительной простоте целочисленное масштабирование
может снижать задержку (input lag)
по сравнению с алгоритмами масштабирования,
в которых вычисляются усреднённые цвета пикселов.
Что лучше: более низкое разрешение без размытия или более высокое — с размытием?
При более низком разрешении, отмасштабированном без размытия (например, FHD→4K), изображение более резкое.
При более высоком разрешении, отмасштабированном с размытием (например, QHD→4K), изображение более детализированное,
хотя и неизбежно несколько размытое из-за неточного совпадения логических пикселов с физическими.
Целочисленное масштабирование позволяет предотвратить неоправданное размытие,
когда соотношение физического и логического разрешений целочисленное.
Но если быстродействие компьютера достаточно для использования более высокого разрешения
и игра правильно работает при таком разрешении, может иметь смысл использовать более высокое разрешение,
особенно если в игре низкое качество сглаживания.
Разве в OpenGL и DirectX это не встроено?
В программных интерфейсах (API) отрисовки трёхмерной графики типа OpenGL (режим GL_NEAREST) и DirectX (D3DTEXF_POINT в Direct3D 9) алгоритм «Nearest Neighbour» действительно доступен, но предназначен для масштабирования текстур.
Хотя разработчики отдельно взятой игры могут косвенно использовать эту возможность для целочисленного масштабирования в конкретной игре, масштабирование текстур не имеет прямого отношения к универсальному полноэкранному масштабированию, прозрачному для операционной системы и программ.
Это задача дисплея или видеокарты?
Поддержка целочисленного масштабирования видеокартой не противоречит поддержке со стороны дисплея, и наоборот.
Даже если новые дисплеи начнут поддерживать целочисленное масштабирование,
владельцам существующих дисплеев это не поможет,
а масштабирование средствами видеокарты — поможет.
Масштабирование видеокартой недоступно, если источник сигнала —
не компьютер, а, например, игровая приставка
(Nintendo Switch, PlayStation 3/4, MiSTer FPGA, Super Nt, Mega Sg, SNES Mini)
или аппаратный видеоплеер.
При масштабировании видеокартой сигнал всегда выводится в физическом разрешении дисплея,
поэтому имеют место все ограничения по сравнению с масштабированием средствами дисплея,
в том числе потенциально сниженная
частота обновления или сниженная глубина цвета.
Например, при подключении по HDMI 1.x максимальная частота обновления при разрешении 4K составляет 30 Гц,
а при разрешении Full HD — 120 Гц.
При масштабировании видеокартой частота была бы ограничена теми же 30 Гц, как при настоящем разрешении 4K,
даже если логическое разрешение до масштабирования — Full HD.
В случае видеокарт nVidia целочисленное масштабирование доступно только для современных видеокарт
начиная с поколения Turing (2019) (RTX и GTX 16*) и только под Windows 10 и новее.
Реализация целочисленного масштабирования конкретно в видеодрайвере nVidia
имеет ряд серьёзных ограничений,
в том числе несовместимость с расширенным динамическим диапазоном
(HDR), пользовательскими разрешениями (custom resolutions),
цветовой субдискретизацией 4:2:0 и tiled-режимом (используется в 8K-мониторе Dell UP3218K).
AMD прекратила выпуск видеодрайверов для Windows 7,
поэтому целочисленное масштабирование средствами видеокарты,
скорее всего, не будет доступно в Windows 7 с видеокартами, выпущенными после этого.
Собственное масштабирование дисплея работает вне зависимости от модели видеокарты
и версий операционной системы и видеодрайвера.
Есть информация,
что масштабирование видеокартой увеличивает задержку ввода (input lag).
Масштабирование средствами видеокарты не работает во время загрузки компьютера и в BIOS.
Передача большего объёма данных от видеокарты к дисплею занимает больше времени
и может увеличивать задержку ввода (input lag).
Поэтому встроенное масштабирование дисплея предпочтительно.
Разве это не задача операционной системы?
У Windows нет доступа к содержимому экрана в реальном (эксклюзивном, exclusive) полноэкранном режиме.
Для возможности реализации полноэкранного масштабирования средствами Windows нужно было бы принципиально изменить модель видеодрайверов Windows (WDDM), и даже в этом случае не исключалась бы дополнительная задержка (lag) по сравнению с масштабированием собственными средствами видеодрайвера.
Разве DLSS не лучше?
Метод масштабирования DLSS не является универсальным решением:
доступен только на современных видеокартах nVidia;
требует индивидуальной поддержки со стороны каждой конкретной игры.
Подавляющее большинство игр не поддерживают DLSS.
Целочисленное масштабирование работает с любой игрой;
может приводить к непредсказуемым дефектам изображения.
Целочисленное масштабирование увеличивает изображение как есть,
без внесения каких-либо изменений;
основан на машинном обучении и требует больших вычислительных мощностей.
Вычислительная мощность, необходимая для целочисленного масштабирования, близка к нулю;
предназначен для трёхмерных (3D) игр и неприменим к играм других типов —
например, основанным на пиксельной графике (pixel art).
Целочисленное масштабирование применимо к любому изображению;
недоступен, если источник сигнала — не компьютер, а, например, игровая приставка или аппаратный видеоплеер.
Чем это отличается от повышения резкости (sharpening)?
Целочисленное масштабирование без размытия не имеет отношения к повышению контурной резкости (sharpening).
Целочисленное масштабирование предотвращает потери качества, обусловленные размытием, а повышение резкости призвано повысить разборчивость уже размытого изображения.
Чем это отличается от DSR/VSR?
DSR/VSR и целочисленное масштабирование изменяют размер изображения в разных направлениях, разными способами и с разными целями.
При использовании DSR/VSR изображение отрисовывается в разрешении выше физического разрешения дисплея и затем уменьшается (downscaling) до разрешения дисплея.
По сути это просто сглаживание методом SuperSampling (SSAA), которое можно использовать в играх, не имеющих встроенной поддержки сглаживания этого типа.
При целочисленном масштабировании изображение отрисовывается в разрешении ниже физического разрешения дисплея и затем увеличивается (растягивается) (upscaling) без размытия до разрешения, не превышающего разрешение дисплея при максимально возможном целочисленном масштабном коэффициенте.
Единственное, что объединяет DSR/VSR и целочисленное масштабирование — универсальная виртуализация разрешения, прозрачная для операционной системы и программ и совместимая со всеми полноэкранными программами.
Чем это отличается от «Resolution Scaling»?
Функция «Resolution Scaling» (масштабирование разрешения), доступная в некоторых играх, предназначена для управления масштабом встроенными средствами игры.
В отличие от использования одного из предопределённых разрешений, она позволяет более тонко подбирать сочетание детализации и быстродействия: например, если при разрешении 2560×1440 быстродействие недостаточно, а при 1920×1080 — избыточно, то можно выбрать в игре разрешение 2560×1440 и с помощью «Resolution Scaling» уменьшить его, например, до 2400×1350.
В подавляющем большинстве игр эта функция работает с размытием даже при целочисленном коэффициенте масштабирования разрешения.
Целочисленное масштабирование без размытия свободно от потерь качества, вызываемых размытием, и при правильной реализации должно быть совместимо со всеми полноэкранными программами.
Чем это отличается от шахматного рендеринга?
Как и использование меньшего разрешения, метод отрисовки «Checkerboard Rendering» (шахматный рендеринг) позволяет повысить быстродействие.
Но к масштабированию шахматный рендеринг отношения не имеет: трёхмерная сцена отрисовывается в половинном разрешении путём просчёта пикселов, расположенных в шахматном порядке, затем цвета недостающих пикселов вычисляются усреднением цветов соседних пикселов и/или на основе пикселов предыдущего кадра.
Такой подход подобен чересстрочной развёртке, обычно используемой в телевещании для кодирования видео, и позволяет в играх добиться качества, близкого к таковому при отрисовке в полном разрешении (например, 4K), но с почти вдвое более высоким быстродействием.
При целочисленном масштабировании без размытия полноценно просчитываются все пикселы изображения, которое затем увеличивается без внесения в него каких-либо изменений и вычисления каких-либо усреднённых цветов.
Как использовать целочисленное масштабирование средствами видеокарты
Использование видеокарты для целочисленного масштабирования
имеет особенности, которые следует учитывать,
иначе в некоторых случаях масштабирование может не работать.
Универсальный подход, работающий со всеми играми, таков:
Если игра поддерживает настоящий
(эксклюзивный, exclusive) полноэкранный режим,
переключите игру в эксклюзивный полноэкранный режим
(в играх обычно называется «Fullscreen»).
Если игра не поддерживает эксклюзивный полноэкранный режим
и поддерживает только borderless-режим
(окно без рамки, занимающее весь экран; он же «Windowed Fullscreen»,
также в некоторых играх называемый просто
«Fullscreen», что может вводить в заблуждение):
Чтобы предотвратить масштабирование с размытием самой игрой,
перед запуском игры переключите Windows в разрешение игры.
Чтобы обойти ошибку Windows 10+, которая приводит
к самопроизвольному использованию видеокарты
для масштабирования без применения настроек из панели управления видеокарты
(в том числе целочисленного масштабирования),
не используйте настройки экрана в стиле Windows 10
и вместо этого для переключения разрешения используйте
классическое окно «Список всех режимов»:
«Параметры» → «Система → «Дисплей»
(или щелчок правой кнопкой мыши по рабочему столу Windows →
«Параметры экрана») → «Дополнительные параметры дисплея» →
«Свойства видеоадаптера для дисплея 1» → «Список всех режимов».
Чтобы предотвратить масштабирование вследствие применения DPI-виртуализации
Windows (DPI scaling, DPI virtualization),
отключите DPI-виртуализацию
в свойствах исполняемого файла конкретной игры.
Чтобы обойти ошибку Windows 10+, проявляющуюся при повороте экрана
(например, собственная ориентация экрана карманной игровой системы Legion Go портретная,
при этом ориентация устройства по умолчанию альбомная),
отключите полноэкранные оптимизации
в свойствах исполняемого файла конкретной игры:
«Свойства» → «Совместимость» → «Параметры» →
«Отключить оптимизацию во весь экран» → «OK».
Прогресс
AMD — поддержка для GCN 2+ под Windows 7/10
В видеодрайвере AMD для Windows целочисленное масштабирование без размытия
доступно начиная
с Radeon Software 2020
(AMD Software: Adrenalin Edition) (19.12.2, ) для Windows 7/10.
Как включить целочисленное масштабирование
Включить целочисленное масштабирование можно установкой параметра
«Целочисленное масштабирование» («Integer Scaling»)
в значение «Включено» («Enabled»)
на странице «Игры» → «Дисплей»
(«Gaming» → «Display»),
или ⚙️ → «Дисплей» (⚙️ → «Display»)
в версиях AMD Software ниже 23.7.1 ().
Также можно переопределить режим масштабирования
для отдельной игры на странице «Игры» → «Компьютерные игры»
(«Gaming» → «Games»).
Перед включением целочисленного масштабирования в панели управления AMD
необходимо включить масштабирование средствами видеокарты
(«Масштабирование ГП», «GPU Scaling»)
на той же странице панели управления.
Иначе отображается информация, что целочисленное масштабирование
не поддерживается (Not supported), и включить его невозможно.
При включённом целочисленном масштабировании параметр
«Режим масштабирования» («Scaling Mode») игнорируется.
Преимущества: совместимо со старыми видеокартами, Windows 7 и повышением резкости
В отличие от Intel и nVidia, поддерживающих целочисленное масштабирование
только для видеокарт 2019 года и новее, в реализации AMD функция доступна
для видеокарт многих предыдущих поколений начиная с архитектуры
GCN 2-го поколения (),
в том числе видеокарт линеек R7 260, R9 285 и R9 290.
В отличие от Intel и nVidia, поддерживающих целочисленное масштабирование
только в Windows 10 и выше, реализация AMD также поддерживает Windows 7.
Начиная с версии 21.6.1 () регулярный выпуск
новых версий видеодрайверов AMD для Windows 7 прекращён,
последней версией с поддержкой Windows 7 на тот момент была 21.5.2 ().
Но спустя год была выпущена новая версия 22.6.1 (2022-06-23) с поддержкой Windows 7,
что сделало видеокарты серии RX 6000 совместимыми с Windows 7.
В отличие от реализации nVidia, в реализации AMD целочисленное масштабирование
можно использовать
совместно с повышением резкости (RIS).
Ограничения
Есть информация,
что целочисленное масштабирование недоступно при использовании встроенного экрана
на ноутбуках с интегрированным видеоядром в составе APU-процессоров AMD.
При использовании внешнего дисплея функция доступна.
В примечаниях к выпуску Radeon Software 2020 19.12.2 говорится, что в некоторых случаях при использовании целочисленного масштабирования возможно мерцание.
Некоторые пользователи сообщают, что при видеозахвате содержимого экрана (например, с помощью программы OBS) при включённом целочисленном масштабировании захватывается область отмасштабированного изображения в верхнем-левом углу экрана, размер которой соответствует исходному (до масштабирования) разрешению, при этом остальная часть кадра в видеозаписи чёрная.
Один из пользователей видеокарты Radeon RX 5700 XT () сообщил, что при использовании Radeon Software 19.12.3 целочисленное масштабирование работает в играх, но не работает в самой Windows.
В то же время у пользователя Radeon RX Vega 64 () при использовании Radeon Software 19.2.2 и 4K-телевизора TCL S425 проблема не наблюдается.
Один из пользователей видеокарты Radeon RX 480 () сообщил, что имеют место задержка (лаг) и падение быстродействия при использовании целочисленного масштабирования в сочетании с вертикальной синхронизацией (VSync) и разрешениями, при которых над и под отмасштабированным изображением выводятся чёрные полосы (letterboxing).
Проблема имеет место и в режиме центрирования, в том числе с предыдущей версией драйвера, не имевшей поддержки целочисленного масштабирования.
При использовании видеокарт серии RX 500 и, возможно, других,
при некратных логическом и физическом разрешениях
отмасштабированное изображение
прижато
к верхнему краю экрана вместо центрирования по вертикали.
Автор этой статьи столкнулся с этой проблемой при использовании видеокарты RX 550
с видеодрайверами AMD как минимум вплоть до версии 23.2.1 () включительно.
Один из пользователей сообщил, что стресс-тесты при включённом целочисленном масштабировании приводили к падениям (crash) вплоть до видеодрайвера AMD версии 20.11.2 (), начиная с которой проблема больше не проявляется.
Один из пользователей
сообщил,
что параметр для включения целочисленного масштабирования в панели управления AMD
недоступен с видеокартами серии 6000, в частности RX 6600 XT и Radeon PRO W6600.
По опыту автора этой статьи, с видеокартой RX 6400 это не проявляется
как минимум с видеодрайвером AMD версий 23.3.1 () и новее.
Автор этой статьи при использовании видеокарты RX 6400
столкнулся с искажёнными пропорциями при целочисленном масштабировании
в разрешениях с соотношением сторон, отличным от 16:9 —
например, 640×480, 800×600, 1024×768, 1280×1024 —
изображение было вытянуто по вертикали и/или сжато по горизонтали.
Проблема проявлялась как минимум до версии видеодрайвера AMD 23.2.2 () включительно.
Как минимум начиная с версии видеодрайвера AMD 23.3.2 ()
проблема больше не проявляется.
Начиная с версии 20.1.4
() устранена
проблема, проявлявшаяся в недоступности функции под Windows 7 на некоторых системах.
Опросы
Реализации функции в драйвере AMD предшествовали два
опроса,
проводившихся в течение 2019 года.
В обоих опросах пункт «GPU Integer Scaling Support»
(«Поддержка целочисленного масштабирования средствами видеокарты»)
был на первом месте по количеству голосов (около 50% голосов),
и количество голосов продолжало расти даже после реализации функции.
AMD — работа по реализации для Linux
Идёт работа по реализации поддержки целочисленного масштабирования в рамках специфичной для графики AMD части ядра Linux.
Судя по программному коду и описанию патча от , целочисленное масштабирование будет прозрачно использоваться в существующем режиме центрирования и как самостоятельный режим масштабирования доступно не будет.
Работа по реализации начата .
Intel — поддержка для процессоров Ice Lake (Gen10) под Windows 10
Анонс и статья
Поддержка полноэкранного масштабирования без размытия доступна в видеодрайвере Intel для Windows начиная с бета-версии 25.20.100.7155 ().
Стабильная версия 26.20.100.7212 вышла .
Изначально поддержку возможности Intel анонсировала .
на сайте Intel опубликовали статью с подробностями.
Функция доступна с помощью параметра «Retro Scaling» в программе «Центр управления графикой Intel» (Intel Graphics Command Center).
У параметра три возможных значения:
Off
Scaled width
Fixed width
«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»).
при активной функции повышения резкости nVidia Image Sharpening (441.08+, );
на ноутбуках с гибридной (MSHybrid,
nVidia Optimus)
графической подсистемой (встроенное графическое ядро + дискретная видеокарта),
в которых настройками экрана управляет встроенное графическое ядро.
По некоторым данным,
одним из таких ноутбуков является MSI GS65 Stealth 9SG,
сочетающий видеоядро Intel UHD Graphics 630,
встроенное в процессор Intel i7-9750H,
и мобильную дискретную видеокарту nVidia GeForce RTX 2080.
Другой пример —
ноутбук Lenovo Yoga C940-15.
По некоторымданным,
на подавляющем большинстве таких ноутбуков ограничение не проявляется
при использовании внешнего дисплея вместо собственного экрана ноутбука.
Согласно примечаниям к выпуску (release notes),
смена разрешения при сочетании режима целочисленного масштабирования
с режимом расширенного динамического диапазона (HDR)
может приводить к «падению» системы («синему экрану смерти»,
или BSOD) или зависанию компьютера.
Позднее один из пользователей
подтвердил
работоспособность HDR при использовании видеокарты RTX 4090
на основе архитектуры Ada Lovelace ().
Согласно nVidia,
несовместимость с HDR и пользовательскими разрешениями —
непреодолимое фундаментальное ограничение программируемого фильтра,
использованного для реализации целочисленного масштабирования,
и это невозможно исправить как минимум для видеокарт nVidia поколения Turing.
Представители nVidia
говорят,
что целочисленное масштабирование невозможно задействовать
параллельно с так называемым Scan Out Compositor,
используемым, например, для реализации DSR и пользовательских разрешений.
Согласно официальному
комментарию
на форуме nVidia,
их реализация целочисленного масштабирования
использует алгоритм «По соседним» («Nearest Neighbour»),
только если разрешение отмасштабированного изображения
отличается от разрешения исходного изображения в целое количество раз.
Из этого вытекает, что их реализация не использует принудительно целочисленный масштаб,
если соотношение разрешения экрана и логического разрешения не целое.
Значит, например, 640×480 на дисплее 1920×1080, вероятно, масштабируется с размытием,
и над и под отмасштабированным изображением нет чёрных полос
даже при формально включённом целочисленном масштабировании.
Пользователь видеокарты RTX 2080 Ti
сообщил,
что при использовании видеодрайвера 531.61 () под Windows 10 x64
целочисленное масштабирование периодически перестаёт работать,
помогает его выключение и повторное включение в панели управления nVidia.
Пользователь видеокарты RTX 3080 Founders Edition
сообщил,
что целочисленное масштабирование у него не работает вообще.
Устранены ли вышеперечисленные ограничения
в новой линейке 2020 года RTX 3000 на основе архитектуры Ampere, неизвестно.
На форуме nVidia есть соответствующая
тема-вопрос
от .
Для видеокарт предыдущих поколений в Windows-версии драйвера nVidia GeForce функция недоступна.
25 марта 2019 года представитель nVidia сообщил, что реализация масштабирования без размытия в видеодрайвере для Windows не планируется, признав при этом, что сам алгоритм тривиален.
В качестве причины называется невозможность такой реализации, которая не потребовала бы постоянного сопровождения («ongoing continuous support») на фоне регулярных изменений WDDM-спецификации видеодрайверов в Windows 10.
При этом представители nVidia игнорируют вопросы о том, не требует ли такого же постоянного сопровождения существующая технология DSR, тоже реализующая виртуализацию разрешения, прозрачную для операционной системы и полноэкранных программ.
nVidia — ограниченная поддержка в Linux-драйвере
В видеодрайвере nVidia GeForce для операционных систем Linux, Solaris и FreeBSD начиная с версии 384.47 () доступен алгоритм масштабирования «По соседним» («Nearest Neighbour») в рамках функциональности фильтров трансформации (transform filter).
Включается командой следующего вида:
nvidia-settings -a CurrentMetaMode="DP-1: 3840x2160_60 {ViewPortIn=1920x1080, ViewPortOut=3840x2160, ResamplingMethod=Nearest }"
где:
DP-1 — видеовыход, к которому подключён монитор;
3840x2160 — разрешение сигнала, получаемого монитором; должно быть равно физическому разрешению монитора, иначе будет размытие из-за масштабирования средствами монитора;
ViewPortIn — размер области отрисовки (рендеринга) в логических точках (пикселах);
ViewPortOut — размер изображения в физических точках после масштабирования;
ResamplingMethod — алгоритм масштабирования (значение по умолчанию — Bilinear).
Результат масштабирования может быть меньше физического разрешения монитора.
Например, для вывода изображения размером 1280×720 с двукратным увеличением (пикселами 2×2) по центру экрана монитора с физическим разрешением 3840×2160 нужна следующая команда:
nvidia-settings -a CurrentMetaMode="DP-1: 3840x2160_60 {ViewPortIn=1280x720, ViewPortOut=2560x1440+640+360, ResamplingMethod=Nearest }"
где 640 и 360 — сдвиги в физических пикселах от верхнего левого угла по горизонтали и вертикали соответственно, необходимые для центрирования отмасштабированного изображения.
Команды можно исполнить в терминале, который можно открыть сочетанием клавиш Ctrl+Alt+T.
Программная реализация и быстродействие
На аппаратном уровне в видеокартах nVidia реализована только билинейная интерполяция с размытием, поэтому алгоритм масштабирования «По соседним» реализован программно и задействует часть вычислительных ресурсов графического процессора.
Теоретически это может несколько снизить максимальное быстродействие видеокарты.
На практике быстродействие примерно одинаково вне зависимости от типа интерполяции: «По соседним» (Nearest) или билинейная (Bilinear).
К сожалению, в некоторых играх к серьёзному падению быстродействия приводит сам факт использования фильтра трансформации.
Например, в игре «F1 2017» в разрешении 1280×720 при использовании фильтра трансформации быстродействие ниже, чем в разрешении 1920×1080 в обычном полноэкранном режиме.
При масштабировании игры при её работе в оконном режиме быстродействие заметно выше, чем при полноэкранном масштабировании средствами фильтра трансформации, но всё равно ниже, чем в обычном полноэкранном режиме.
Только оконные и псевдополноэкранные игры
К сожалению, функция работает только с оконными и псевдополноэкранными (выводимыми поверх рабочего стола ОС) играми.
К полноэкранным играм, переключающим разрешение монитора (например, «Euro Truck Simulator 2»), масштабирование не применяется.
При этом во многих псевдополноэкранных играх функция работает неправильно: изображение отрисовывается в разрешении, выбранном в настройках игры (например, 1920×1080), затем масштабируется с размытием до разрешения ViewPortOut (например, 3840×2160), затем из него вырезается верхняя-левая или нижняя-левая часть, соответствующая размеру ViewPortIn (например, 1920×1080), и лишь эта часть выводится на монитор.
Проблема не зависит от конкретного окружения рабочего стола (desktop environment) и проявляется как минимум в Unity (Ubuntu 17.04) и GNOME (Ubuntu 17.10).
Чтобы при работе в оконном режиме была видна максимально возможная часть полезного пространства окна игры, можно включить автоматическое скрытие панели задач (Dock) в настройках Ubuntu («Параметры» → «Панель задач» → «Автоматически скрывать панель задач») («Settings» → «Dock» → «Auto-hide the Dock»), а для автоматического скрытия верхней панели использовать GNOME-расширение Hide Top Bar.
Для минимизации высоты заголовочной панели окна игры имеет смысл переключиться на системный масштаб 100%.
Мышь и разрешение
Сопутствующая проблема — даже если результат отрисовки игры виден целиком, её меню, кнопки и другие элементы управления могут быть недоступны для наведения указателя и щелчков мышью, если не переключиться на нужное логическое разрешение (ViewPortIn) в настройках игры до включения Nearest-режима в видеодрайвере.
Это связано с тем, что по умолчанию игра может запускаться в выходном (ViewPortOut) разрешении видеодрайвера вместо логического (ViewPortIn).
Это же может приводить к серьёзному снижению быстродействия: игра будет сначала отрисовываться в высоком разрешении, затем масштабироваться в низкое, а затем — снова в высокое с интерполяцией «По соседним».
Официальные комментарии nVidia
Один из разработчиков Linux-драйвера Аарон Платтнер (Aaron Plattner) считает, что проблема не в драйвере, а в том, что игры неправильно трактуют данные, предоставляемые программной подсистемой RandR.
Он признаёт, что, учитывая количество неправильно работающих игр, имело бы смысл универсальное решение, не зависящее от конкретной игры.
В качестве возможной реализации такого решения он упоминает гипотетическую LD_PRELOAD-библиотеку, которая могла бы перехватывать вызовы функций библиотеки libXrandr и подменять результаты.
При этом он не сообщает, планирует ли сама nVidia разрабатывать и распространять такое решение вместе с видеодрайвером.
Проверенные игры
В таблице — результаты проверки некоторых игр в виртуальном разрешении Full HD (1920×1080) на мониторе Dell P2415Q с физическим разрешением 4K (3840×2160) в операционной системе Ubuntu версий 17.10 и 18.04.
Linux — ограниченная поддержка в XRandR
Системная Linux-программа XRandR для управления графической подсистемой позволяет включить масштабирование без размытия вне зависимости от производителя графического чипа.
Функция доступна начиная с версии 1.5.1 () и включается такой командой:
DP-1 — условное обозначение видеовыхода, к которому подключён монитор;
0.5 — понижающий коэффициент: например, 0.5 на 4K-мониторе (3840×2160) включит виртуальное разрешение Full HD (1920×1080);
Увидеть обозначение видеовыхода можно в панели управления видеокартой либо в списке, выводимом командой:
xrandr | grep " connected " | awk '{ print$1 }'
Например, в виртуальной машине VMware Player 15.5.6 эта команда выводит строку Virtual1.
Во многих дистрибутивах Linux, в том числе Ubuntu 21.04, по-прежнему по умолчанию поставляется устаревшая версия XRandR 1.5.0.
Эта версия поддерживает масштабирование, но не поддерживает отключение размытия.
При попытке использования параметра --filter выводится такое сообщение об ошибке:
xrandr: unrecognized option '--filter'
Установка экспериментальной версии XRandR
Внимание: установка экспериментальных версий фундаментальных системных программ в Linux может повлиять на работоспособность всей системы, отдельных её функций или сторонних программ.
Установить экспериментальную версию XRandR можно такой последовательностью команд:
git clone git://anongit.freedesktop.org/xorg/app/xrandr xr
cd xr
./autogen.sh
sudo make install
Перед этим может потребоваться установить дополнительные пакеты или экспериментальные версии уже установленных пакетов.
Например, в только что установленной Ubuntu 18.10 достаточно установить пакеты git, xorg-dev, xutils-dev, autoconf следующими командами:
Совместимость с играми и ограничения аналогичны таковым у фильтров трансформации в Linux-драйвере nVidia: масштабирование возможно только для игр, работающих в оконном или псевдополноэкранном (borderless) режиме.
Некоторые игры в псевдополноэкранном режиме выводятся в усечённом виде: например, при внутриигровом разрешении Full HD на 4K-мониторе обычно видна нижняя левая или верхняя левая четверть изображения.
В полноэкранном режиме видна ещё меньшая часть изображения, т. к. не только часть исходного изображения масштабируется до физического разрешения монитора, но и монитор переключается в меньшее разрешение.
Linux — поддержка в Proton
Proton начиная с версии 4.11-10 () поддерживает целочисленное масштабирование без размытия.
Включить можно с помощью переменной среды:
WINE_FULLSCREEN_INTEGER_SCALING=1
Proton — улучшенная версия Wine.
Proton используется в функции «Steam Play», позволяющей запускать Windows-игры в Linux
напрямую через программу-клиент Steam без необходимости ручной установки и настройки Wine.
По сравнению с фильтрами трансформации nVidia и масштабированием средствами XRandR, встроенное в Proton целочисленное масштабирование потенциально удобнее:
применяется только к запущенной игре, а не к пользовательскому интерфейсу операционной системы;
автоматически обрабатываются случаи, когда игра переключается между разными разрешениями.
Мониторы — 4K- и QHD-мониторы Eve/Dough Spectrum
Уже реализовано и проверено
Eve/Dough Spectrum — первые в мире компьютерные мониторы со встроенным целочисленным масштабированием. Функция уже реализована и работает: проверено вашим покорным слугой.
4K-модель с частотой обновления до 144 Гц уже находится в производстве и доставляется покупателям, зарезервировавшим монитор. Также запланированы две модели с разрешением QHD (2560×1440) и частотами обновления до 144 Гц и 240 Гц соответственно. Модель 240 Гц будет доступна ориентировочно в , модель 144 Гц — в .
Мониторы основаны на ЖК-панелях «Nano IPS» производства LG Display со временем отклика 1 мс и поддерживают переменную частоту обновления (variable refresh rate, VRR) «FreeSync Premium Pro» («G-Sync Compatible») с минимальной частотой 48 Гц и расширенный динамический диапазон (HDR): у старших моделей — HDR600, у младшей — HDR400.
Ограничения
При использовании прошивки (firmware) 107 (),
самой свежей по состоянию на ,
имеют место следующие ограничения.
Целочисленное масштабирование работает только
в предопределённых разрешениях.
В других разрешениях изображение центрируется без масштабирования,
как в режиме центрирования («1:1»).
При включённом в настройках монитора режиме низкой задержки («Low-latency mode»)
или режиме переменной частоты обновления («Adaptive-Sync», «VRR»)
целочисленное масштабирование не работает,
вместо этого изображение растягивается на весь экран без сохранения пропорций,
как в режиме «Stretch to fill».
В этом случае включение целочисленного масштабирования
в настройках монитора лишь отключает размытие.
Аналог LG не поддерживает целочисленное масштабирование
4K-монитор другого производителя на основе
той же ЖК-матрицы —
LG 27GN950 —
по данным
одного из владельцев, не поддерживает целочисленное масштабирование.
зафиксирован переход на эту статью со служебного (предположительно почтового) сервера LG, что позволяет надеяться, что в LG обратили внимание на целочисленное масштабирование.
27″ 4K-мониторAlienware AW2725QF
использует целочисленное масштабирование в разрешении Full HD (1920×1080)
при частоте обновления 360 Гц согласно
видеообзору
на YouTube-канале «Monitors Unboxed».
Подтверждающие фотографии автор обзора не предоставил.
Неизвестно, используется ли целочисленное масштабирование
в разрешении Full HD при переключении в него обычным образом,
а не с помощью переключателя, встроенного в монитор.
Неизвестно, используется ли целочисленное масштабирование
в других разрешениях и при других частотах обновления.
Монитор двухрежимный (dual-mode) и позволяет
с помощью встроенного в монитор переключателя переключаться
между режимами 4K при 180 Гц и Full HD при 360 Гц.
Автономные устройства масштабирования
Автономные устройства масштабирования подключаются между источником видеосигнала
и дисплеем и позволяют осуществлять масштабирование вне зависимости
от возможностей масштабирования, встроенных в источник и дисплей.
RetroTink-4K (750 $)
RetroTink-4K (RT4K) —
устройство масштабирования на основе FPGA.
Анонсировано
.
Разработчик — Майк Чи (Mike Chi).
В продаже с конца по цене 750 $.
Максимальное выходное разрешение — 4K (3840×2160) при частоте обновления 60 Гц
с полным цветовым разрешением 4:4:4, без цветовой субдискретизации.
Также поддерживается вывод Full HD (1080p), QHD (1440p) и 480p.
Пользовательские (custom) видеорежимы можно добавить
с помощью текстовых файлов на SD-карте.
Возможно сохранение до 65,5 тыс.
пользовательских профилей на SD-карте.
Поддерживаются как целочисленное масштабирование, так и имитация изображения,
характерного для дисплеев на основе электронно-лучевых трубок (ЭЛТ, CRT),
в том числе линий scanlines.
Поддерживается режим расширенного динамического диапазона (HDR)
для компенсации потери яркости при имитации ЭЛТ.
Есть как цифровой вход HDMI, так и аналоговые входы,
в том числе SCART, компонентный (component),
S-Video и HD-15 (VGA).
Вход HDMI поддерживает произвольные видеорежимы в пределах доступной пропускной способности,
в том числе режимы в рамках функциональности MiSTer DirectVideo.
Для электропитания служит порт USB-C (5 В, 2 А).
Управление осуществляется с помощью пульта дистанционного управления.
Файл прошивки (firmware) идентичен для всех экземпляров устройства.
Morph 4K (275—375 $)
Pixel FX Morph 4K —
модульное устройство масштабирования на основе FPGA.
Анонсировано
.
Вариант без аналоговых входов доступен по цене 275 $.
Выпуск модуля с аналоговыми входами ожидается
во 3-м квартале
по цене 100 $.
Максимальное выходное разрешение — 4K (3840×2160) при частоте обновления 60 Гц
с полным цветовым разрешением 4:4:4, без цветовой субдискретизации.
Пользовательские профили можно сохранять на карте MicroSD.
Поддерживаются как целочисленное масштабирование, так и имитация изображения,
характерного для дисплеев на основе электронно-лучевых трубок (ЭЛТ, CRT),
в том числе линий scanlines.
Поддерживается полифазное масштабирование (polyphase upscaling)
для максимального заполнения экрана.
Есть поддержка HDR, переменной частоты обновления (VRR),
вставки чёрного кадра (BFI).
Вход HDMI поддерживает разрешения от 240p до 1080p.
Базовая версия имеет только цифровой вход HDMI.
Дополнительный модуль «Analog Bridge» добавляет аналоговые входы:
два VGA, SCART, компонентный (component), 5-BNC.
Порт USB-A позволяет управлять другими устройствами.
Поддерживается обновление прошивки (firmware) как с помощью карты MicroSD,
так и по Wi-Fi.
Прошивка (firmware) доступна для скачивания в виде файла,
зашифрованного на основе серийного номера конкретного экземпляра устройства.
Похожие и гибридные способы масштабирования
Есть несколько способов масштабирования, частично использующих целочисленное масштабирование и/или дающих похожие результаты.
точное целевое соотношение сторон при коррекции соотношения сторон;
равномерное распределение линий scanlines по вертикали.
Но по горизонтали есть либо искажения (если для горизонтального масштабирования используется алгоритм «По соседним»), либо размытие (при билинейной или аналогичной горизонтальной интерполяции).
Пример
SNES-эмуляторы bsnes и bsnes-mt в режиме «Center» («По центру»).
В зависимости от кратности разрешений
При таком подходе применяются разные алгоритмы масштабирования в зависимости от кратности размеров (разрешений) исходного изображения и области, в которую требуется вписать отмасштабированное изображение:
без размытия — при кратных размерах: например, FHD на 4K-мониторе, соотношение 2,0;
с размытием — при некратных размерах: например, FHD на QHD-мониторе, соотношение 1,333.
Таким образом:
при целочисленном соотношении размеров (2,0 в случае FHD→4K) нет неоправданного размытия, и чёткость максимальна;
при дробном соотношении размеров (1,333 в случае QHD→4K) усредняются все пикселы исходного изображения, и есть размытие;
в обоих случаях отмасштабированное изображение соответствует исходному, и нет искажений;
размер отмасштабированного изображения всегда равен размеру области, в которую оно вписывается, чёрный фон вокруг не добавляется.
Примеры
Масштабирование интерфейса программ механизмом DPI-виртуализации (DPI scaling) в Windows 10.
Браузерное расширение SmartUpscale для целочисленного масштабирования изображений на веб-страницах.
Пикселизация с размытием границ пикселов
Пикселизованное изображение с физическими пикселами усреднённых цветов на границах логических пикселов.
Реализуется алгоритмами «Sharp Bilinear», «Pixellate» и «AANN» («AntiAliased Nearest Neighbour»), дающими слегка различающиеся, но в целом аналогичные результаты.
Sharp Bilinear — двухэтапное масштабирование:
целочисленное масштабирование без размытия;
растяжение или сжатие до размеров экрана с размытием.
Обеспечиваются одновременно:
максимальное заполнение экрана;
точное соблюдение целевого соотношения сторон;
частично пикселизованный характер изображения;
отсутствие заметного дрожания пикселов (pixel shimmering).
Но границы логических пикселов размыты, и чёткость ниже, чем при чистом целочисленном масштабировании.
Примеры
Шейдеры (shaders) (подпрограммы постобработки изображения, исполняемые на видеокарте) «Sharp Bilinear», «Pixellate» и «AANN» в эмуляторах:
SNES-эмуляторы bsnes и bsnes-mt в режимах «Center» («По центру»), «Scale» («Масштабирование с сохранением пропорций») и «Stretch» («Растяжение без сохранения пропорций»);