Full HD на 4K-мониторе выглядит хуже, чем на Full-HD-мониторе.
Это происходит из-заразмытия, добавляемого мониторами и видеодрайверами при любом масштабном коэффициенте, хотя при увеличении в целое количество раз (например, 2 в случае FHD→4K) этого можно избежать.
В результате в трёхмерных играх снижается резкость, белые линии становятся серыми, а пиксельная графика (pixel art) перестаёт быть пиксельной.
Решение
Можно было бы каждую логическую точку отображать как квадратную группу из целого (2×2, 3×3) количества физических точек одинакового цвета.
Такое масштабирование без потерь качества можно встроить в драйверы видеокарт, это автоматически устранит размытие вне зависимости от используемого монитора.
Intel: поддержка для видеоядер 11-го поколения в драйвере 25.20.100.7155 () для Windows 10; доступно с сентября в ноутбуках с процессорами 10-го поколения.
nVidia: ограниченная поддержка для RTX и GTX 16* в драйвере 436.02 () для Windows 10; несовместимо с HDR, пользовательскими разрешениями, DSR, 4:2:0, повышением резкости и ноутбуками с гибридной графической подсистемой.
AMD: включено в опросы от и ; идёт работа по реализации для ядра Linux 5.4, стабильная версия которого ожидается в конце 2019 года.
Мониторы: анонсировано для 27″ QHD-монитора EVE Spectrum, ожидается в 1-м или 2-м квартале .
Linux: ограниченная поддержка в XRandR и видеодрайвере nVidia: во многих играх изображение усекается.
Что такое масштабирование
Изображение на компьютерных мониторах и телевизорах состоит из точек (пикселов). Количество точек по горизонтали и вертикали называется разрешением.
Масштабирование — это изменение размеров (разрешения) изображения. Оно необходимо, если физическое разрешение монитора или телевизора отличается от разрешения подаваемого на него видеосигнала: например, если игра в разрешении 1920×1080 (Full HD) запускается в полноэкранном режиме на мониторе с физическим разрешением 3840×2160 (4K).
Проблема — размытие
На всех мониторах, видеокартах и большинстве телевизоров масштабирование приводит к снижению резкости при любом коэффициенте масштабирования. Такое снижение резкости воспринимается как размытие и представляет собой необратимую потерю качества.
Но на самом деле размытие неизбежно, только если разрешение монитора некратно разрешению сигнала. Например, невозможно одну логическую точку (пиксел) отобразить как 1,5 физических пиксела, поэтому приходится применять интерполяцию, состоящую в пропорциональном усреднении цветов соседних пикселов масштабируемого изображения.
Решение — целочисленное масштабирование
Если коэффициент масштабирования не дробный (например, 1,5), а целочисленный (например, 2 или 3), то размытия можно избежать, отобразив каждый логический пиксел как квадратную группу из целого (например, 2×2 или 3×3) количества физических пикселов одинакового цвета — т. е. просто повторив соответствующий пиксел исходного изображения несколько раз без какого-либо влияния цветов соседних пикселов.
Такое масштабирование без потерь качества известно как integer (integer-ratio, integer-factor, integral) scaling (масштабирование с целочисленным коэффициентом), pixel-perfect scaling (масштабирование с точной привязкой к физическим пикселам), pixel doubling (duplication) (удвоение, или дублирование, пикселов).
Больше, чем интерполяция «По соседним»
Интерполяция «По соседним» («Ближайший сосед», «Nearest Neighbour») работает без потерь качества только при целочисленных соотношениях размеров результирующего и исходного изображений, а при дробных соотношениях приводит к искажениям. Целочисленное масштабирование свободно от потерь всегда.
Размытия можно избежать даже при некратных разрешениях экрана и изображения: достаточно отмасштабировать изображение с таким целочисленным коэффициентом, при котором оно максимально заполнит экран, а оставшееся пространство — залить чёрным фоном так же, как при выводе изображения по центру экрана без масштабирования.
Например, изображение 1280×1024 можно вывести на экран 3840×2160, отобразив каждый пиксел изображения как группу из 4-х (2×2) одинаковых физических пикселов с чёрными полями по 56 физических пикселов наверху и внизу и по 640 — слева и справа.
Примеры
Пиксельная графика
Различия между билинейной интерполяцией с размытием и целочисленным масштабированием без потерь качества наглядно видны на примере пиксельной графики, или пиксель-арта (pixel art):
Фото
См. также фотографии одного и того же скриншота программы Reaper, сделанные с использованием трёх способов масштабирования:
Для лучшего понимания сути целочисленного масштабирования без размытия см. демо-страницу. Есть возможность сравнить изображение, отмасштабированное с целочисленным коэффициентом без размытия, и обычное размытое изображение. Поддерживаются просмотр произвольных изображений и коррекция соотношения сторон.
Сценарии использования
Работа в разрешении ниже физического разрешения дисплея имеет смысл для следующих целей:
повышение быстродействия в современных трёхмерных играх на дисплеях 4K+, особенно на ноутбуках;
возможность на дисплеях 4K+ играть в игры, не рассчитанные на HiDPI-дисплеи:
не масштабирующие свой пользовательский интерфейс;
в разрешениях 4K и выше работающие неправильно;
при масштабировании без размытия — сохранение пикселизации в старых и pixel-art-играх.
Почему это важно
На 4K-мониторах при диагонали 24—27″ при разрешении Full HD отдельные пикселы изображения почти неразличимы, и размытие не даёт никакого эффекта сглаживания, а просто бессмысленно снижает резкость, приводя к неоправданной потере качества.
Все 4K-мониторы масштабируют с размытием, поэтому проблему можно решить только средствами видеодрайвера.
В режиме nVidia G-Sync масштабирование монитора не задействуется (1, 2, 3), поэтому единственный путь к правильному масштабированию в режимах с переменной частотой обновления (VRR) — масштабирование средствами видеодрайвера.
В видеодрайверах nVidia и AMD уже реализованы технологии виртуализации разрешения — nVidia DSR и AMD VSR, и технически остаётся лишь добавить поддержку коэффициентов ниже 1.
С точки зрения быстродействия целочисленное масштабирование повторением пикселов работает гораздо быстрее, чем масштабирование с использованием билинейной или бикубической интерполяции, поэтому применение целочисленного масштабирования может уменьшить или устранить задержку (lag), вносимую масштабированием.
Пользователь имеет право на отсутствие неоправданных потерь качества при работе в разрешениях, отличных от физического разрешения дисплея.
Более быстродействующая видеокарта имеет большее тепловыделение (TDP) и увеличенный шум системы охлаждения. Это отрицательно влияет на комфорт пользователя и в долгосрочной перспективе приводит к необратимому снижению слуха. В той же мере это относится к видеокарте, вычислительные ресурсы которой задействуются в более высокой степени, чем могли бы в более низком разрешении.
Более быстродействующая видеокарта проблему не решает, т. к. дело не только в быстродействии (см. далее).
Ещё важнее с ростом физического разрешения
Чем выше физическое разрешение экрана, тем важнее и эффективнее целочисленное масштабирование.
Чем выше физическое разрешение экрана, тем труднее достичь комфортного быстродействия игр при его использовании. Разрешение 4K вчетверо выше Full HD. Разрешение 8K (7680×4320) ещё в 4 раза выше.
Чем выше физическое разрешение экрана, тем менее заметен логический пиксел при тех же размере экрана и масштабном коэффициенте, и тем менее оправдано размытие как своего рода сглаживание. Например, на 4K-мониторе логическую точку (пиксел) при разрешении Full HD (1920×1080) ещё при желании можно разглядеть при определённом сочетании размера экрана, расстояния до экрана и качества сглаживания в игре. Но при физическом разрешении 8K и разрешении сигнала 4K логический пиксел в типичных условиях использования будет совершенно неразличим.
Появляется возможность более полно использовать площадь экрана при целочисленном масштабировании. Например, при типичном для DOS-игр разрешении 320×240 высота экрана Full HD (1920×1080) при целочисленном масштабе заполняется лишь на 89% (используется 960 из 1080 точек, увеличение четырёхкратное), а на 4K-мониторе высота используется полностью (масштабный коэффициент — ровно 9).
Исходное разрешение
Разрешение после масштабирования
Примечание
FHD
4K
8K
Масштаб
Потеря высоты
Масштаб
Потеря высоты
Масштаб
Потеря высоты
256×224
SNES
4,8
17%
9,64
6,7%
19,3
1,5%
На 4K потеря высоты в 2,6 раза меньше, чем на FHD. На 8K — в 4,5 раза меньше, чем на 4K, и в 11,5 раз меньше, чем на FHD
320×240
qVGA
4,5
11,1%
9
0
18
0
640×480
VGA
2,25
11,1%
4,5
11,1%
9
0
Потери высоты на FHD и 4K одинаковы
800×600
SVGA
1,8
44,4%
3,6
16,7%
7,2
2,8%
На FHD умещается только при масштабе 100% (без увеличения). На 4K потеря высоты в 2,67 раза меньше, чем на FHD; на 8K — в 6 раз меньше, чем на 4K, и в 16 раз меньше, чем на FHD
1024×768
XGA
1,4
28,9%
2,81
28,9%
5,63
11,1%
На FHD умещается только при масштабе 100% (без увеличения). На 8K потеря высоты в 2,6 раз меньше, чем на 4K и FHD
Появляется возможность ещё полнее использовать площадь экрана путём использования логических пикселов с переменным размером с разницей в размере соседних пикселов в 1 физический пиксел. Чем больше физических пикселов в логическом пикселе, тем менее заметна разница в 1 физический пиксел.
Например, для разрешения 256×224, характерного для 16-битных игровых приставок, на экране Full HD максимальный целочисленный коэффициент составляет 4 (полный дробный коэффициент — 4,82), по умолчанию по вертикали пропадают 184 пиксела, или 17% высоты экрана. Но если увеличить высоту каждого второго логического пиксела на 1 физический пиксел (4×5 вместо 4×4), то потерянная высота сократится в 2,5 раза — пропадут уже всего 72 физических пиксела, или 7% высоты экрана. (Для сохранения соотношения сторон изображения следует дополнительно пропорционально растянуть изображение по ширине.)
Однако разница 25% в высоте пикселов в соседних строках на FHD-экране может бросаться в глаза. На 4K-экране относительное увеличение высоты пиксела составляет всего 11% (9×9 → 9×10) — и значительно менее заметно. На 8K-экране в аналогичных условиях разница в высоте пикселов составляет всего 5% (19×19 → 19×20), при этом увеличение высоты пиксела в каждой 4-й строке сокращает потерянную высоту в 8 раз — с 64 до 8 пикселов.
Экраны с разрешением 8K при челочисленном масштабировании позволят использовать без потерь качества любое из типичных разрешений: HD (1280×720, 6x), FHD (1920×1080, 4x), QHD (2560×1440, 3x), 4K (3840×2160, 2x).
Мощная видеокарта — не решение
Приобретение более быстродействующей видеокарты не решает проблему:
если экраном повышенного разрешения оснащён ноутбук, установка мощной видеокарты практически невозможнаиз-за естественных ограничений по габаритам, энергопотреблению и тепловыделению;
многие игры содержат растровые (точечные) элементы (например, меню в «Half-Life 2» и панели инструментов в «Cities XL Platinum»), которые в разрешении 4K становятся мелкими, и играть в игру почти невозможно;
некоторые игры работают в разрешении 4K неправильно (например, в «Bionic Commando Rearmed» не видны элементы головоломок на мини-уровнях «Hack enemy network»);
некоторые игры (например, «Duck Tales Remastered») имеют фиксированное разрешение (например, Full HD), а поддержка остальных разрешений достигается масштабированием с размытием;
в играх на основе пиксельной графики (pixel art) быстродействие не является проблемой, а важен пикселизованный характер изображения без неуместного размытия, не соответствующего замыслу авторов игры.
Видеокарта с более высоким быстродействием здесь бессильна.
Частичные решения
Масштабирование, встроенное в игры
В некоторые современные игры масштабирование без размытия встроено. В основном это характерно для игр на основе пиксельной графики (pixel art), но встречается и в некоторых трёхмерных играх.
Масштабирование без размытия встроено в игру Owlboy () (приключенческий платформер на основе пиксельной графики).
В игру QuakeSpasm (Quake на более современном движке) начиная с версии 0.93.0 () встроена возможность целочисленного масштабирования без размытия с коэффициентами до 400% с помощью конфигурационного параметра r_scale. Для использования этой возможности следует в подпапку ID1 папки игры поместить текстовый файл autoexec.cfg, содержащий параметр вида r_scale 4, где 4 указывает на масштабный коэффициент. Например, при выбранном в игре разрешении 3840×2160 игра отрисовывается в разрешении 960×540 и масштабируется до 3840×2160 без размытия путём отображения каждого логического пиксела как квадратной группы из 16-ти (4×4) физических пикселов одинакового цвета.
В игру Dusk () (3D-шутер в ретростиле) встроена возможность целочисленного масштабирования без размытия с коэффициентами до 800%. Для этого служит параметр «Pixelization» → «1x-8x» в разделе «Advanced Display Settings» настроек игры. По некоторым данным, по умолчанию параметр установлен в значение «2x», что, например, при физическом разрешении 4K соответствует логическому разрешению Full HD.
Программы масштабирования
Для масштабирования Windows-игр, поддерживающих оконный режим, можно использовать программу IntegerScaler.
Для масштабирования 3D-игр можно использовать программу GeDoSaTo. Недостатки:
поддерживает только относительно старые игры, использующие DirectX 9 и ниже;
работает лишь с некоторыми из них;
современные версии программы на некоторых системах не работают вообще, у автора этих строк заработала одна из предыдущих версий — Beta 10 Poltergeist.
Эмуляторы Glide и DirectX
Glide — программный интерфейс (API), использовавшийся в видеокартах 3dfx. Glide-эмуляторы позволяют играть в игры с поддержкой Glide на компьютерах, поддерживающих современные API DirectX и OpenGL.
Glide-эмулятор nGlide начиная с версии 2.10 () поддерживает целочисленное масштабирование без размытия (Options → Aspect ratio → Integer scaling).
DgVoodoo (эмулятор Glide и «обёртка» для DirectX 8 и ниже) и DXGL (OpenGL-реализация DirectDraw) поддерживают алгоритм масштабирования без размытия «По соседним» («Nearest Neighbour») (источники: 1, 2).
Эмуляторы игровых приставок и движки для старых игр
SNES-эмулятор Snes9x начиная с версии 1.56.2 () поддерживает целочисленное масштабирование (Video → Display Configuration (Display Settings) → General → Integer Scaling). При этом для предотвращения размытия следует снять галку Video → Bilinear Filtering, а во избежание других искажений исходного изображения — в обоих выпадающих списках Video → Display Configuration (Display Settings) → Output Image Processing выбрать значение None. В качестве способа вывода (Video → Display Configuration (Display Settings) → General → Output Method) необходимо выбрать «Direct3D» или «OpenGL»; в режиме «DirectDraw» функция не работает.
Ограничение: при использовании фильтра «Scanlines» используется чётный масштабный коэффициент, из-за чего высота экрана может использоваться менее полно, чем без фильтра «Scanlines»: например, на 4K-мониторе используется коэффициент 8 вместо 9.
SNES-эмулятор Snes9x EX+ для Android начиная с версии 1.4.4 () поддерживает целочисленное масштабирование (Options → Video → Zoom → Integer-only). При этом для предотвращения размытия следует установить параметр Options → Video → Image Interpolation в значение None вместо используемого по умолчанию Linear.
SNES-эмулятор Mesen-S поддерживает целочисленное масштабирование: Options → Video → General → Use integer scale values when entering fullscreen mode. При этом для предотвращения размытия должна быть снята галка Picture → Use bilinear interpolation when scaling (снята по умолчанию). Поддерживается отсечение заданного количества пикселов исходного изображения по отдельности для каждой из сторон, благодаря чему можно полнее использовать площадь экрана: Options → Video → Overscan.
Эмулятор 8/16-битных игровых приставок higan для Windows начиная с версии 104 () поддерживает целочисленное масштабирование (Settings → Video → Windowed Mode / Fullscreen Mode → Integral scaling). При этом для предотвращения размытия следует снять галку Settings → Video Emulation → Blurring, а параметр Settings → Video Shader установить в значение None вместо используемого по умолчанию Blur.
В SNES-эмуляторе bsnes для Windows начиная с версии 107 () в режиме центрированного вывода (Settings → Output → Center) автоматически применяется целочисленное масштабирование. При этом для предотвращения размытия следует параметр Settings → Shader установить в значение None вместо используемого по умолчанию Blur.
Ограничение: при использовании фильтра «Scanlines» и нечётном масштабном коэффициенте (например, 9 при физическом разрешении 4K) в сочетании с механизмом отрисовки «OpenGL 3.2» (Settings → Drivers → Video → Driver) scanline-линии отрисовываются неравномерно: например, на 4K-мониторе каждая 7-я линия на 1 пиксел толще остальных.
NES-эмулятор Mesen начиная с версии 0.9.1 () поддерживает целочисленное масштабирование: «Опции» → «Видео» → «Общие» → «Use integer scale values when entering fullscreen mode» (Options → Video → General → Use integer scale values when entering fullscreen mode). При этом для предотвращения размытия должна быть снята галка «Изображение» → «Билинейная интерполяция» (Picture → Use bilinear interpolation when scaling) (снята по умолчанию). Поддерживается отсечение заданного количества пикселов исходного изображения по отдельности для каждой из сторон, в том числе индивидуально для каждой игры, благодаря чему можно полнее использовать площадь экрана: «Опции» → «Видео» → «Overscan» (Options → Video → Overscan).
NES-эмулятор puNES начиная с версии 0.105 () поддерживает целочисленное масштабирование: Settings → Video → Misc → Use integer scaling in fullscreen. При этом для предотвращения размытия следует снять галку Interpolation.
mGBA — эмулятор карманных игровых систем Game Boy, Game Boy Color и Game Boy Advance — начиная с версии 0.6 () поддерживает целочисленное масштабирование: Audio/Video → Force integer scaling. При этом для предотвращения размытия галка Audio/Video → Bilinear filtering должна быть снята (по умолчанию снята).
SameBoy — эмулятор карманных игровых систем Game Boy и Game Boy Color — начиная с версии 0.9 () поддерживает целочисленное масштабирование (Graphic Options → Scaling Mode → Retain Integer Factor). При этом для предотвращения размытия следует установить параметр Graphic Options → Scaling Filter в значение Nearest Neighbor. Эмулятор формально несовместим с HiDPI (не является DPI-aware), поэтому для гарантии отсутствия размытия и для максимального использования площади экрана рекомендуется отключить DPI-виртуализацию в свойствах его исполняемого файла.
Эмулятор множества игровых систем и старых компьютеров MAME поддерживает целочисленное масштабирование без размытия. Для включения целочисленного масштабирования служит параметр командной строки -nounevenstretch или его краткий вариант -noues. Выключить размытие можно параметром командной строки -nofilter, либо установив параметр Configure Options → Video Options → Bilinear Filtering в настройках MAME в значение Off.
Алгоритм целочисленного масштабирования в MAME использует пикселы одинакового размера, поэтому при малых масштабных коэффициентах соотношение сторон отмасштабированного изображения может не точно соответствовать необходимому, если игре требуется коррекция соотношения сторон (aspect-ratio correction). Например, в аркадной версии игры «Mortal Kombat 3» (исходное разрешение — 400×254, целевое соотношение сторон — 4:3) на FHD-дисплеях изображение заметно сужено по горизонтали (размер логического пиксела — 3×4 физических пиксела, погрешность — 11,42%), а на 4K-дисплеях нарушение пропорции незаметно (размер пиксела — 7×8, погрешность — 3,34%).
Cemu — экспериментальный эмулятор игровой приставки Wii U для Windows — начиная с версии 1.15.2 () поддерживает алгоритм масштабирования «По соседним» («Nearest Neighbour») (Options → General settings → Graphics → Upscale filter / Downscale filter → Nearest Neighbor). Произвольное разрешение можно установить для каждой конкретной игры с помощью графических пакетов (Options → Graphic packs).
Оболочка 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 (по умолчанию). Но периодически изображение выводится с ошибочным соотношением сторон и искажёнными пропорциями пикселов.
Программа ScummVM, современная среда для запуска множества старых игр типа «Broken Sword», начиная с версии 2.1 () поддерживает целочисленное масштабирование: «Настройки» → «Графика» → «Режим р…гивания» → «Масштабирование пиксель-в-пиксель» («Options» → «GFX» → «Stretch mode» → «Pixel-perfect scaling». Отключить размытие можно снятием галки «Фильтрование графики» («Filter graphics»).
В оконном режиме доступна также возможность вывода с фиксированными целочисленными масштабами 2x (200%) и 3x (300%) («Настройки» → «Графика» → «Граф. режим») («Options» → «GFX» → «Graphics mode»), но глобальная настройка применяется только к играм с разрешением не более 320×240, а для игр с более высоким разрешением требуется задавать эту настройку с помощью индивидуального для игры набора настроек: «Настройки игры» → «Графика» → «Перекрыть глобальные установки графики» («Edit Game» → «Graphics» → «Override global graphic settings»).
Программа формально несовместима с HiDPI (не является DPI-aware), поэтому для гарантии отсутствия размытия и для максимального использования площади экрана рекомендуется отключить DPI-виртуализацию в свойствах её исполняемого файла.
В графическом режиме «OpenGL» программа может переключать 4K-монитор в разрешение Full HD, что может приводить к размытию из-за масштабирования средствами монитора или видеокарты. Помогает переключение программы в другой графический режим — например, «3x».
ScummVM также доступна как ядро libretro, которое можно использовать с таким оболочками, как RetroArch или BizHawk, в которые встроены собственные реализации целочисленного масштабирования.
Виртуализация ОС
Для запуска DOS-программ — эмулятор DOSBox ECE — улучшенная неофициальная версия программы DOSBox, поддерживающая целочисленное масштабирование без размытия. В отличие от обычной версии 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
Среда виртуализации VirtualBox поддерживает масштабирование экрана виртуальной машины без размытия в диапазоне 100—300%: Машина → Настроить → Дисплей → Экран → Коэффициент масштабирования (Machine → Settings → Display → Screen → Scale Factor).
Просмотр изображений и видео
Для просмотра изображений — программа XnView со снятой галкой Инструменты → Опции → Вид → Высокое качество при масштабировании → При увеличении (Tools → Options → View → High quality zoom → Enlarge). Ограничение: настройка применяется ко всем просматриваемым изображениям вне зависимости от кратности их размеров размеру окна программы и использования полноэкранного режима.
Для просмотра видео — плеер MPC-HC с настройкой Вид → Настройки → Воспроизведение → Вывод → Интерполяция → Ближайший сосед (View → Options → Playback → Output → Resizer → Nearest neighbor). Настройка доступна при использовании движков отрисовки «Video Mixing Renderer 9 (renderless)», «Расширенный рендер видео (EVR custom presenter)» («Enhanced Video Renderer (custom presenter)») и «Sync Renderer». Движок отрисовки можно выбрать с помощью выпадающего списка «Вывод DirectShow» («DirectShow Video») на той же странице настроек. Ограничение: настройка применяется ко всем видео вне зависимости от кратности размеров видеокадра размеру окна программы и использования полноэкранного режима.
Встроенные средства Windows
Для оконных программ — экранная лупа Windows (Windows Magnifier). Недостатки:
неудобный интерфейс — трудно точно совместить масштабируемую область с границами подлежащего масштабированию объекта;
при некратных размере подлежащего масштабированию объекта и разрешении монитора область вокруг объекта не заполняется однотонной заливкой, поэтому помимо подлежащего масштабированию объекта видны посторонние объекты;
в оконном режиме — задержка (lag) и подёргивание;
в режиме вывода на полный экран — подёргивание как минимум в некоторых играх (например, WRC 6) (возможно, только в Windows 7) и возможная задержка (lag).
Для оконных Windows-программ, несовместимых с HiDPI — использование Windows 10, где, в отличие от Windows 7, старые программы при целочисленных системных масштабах автоматически масштабируются без размытия.
В Windows 10 для игр с поддержкой псевдополноэкранного режима «Borderless» возможно масштабирование без размытия с масштабом, равным системному масштабу.
«Borderless» — особый вариант оконного режима, который отличается от обычного оконного режима тем, что использует окно без рамок и заголовочной панели, и вся площадь окна представляет собой область отрисовки игры. В зависимости от конкретной игры или её настроек такое окно может занимать весь экран без возможности задать разрешение в настройках игры, либо иметь фиксированный размер, равный внутриигровому разрешению.
Для масштабирования с помощью Borderless-режима:
игра должна быть запущена в режиме DPI-виртуализации (DPI scaling) — встроенном в Windows режиме масштабирования устаревших программ, не рассчитанных на экраны с высокой плотностью точек;
в настройках игры должен быть выбран режим «Borderless». В разных играх этот режим может называться по-разному, например, «Borderless Full Screen», «Borderless Windowed», «Borderless», «Windowed Fullscreen», «Fullscreen Windowed». В некоторых играх режим, называемый полноэкранным («Full Screen»), на самом деле представляет собой режим «Borderless» вместо настоящего (exclusive) полноэкранного режима;
разрешение в игре должно быть в точности настолько меньше системного, какой масштаб задан в Windows.
Например, если для монитора разрешением 3840×2160 (4K) в Windows 10 задан масштаб 200% (коэффициент — 2), разрешение в настройках игры должно быть 1920×1080 (Full HD):
3840 / 1920 = 2
2160 / 1080 = 2
Принудительно включить DPI-виртуализацию для игры, даже если она объявлена как совместимая с HiDPI (DPI-aware), в Windows 10 можно через свойства исполняемого файла (*.exe) игры, подробнее см. ниже.
DPI-режим программ в Windows
К программам и играм, не объявленным как совместимые с HiDPI (DPI-aware), Windows автоматически применяет DPI-виртуализацию (DPI scaling). При DPI-виртуализации интерфейс программы увеличивается как растровое (точечное) изображение с коэффициентом, соответствующим системному масштабу. Например, при системном масштабе 200% такие программы увеличиваются вдвое по горизонтали и вдвое по вертикали.
Чтобы предотвратить размытие или пикселизацию из-за DPI-виртуализации в играх, важно убедиться, что игра работает в HiDPI-совместимом (DPI-aware) режиме. Определить это легко: размер окна игры в физических пикселах (точках) должен соответствовать разрешению, выбранному в настройках игры. Например, окно игры, работающей в разрешении Full HD, при системном масштабе 200% на 4K-мониторе должно занимать не весь экран, а примерно четверть экрана (половину по горизонтали и половину по вертикали).
Для игр, формально несовместимых с HiDPI, требуется отключить DPI-виртуализацию (DPI scaling) для исполняемого файла игры, чтобы окно игры имело правильный размер и было свободно от размытия, возможного вследствие масштабирования, которое Windows автоматически применяет к HiDPI-несовместимым приложениям.
Отключить DPI-виртуализацию для отдельно взятой игры можно в свойствах (пункт «Свойства» контекстного меню файла) её исполняемого файла (*.exe):
Windows 10
Пункт «Свойства» → вкладка «Совместимость» → секция «Параметры» → кнопка «Изменить параметры высокого DPI» → секция «Переопределение масштабирования с высоким разрешением» → галка «Переопределите режим масштабирования высокого разрешения. Масштабирование выполняется» → пункт «Приложение» выпадающего списка.
Windows 10 (устаревшие версии)
Пункт «Свойства» → вкладка «Совместимость» → секция «Параметры» → галка «Переопределите режим масштабирования высокого разрешения. Масштабирование выполняется» → пункт «Приложение» выпадающего списка.
Windows 7
Пункт «Свойства» → вкладка «Совместимость» → секция «Параметры» → галка «Отключить масштабирование изображения при высоком разрешении экрана».
Для некоторых игр, не объявленных как DPI-aware, Windows отключает DPI-виртуализацию автоматически. Обычно это происходит при первом переключении из полноэкранного режима в оконный.
Телевизоры
Есть информация, что некоторые 4K-телевизорыPanasonic поддерживают возможность вывода Full-HD-сигнала без размытия. Например, в модели TX-55CX802B это реализуется параметром «1080p Pixel by 4 pixels» в меню «Picture → Option Settings». Судя по всему, эта возможность касается исключительно разрешения Full HD (1920×1080) и не работает при иных разрешениях входного видеосигнала (например, 1280×720). При этом аналогичная модель меньшей диагонали — TX-50CX802 — судя по официальной инструкции, такой функции лишена. Функция также доступна в моделях TH-65AX900A, TX-50AX802 и TX-58DX750.
По некоторым данным, функция масштабирования без размытия доступна в режиме «Graphics» в некоторых моделях 4K-телевизоров Sony — например, X900E.
Прочее
Для отключения неоправданного размытия изображений на веб-страницах — расширение SmartUpscale для браузеров Firefox и Chrome.
Есть сведения, что размытие отсутствует при масштабировании с целочисленными коэффициентами средствами официального видеодрайвера Intel для операционной системы Linux.
Операционная система Raspbian для мини-компьютеров Raspberry Pi начиная с поддерживает масштабирование без размытия с коэффициентом 200% с помощью параметра настроек «Pixel Doubling» на вкладке «System» в приложении «Raspberry Pi Configuration».
Потенциальные решения
Аппаратные
Масштабирование средствами монитора. Преимущество по сравнению с масштабированием средствами видеодрайвера — экономия пропускной способности видеоинтерфейса и потенциальное снижение электромагнитного излучения от сигнального кабеля.
Устройство для масштабирования, подключаемое в разрыв между источником видеосигнала и дисплеем. Преимущество по сравнению с масштабированием средствами видеодрайвера — возможность использования с любым источником сигнала (например, игровой приставкой или видеоплеером), а не только компьютером. Потенциальные недостатки:
может вносить дополнительную задержку (lag);
может пострадать совместимость с технологией HDCP, необходимой для воспроизведения защищённого контента. Решаемо с помощью переключателя для временного включения режима прямой передачи видеосигнала без изменений. Переключатель может быть физическим или управляемым с компьютера по USB.
Существуют похожие устройства:
mCable — HDMI-кабель со встроенной микросхемой для повышения качества входного сигнала в реальном времени с применением шумоподавления, сглаживания и повышения резкости с заявленной задержкой (лагом) менее 1 мс;
DCHDMI для вывода видеосигнала игровой приставки Sega Dreamcast по HDMI в формате Full HD с поддержкой целочисленного масштабирования с двукратным увеличением изображения (640×480 → 1280×960);
UltraHDMI для вывода видеосигнала игровой приставки Nintendo 64 по HDMI без потерь качества (обзор).
Возможно, подобное устройство можно реализовать на основе программируемых вентильных матриц FPGA: 1, 2.
Программные
Масштабирование средствами видеодрайвера.
Изменение архитектуры видеодрайверов в операционной системе Windows таким образом, чтобы у ОС был доступ к изображению экрана в любой момент времени вне зависимости от способа формирования этого изображения. Тогда масштабирование без размытия могла бы осуществлять сама ОС.
Программный эмулятор монитора, перехватывающий подлежащее выводу на монитор изображение, масштабирующий его и выводящий отмасштабированное изображение на физический монитор.
Реверс-инжиниринг (reverse engineering) существующих видеодрайверов с целью активации возможности масштабирования в бОльшую сторону помимо уже существующего масштабирования в меньшую сторону в уже существующей функции nVidia DSR или AMD VSR.
Что делать
Обычные пользователи
Подпишитесь под петицией на Change.org о реализации целочисленного масштабирования без размытия в видеодрайверах.
Проголосуйте за добавление функции «GPU Integer scaling support» в видеодрайвер AMD. Регистрация не требуется.
Выразите свою поддержку в соответствующих существующих темах форумов nVidia, AMD, Intel.
Пожалуйтесь на размытие при масштабировании средствами видеодрайвера в техническую поддержку производителей графических процессоров: nVidia, AMD, Intel (1, 2).
Пожалуйтесь на размытие при масштабировании в техническую поддержку производителя вашего монитора или телевизора.
Спрашивайте о поддержке масштабирования без размытия в комментариях к обзорам видеокарт, мониторов и телевизоров в СМИ.
Расскажите о проблеме размытия как можно большему количеству людей, указав ссылки на петицию и эту статью.
Разработчики игр
Встройте целочисленное масштабирование в разрабатываемые вами игры. В трёхмерных (3D-) играх это можно реализовать с помощью рендеринга в текстуру (Render To Texture) с последующим её масштабированием аппаратными средствами видеокарты с использованием алгоритма «По соседним» («Nearest Neighbour»). В игровом движке Unreal Engine доступна встроенная возможность масштабирования без размытия с помощью консольной переменной r.Upscale.Quality со значением 0.
Лоббируйте встраивание целочисленного масштабирования в популярные игровые движки Unity, CryEngine и проч., чтобы автоматически сделать эту функцию доступной в будущих играх на их основе.
Алгоритм
Готовый алгоритм реализации целочисленного масштабирования без размытия. Алгоритм — последовательность действий для достижения нужного результата.
Описание
Делим ширину SW и высоту SH экрана в физических пикселах соответственно на ширину W и высоту H подлежащего масштабированию изображения, получаем соответственно соотношения RW и RH.
Если коррекция соотношения сторон изображения не требуется (пикселы квадратные, масштабные коэффициенты по горизонтали и вертикали одинаковы):
Отбрасываем дробную часть у меньшего из соотношений RW и RH, получаем целочисленный масштабный коэффициент R.
Отображаем каждый пиксел исходного изображения как квадратную группу из R×R физических пикселов одинакового цвета, равного цвету пиксела исходного изображения.
Вычисляем ширину UW и высоту UH отмасштабированного изображения умножением соответственно ширины W и высоты H исходного изображения на масштабный коэффициент R.
Если коррекция соотношения сторон изображения требуется (пикселы прямоугольные, масштабные коэффициенты по горизонтали и вертикали разные):
Отбрасываем дробную часть у соотношений RW и RH, получаем максимальные целочисленные коэффициенты MRX по горизонтали и MRY по вертикали соответственно.
Умножаем ширину 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 по этой же оси.
Если дробная часть полученного значения не равна 0,5, округляем до ближайшего целого числа.
В противном случае округляем в направлении, при котором погрешность соотношения сторон минимальна. Если погрешности в обоих направлениях одинаковы, округляем в направлении, при котором соотношение сторон ближе к исходному.
Полученное целое число — масштабный коэффициент по этой оси — RX (по горизонтали) или RY (по вертикали).
Вычисляем ширину UW и высоту UH отмасштабированного изображения умножением ширины W и высоты H исходного изображения на масштабные коэффициенты RX по горизонтали и RY по вертикали соответственно.
Выравниваем отмасштабированное изображение по центру экрана:
Из ширины SW и высоты SH экрана вычитаем соответственно ширину UW и высоту UH отмасштабированного изображения, результаты делим на 2, отрасываем дробную часть, полученные числа обозначаем X и Y соответственно.
Отмасштабированное изображение выводим на расстоянии X по горизонтали и Y по вертикали от верхнего-левого угла экрана.
Оставшееся экранное пространство вокруг отмасштабированного изображения заполняем чёрным цветом.
Пример без коррекции соотношения сторон
Требуется вывести изображение 640×480 (VGA) на экране 1920×1080 (Full HD):
1920 / 640 = 3
1080 / 480 = 2,25
2,25 меньше, чем 3. Отбрасываем дробную часть 0,25, получаем 2. Значит, выводим каждый пиксел исходного изображения как группу 2×2 физических пиксела.
Ширина и высота отмасштабированного изображения — 1280 (640 * 2) и 960 (480 * 2) соответственно. Значит, для центрирования на экране выводим отмасштабированное изображение на расстоянии 320 ((1920 - 1280) / 2) пикселов по горизонтали и 60 ((1080 - 960) / 2) пикселов по вертикали от верхнего-левого угла экрана.
Пример с коррекцией соотношения сторон
Требуется вывести изображение 400×254 с целевым соотношением сторон 4:3 на экране 3840×2160 (4K):
3840 / 400 = 9,6
2160 / 254 ≈ 8,5
Отбрасываем дробную часть у полученных соотношений, получаем максимальные целочисленные коэффициенты 9 по горизонтали и 8 по вертикали соответственно.
Умножаем ширину 400 и высоту 254 изображения на 9 и 8 соответственно, получаем ширину 3600 и высоту 2032 области, в которую будет вписано отмасштабированное изображение.
Соотношение сторон области 1,77 больше целевого соотношения сторон 4:3 (≈ 1,333). Поэтому:
масштабный коэффициент по вертикали принимаем равным 8;
умножаем максимальную высоту 2032 на целевое соотношение сторон 4:3 (≈ 1,333), получаем приблизительную отмасштабированную ширину 2709,333.
Делим 2709,333 на исходную ширину 400 изображения, получаем 6,773, округляем, получаем масштабный коэффициент 7 по горизонтали. Таким образом, размер пиксела — 7×8.
Ширина и высота отмасштабированного изображения — 2800 (400 * 7) и 2032 (254 * 8) соответственно. Фактическое соотношение сторон — около 1,378 ( (2800 / 2032)), погрешность относительно целевого соотношения 4:3 (≈ 1,333) — около 3,35%.
Для центрирования на экране выводим отмасштабированное изображение на расстоянии 520 ((3840 - 2800) / 2) пикселов по горизонтали и 64 ((2160 - 2032) / 2) пиксела по вертикали от верхнего-левого угла экрана.
Эталонная отрисовка
Изображения ниже показывают, как должны выглядеть результаты целочисленного масштабирования без размытия без коррекции соотношения сторон. При правильной реализации целочисленного масштабирования результаты масштабирования приведённых исходных изображений должны быть идентичны приведённым образцам отмасштабированных изображений.
Во избежание влияния искажений, вносимых веб-браузером, рекомендуется сохранить изображения на компьютер и просматривать их сторонней самостоятельной программой в масштабе 100%. Вы также можете скачать все изображения в виде единого архива (80 КБ).
Простейший интерфейс для управления масштабированием без размытия может быть представлен единственной галкой (флажком) «Предотвращать размытие при масштабировании», включающей целочисленное масштабирование без размытия.
Более гибкий вариант — раздельное управление размытием и целочисленностью масштаба. Тогда нужны две настройки:
для отключения размытия вне зависимости от целочисленности или дробности масштабного коэффициента — в результате просто используется алгоритм «По соседним» вместо билинейной интерполяции;
для использования строго целочисленных масштабных коэффициентов с целью предотвращения искажений изображения в режиме масштабирования без размытия.
Целочисленность имеет смысл в основном в сочетании с отсутствием размытия, поэтому второй параметр можно делать доступным только при выборе первого. Но для большей гибкости или упрощения технической реализации интерфейса они могут быть независимыми.
Каждая из двух настроек может быть представлена либо галкой, либо списком из двух взаимоисключающих вариантов, один из которых выбран по умолчанию.
Галка + выбор переменности размера пиксела
Потенциально наиболее интуитивно-понятный пользовательский интерфейс мог бы содержать галку (флажок) «Предотвращать размытие при масштабировании».
Включение галки включало бы алгоритм масштабирования «По соседним» и одновременно делало бы доступной дополнительную настройку «Размер пиксела» с двумя вариантами на выбор:
одинаковый
(без искажений изображения, но возможны чёрные полосы вокруг изображения);
переменный
(максимальное использование площади экрана ценой некоторых искажений изображения).
Текст в скобках можно было бы отображать уменьшенным шрифтом или динамически отображать как подсказку, появляющуюся при наведении указателя мыши на соответствующий вариант.
Раздельные настройки для фильтрации и целочисленного масштаба
Пользовательский интерфейс мог бы быть аналогичным интерфейсу RetroArch, в видеонастройках которого есть два булевых (вкл./выкл.) параметра:
«Билинейная фильтрация»;
«Целочисленный масштаб».
Первый параметр включает/выключает размытие, второй — включает/выключает использование исключительно целочисленных масштабных коэффициентов для идеального масштабирования без искажений изображения.
Такой интерфейс допускает сочетание размытия с целочисленным масштабом, но на практике это не имеет смысла.
Термины «билинейная фильтрация» и «целочисленный масштаб» могут быть недостаточно понятны непродвинутым пользователям.
Два новых пункта в линейном списке режимов масштабирования
Можно добавить два новых пункта в существующий список классических режимов масштабирования («По центру», «Растянуть», «Растянуть с сохранением соотношения сторон»):
«Предотвращать размытие (максимальное использование экрана, возможны искажения)»;
«Предотвращать размытие и искажения (возможны чёрные полосы вокруг изображения)».
Этот вариант пользовательского интерфейса представляет собой компромисс между понятностью для пользователя и простотой технической реализации интерфейса.
Вопросы и ответы
Это то же самое, что «Nearest Neighbour»?
Лишь частично. Результаты применения алгоритма «Nearest Neighbour» («По соседним», «Ближайший сосед») и целочисленного масштабирования одинаковы только при целочисленных масштабных коэффициентах — например, 2 или 3.
При дробных масштабных коэффициентах (например, 4,5 при масштабировании 640×480 до 4K) «Nearest Neighbour» приводит к искажению изображения.
При целочисленном масштабировании масштабный коэффициент всегда целочисленный (например, ровно 4 для случая 640×480→4K) — вне зависимости от соотношения физического и логического разрешений. Пространство, которое может остаться пустым из-за некратности разрешений, заполняется чёрным, как в режиме центрирования.
Чем это отличается от 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), но с почти вдвое более высоким быстродействием. При целочисленном масштабировании без размытия полноценно просчитываются все пикселы изображения, которое затем увеличивается без внесения в него каких-либо изменений и вычисления каких-либо усреднённых цветов.
Чем это отличается от повышения резкости (sharpening)?
Целочисленное масштабирование без размытия не имеет отношения к повышению контурной резкости (sharpening). Целочисленное масштабирование предотвращает потери качества, обусловленные размытием, а повышение резкости призвано повысить разборчивость уже размытого изображения.
Имеется в виду отключение сглаживания?
Нет. Размытие не имеет отношения к сглаживанию (antialiasing). Сглаживание применяется при отрисовке (рендеринге) трёхмерной сцены, а размытие добавляется при увеличении уже отрисованного растрового изображения как набора точек. Целочисленное масштабирование можно (и следует) использовать в сочетании со сглаживанием. Вы включаете сглаживание в игре, выключаете размытие при масштабировании в видеодрайвере и получаете изображение Full HD на 4K-мониторе с таким же качеством, как на мониторе с физическим разрешением Full HD.
Но ведь без размытия пикселы будут заметны?
Это не всегда так, а когда так — не обязательно плохо.
Заметность пикселов зависит от сочетания разрешения дисплея, разрешения исходного изображения и расстояния до экрана. Например, в разрешении Full HD на 4K-мониторе диагональю 24″ на типичном расстоянии 50-60 см от экрана логические пикселы почти неразличимы, и размытие лишь бессмысленно снижает резкость. Теперь представьте себе масштабирование 4K в 8K или 8K в 16K в тех же условиях.
Уместность заметной пикселизации зависит от типа исходного изображения: например, для пиксельной графики (pixel art) пикселизация — задуманный эффект, и размытие искажает авторский замысел.
Это только для пиксельной графики, эмуляторов и старых игр?
Нет. Другой важнейший сценарий использования целочисленного масштабирования — повышение быстродействия в современных трёхмерных играх в разрешении Full HD на 4K-мониторе без связанных с размытием потерь качества по сравнению с мониторами с физическим разрешением Full HD.
Но мне нравится размытие!
Без проблем. Целочисленное масштабирование задумано как включаемо-выключаемая (опциональная) функция. Если вам нравится размытие, вы сможете просто не включать целочисленное масштабирование в настройках видеодрайвера или дисплея.
Разве в OpenGL и DirectX это не встроено?
В программных интерфейсах отрисовки трёхмерной графики типа OpenGL (режим GL_NEAREST) и DirectX алгоритм «Nearest Neighbour» действительно доступен, но предназначен для масштабирования текстур. Хотя разработчики отдельно взятой игры могут косвенно использовать эту возможность для целочисленного масштабирования в конкретной игре, масштабирование текстур не имеет прямого отношения к универсальному полноэкранному масштабированию, прозрачному для операционной системы и программ.
Зачем 4K-монитор, если играть всё равно в Full HD?
Компьютеры используются не только для игр:
комфорт при любой работе с текстом (просмотр веб-страниц, текстовые редакторы, программирование, веб-разработка), схемами, чертежами, графиками на 4K-мониторе несоизмеримо выше, чем на FHD-мониторе, благодаря увеличенной детализации, невидимой межпиксельной сетке и значительно сниженному «мельтешащему» попеременному мерцанию субпикселов;
более высокое физическое разрешение позволяет с более высоким качеством просматривать фотографии;
более высокое физическое разрешение позволяет увеличить глубину (разрядность) цвета без мерцания — путём отображения усреднённых оттенков с помощью соседних пикселов, отображающих слегка разные оттенки.
Даже если компьютер достаточно быстр для запуска игр в разрешении 4K, не все игры работают в этом разрешении правильно: например, в «Cities XL Platinum» элементы управления становятся слишком мелкими, а в «Bionic Commando Rearmed» не видны элементы головоломок на мини-уровнях «Hack enemy network».
Чем выше физическое разрешение, тем полнее может использоваться экран при целочисленном масштабировании. Например, при масштабировании 320×240 до Full HD теряется (заполняется чёрным) 1/9 (11%) высоты экрана (1080/240 = 4,5), а на 4K-дисплее коэффициент составляет ровно 9, и изображение занимает всю высоту экрана. На 8K-дисплеях то же будет применимо к разрешению 640×480; кроме того, можно будет без потерь качества или экранного пространства использовать любое из типичных разрешений: HD (1280×720, 6x), FHD (1920×1080, 4x), QHD (2560×1440, 3x), 4K (3840×2160, 2x).
Разве это не задача дисплея?
Ложное противопоставление. Поддержка масштабирования видеодрайвером не противоречит поддержке со стороны дисплея, и наоборот. Даже если новые дисплеи начнут поддерживать масштабирование без размытия, владельцам существующих дисплеев это не поможет, а масштабирование средствами видеодрайвера — поможет.
Разве это не задача операционной системы?
У Windows нет доступа к содержимому экрана в реальном (exclusive) полноэкранном режиме. Для возможности реализации полноэкранного масштабирования средствами Windows нужно было бы принципиально изменить модель видеодрайверов Windows (WDDM), и даже в этом случае не исключалась бы дополнительная задержка (lag) по сравнению с масштабированием собственными средствами видеодрайвера.
Не лучше ли использовать DLSS?
Метод DLSS не является универсальным решением:
доступен только на современных видеокартах nVidia;
требует индивидуальной поддержки со стороны каждой конкретной игры;
может приводить к разнообразным непредсказуемым артефактам изображения;
предназначен для трёхмерных игр и неприменим к играм других типов — например, основанным на пиксельной графике (pixel art).
А если источник сигнала — не компьютер?
Да, источником сигнала для дисплея не обязательно является компьютер, это может быть, например, игровая приставка или видеоплеер, выводящий видеосигнал в фиксированном разрешении HD или FHD. В таких случаях масштабирование средствами видеодрайвера бессильно, и необходимо масштабирование средствами самого дисплея. Но это никак не умаляет важность сценариев использования масштабирования средствами видеодрайвера.
Прогресс
Мониторы — анонсировано для EVE Spectrum
Поддержка целочисленного масштабирования без размытия планируется в компьютерном мониторе, разрабатываемом в рамках проекта EVE Spectrum с учётом обратной связи от сообщества.
Такое масштабирование планируется включить по умолчанию, о чём сказано в разделе «Feature requests» на странице обновлённых технических характеристик от .
Первая модель монитора будет иметь разрешение 2560×1440 (QHD) при диагонали 27″. ЖК-матрица — LG 27GL850 типа «Nano IPS» со временем отклика 1 мс и частотой обновления до 165 Гц. Поддерживается технология переменной частоты обновления (variable refresh rate, VRR) «FreeSync 2» с минимальной частотой 48 Гц.
Intel — поддержка для процессоров Ice Lake (Gen10)
Анонс и статья
Поддержка полноэкранного целочисленного масштабирования без размытия доступна в видеодрайвере 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.
nVidia — поддержка в драйвере 436.02 для поколения 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) графической подсистемой (встроенное графическое ядро + дискретная видеокарта), в которых настройками экрана управляет встроенное графическое ядро. По некоторым данным, одним из таких ноутбуков является MSI GS65 Stealth 9SG, сочетающий видеоядро Intel UHD Graphics 630, встроенное в процессор Intel i7-9750H, и мобильную дискретную видеокарту nVidia GeForce RTX 2080.
Кроме того, согласно примечаниям к выпуску (release notes), смена разрешения при сочетании режима целочисленного масштабирования с режимом расширенного динамического диапазона (HDR) может приводить к «падению» системы («синему экрану смерти», или BSOD) или зависанию компьютера.
Согласно nVidia, несовместимость с HDR и пользовательскими разрешениями — непреодолимое фундаментальное ограничение программируемого фильтра, использованного для реализации целочисленного масштабирования, и это невозможно исправить как минимум для видеокарт nVidia поколения Turing. Представители nVidia говорят, что целочисленное масштабирование невозможно задействовать параллельно с так называемым Scan Out Compositor, используемым, например, для реализации DSR или пользовательских разрешений.
Недоступно для видеокарт предыдущих поколений
Для видеокарт предыдущих поколений в Windows-версии драйвера nVidia GeForce функция недоступна. 25 марта 2019 года представитель nVidia сообщил, что реализация масштабирования без размытия в видеодрайвере для Windows не планируется, признав при этом, что сам алгоритм тривиален.
В качестве причины называется невозможность такой реализации, которая не потребовала бы постоянного сопровождения («ongoing continuous support») на фоне регулярных изменений WDDM-спецификации видеодрайверов в Windows 10.
При этом представители nVidia игнорируют вопросы о том, не требует ли такого же постоянного сопровождения существующая технология DSR, тоже реализующая виртуализацию разрешения, прозрачную для операционной системы и полноэкранных программ.
nVidia — ограниченная поддержка в Linux-драйвере
В видеодрайвере nVidia GeForce для операционных систем Linux, Solaris и FreeBSD начиная с версии 384.47 () доступен алгоритм масштабирования «По соседним» («Nearest Neighbour») в рамках функциональности фильтров трансформации (transform filter). Включается командой следующего вида:
nvidia-settings -a CurrentMetaMode="DP-1: 3840x2160_60 {ViewPortIn=1920x1080, ViewPortOut=3840x2160, ResamplingMethod=Nearest }"
где:
DP-1 — видеовыход, к которому подключён монитор;
3840x2160 — разрешение сигнала, получаемого монитором; должно быть равно физическому разрешению монитора, иначе будет размытие из-за масштабирования средствами монитора;
ViewPortIn — размер области отрисовки (рендеринга) в логических точках (пикселах);
ViewPortOut — размер изображения в физических точках после масштабирования;
ResamplingMethod — алгоритм масштабирования (значение по умолчанию — Bilinear).
Результат масштабирования может быть меньше физического разрешения монитора. Например, для вывода изображения размером 1280×720 с двукратным увеличением (пикселами 2×2) по центру экрана монитора с физическим разрешением 3840×2160 нужна следующая команда:
nvidia-settings -a CurrentMetaMode="DP-1: 3840x2160_60 {ViewPortIn=1280x720, ViewPortOut=2560x1440+640+360, ResamplingMethod=Nearest }"
где 640 и 360 — сдвиги в физических пикселах от верхнего левого угла по горизонтали и вертикали соответственно, необходимые для центрирования отмасштабированного изображения.
Команды можно исполнить в терминале, который можно открыть сочетанием клавиш Ctrl+Alt+T.
Программная реализация и быстродействие
На аппаратном уровне в видеокартах nVidia реализована только билинейная интерполяция с размытием, поэтому алгоритм масштабирования «По соседним» реализован программно и задействует часть вычислительных ресурсов графического процессора. Теоретически это может несколько снизить максимальное быстродействие видеокарты. На практике быстродействие примерно одинаково вне зависимости от типа интерполяции: «По соседним» (Nearest) или билинейная (Bilinear).
К сожалению, в некоторых играх к серьёзному падению быстродействия приводит сам факт использования фильтра трансформации. Например, в игре «F1 2017» в разрешении 1280×720 при использовании фильтра трансформации быстродействие ниже, чем в разрешении 1920×1080 в обычном полноэкранном режиме. При масштабировании игры при её работе в оконном режиме быстродействие заметно выше, чем при полноэкранном масштабировании средствами фильтра трансформации, но всё равно ниже, чем в обычном полноэкранном режиме.
Только оконные и псевдополноэкранные игры
К сожалению, функция работает только с оконными и псевдополноэкранными (выводимыми поверх рабочего стола ОС) играми. К реально полноэкранным играм, переключающим разрешение монитора (например, «Euro Truck Simulator 2») масштабирование не применяется.
При этом во многих псевдополноэкранных играх функция работает неправильно: изображение отрисовывается в разрешении, выбранном в настройках игры (например, 1920×1080), затем масштабируется с размытием до разрешения ViewPortOut (например, 3840×2160), затем из него вырезается верхняя-левая или нижняя-левая часть, соответствующая размеру ViewPortIn (например, 1920×1080), и лишь эта часть выводится на монитор.
Проблема не зависит от конкретного окружения рабочего стола (desktop environment) и проявляется как минимум в Unity (Ubuntu 17.04) и GNOME (Ubuntu 17.10).
Чтобы при работе в оконном режиме была видна максимально возможная часть полезного пространства окна игры, можно включить автоматическое скрытие панели задач (Dock) в настройках Ubuntu (Параметры → Панель задач → Автоматически скрывать панель задач), а для автоматического скрытия верхней панели использовать GNOME-расширение Hide Top Bar. Для минимизации высоты заголовочной панели окна игры имеет смысл переключиться на системный масштаб 100%.
Мышь и разрешение
Сопутствующая проблема — даже если результат отрисовки игры виден целиком, её меню, кнопки и другие элементы управления могут быть недоступны для наведения указателя и щелчков мышью, если не переключиться на нужное логическое разрешение (ViewPortIn) в настройках игры до включения Nearest-режима в видеодрайвере.
Это связано с тем, что по умолчанию игра может запускаться в выходном (ViewPortOut) разрешении видеодрайвера вместо логического (ViewPortIn). Это же может приводить к серьёзному снижению быстродействия: игра будет сначала отрисовываться в высоком разрешении, затем масштабироваться в низкое, а затем — снова в высокое с интерполяцией «По соседним».
Официальные комментарии nVidia
Один из разработчиков Linux-драйвера Аарон Платтнер (Aaron Plattner) считает, что проблема не в драйвере, а в том, что игры неправильно трактуют данные, предоставляемые программной подсистемой RandR.
Он признаёт, что, учитывая количество неправильно работающих игр, имело бы смысл универсальное решение, не зависящее от конкретной игры. В качестве возможной реализации такого решения он упоминает гипотетическую LD_PRELOAD-библиотеку, которая могла бы перехватывать вызовы функций библиотеки libXrandr и подменять результаты. При этом он не сообщает, планирует ли сама nVidia разрабатывать и распространять такое решение вместе с видеодрайвером.
Проверенные игры
В таблице — результаты проверки некоторых игр в виртуальном разрешении Full HD (1920×1080) на мониторе Dell P2415Q с физическим разрешением 4K (3840×2160) в операционной системе Ubuntu версий 17.10 и 18.04.
AMD — включено в опрос, реализуется для Linux
Windows — включено в опрос
В видеодрайвере AMD для Windows целочисленное масштабирование без размытия недоступно. Но AMD включила эту функцию («GPU Integer scaling support») в список потенциально планируемых функций в официальном опросе, призванном помочь определить, какие из функций наиболее востребованы пользователями.
Учитывая, что Intel и nVidia уже реализовали масштабирование без размытия в видеодрайверах для Windows, поддержку со стороны AMD можно ожидать в конце 2019 года. Преимуществами Windows-реализации AMD на фоне конкурентов могли бы стать:
поддержка функции вне зависимости от поколения видеокарты;
поддержка Windows 7, почти столь же распространённой, как Windows 10.
Linux — работа по реализации для ядра 5.4
Идёт работа по реализации поддержки целочисленного масштабирования без размытия в рамках специфичную для графики AMD части ядра Linux находящейся в разработке версии 5.4, выпуск стабильной версии которой запланирован на конец 2019 года.
Судя по программному коду и описанию патча от , целочисленное масштабирование будет прозрачно использоваться в существующем режиме центрирования и как самостоятельный режим масштабирования доступно не будет. Работа по реализации начата .
Linux — ограниченная поддержка в XRandR
Системная Linux-программа XRandR для управления графической подсистемой позволяет включить масштабирование без размытия вне зависимости от производителя графического чипа. Функция доступна в экспериментальной версии, находящейся в разработке, и включается такой командой:
DP-1 — условное обозначение видеовыхода, к которому подключён монитор;
0.5 — понижающий коэффициент: например, 0.5 на 4K-мониторе (3840×2160) включит виртуальное разрешение Full HD (1920×1080);
Увидеть обозначение видеовыхода можно в панели управления видеокартой либо в списке, выводимом командой:
xrandr | grep " connected " | awk '{ print$1 }'
Последняя стабильная по состоянию на версия XRandR 1.5 поддерживает масштабирование, но не поддерживает параметр --filter, поэтому отключение размытия в ней недоступно. При попытке использования параметра --filter выводится такое сообщение об ошибке:
xrandr: unrecognized option '--filter'
Установка экспериментальной версии XRandR
Внимание: установка экспериментальных версий фундаментальных системных программ в Linux может повлиять на работоспособность всей системы, отдельных её функций или сторонних программ.
Установить экспериментальную версию XRandR можно такой последовательностью команд:
git clone git://anongit.freedesktop.org/xorg/app/xrandr xr
cd xr
./autogen.sh
sudo make install
Перед этим может потребоваться установить дополнительные пакеты или экспериментальные версии уже установленных пакетов. Например, в только что установленной Ubuntu 18.10 достаточно установить пакеты git, xorg-dev, xutils-dev, autoconf следующими командами:
Совместимость с играми и ограничения аналогичны таковым у фильтров трансформации в Linux-драйвере nVidia: масштабирование возможно только для игр, работающих в оконном или псевдополноэкранном (borderless) режиме.
Некоторые игры в псевдополноэкранном режиме выводятся в усечённом виде: например, при внутриигровом разрешении Full HD на 4K-мониторе обычно видна нижняя левая или верхняя левая четверть изображения. В реальном (exclusive) полноэкранном режиме видна ещё меньшая часть изображения, т. к. не только часть исходного изображения масштабируется до физического разрешения монитора, но и монитор переключается в меньшее разрешение.