Прокрутить к контенту ↓


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

Краткое описание
Масштабирование, встроенное в мониторы и видеодрайверы, приводит к размытию. Решить проблему можно реализацией целочисленного масштабирования на уровне видеодрайверов, а пока есть полурешения и косвенные способы побудить разработчиков видеодрайверов к реализации масштабирования без потерь качества.

В двух словах

Проблема

Мониторы и видеокарты при разрешении видеосигнала ниже физического разрешения экрана размывают изображение, даже когда этого можно избежать. Из-за этого Full HD на 4K-мониторе выглядит хуже, чем на Full-HD-мониторе.

Решение

При масштабировании можно было бы каждую логическую точку отображать как квадратную группу из целого (2×2, 3×3) количества физических точек одинакового цвета и выводить результат по центру экрана. См. демо.

Как повлиять

  • Подпишитесь под петицией о реализации масштабирования без размытия в видеодрайвере.
  • Расскажите о проблеме размытия друзьям и знакомым, указав ссылки на петицию и статью.
  • Выразите свою поддержку на форумах GeForce, AMD, Intel, Reddit.
  • Пожалуйтесь на размытие в техподдержку: nVidia, AMD (1, 2), Intel (1, 2).
  • Предложите встроить функцию в популярные игровые движки: Unreal Engine, Unity, CryEngine.

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

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

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

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

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

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

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

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

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

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

Этим целочисленное масштабирование принципиально отличается от масштабирования путём интерполяции «по соседним» (nearest neighbour). Их результаты одинаковы только при целочисленных соотношениях физического и логического разрешений. При дробных соотношениях интерполяция «по соседним» приводит к искажению изображения, а при целочисленном масштабировании изображение всегда масштабируется с целочисленным коэффициентом и без потерь качества — даже если физическое и логическое разрешение некратны.

Примеры

Пиксель-арт

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

Фото

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

Демо

Для лучшего понимания сути целочисленного масштабирования без размытия см. демо-страницу.

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

  • На 4K-мониторах при диагонали 24—27″ при разрешении Full HD отдельные пикселы изображения почти неразличимы, и размытие не даёт никакого эффекта сглаживания, а просто бессмысленно снижает резкость, приводя к неоправданной потере качества.
  • Все 4K-мониторы масштабируют с размытием, поэтому проблему можно решить только средствами видеодрайвера.
  • В режиме nVidia G-Sync масштабирование монитора не задействуется (1, 2), поэтому единственный путь к правильному масштабированию — масштабирование средствами видеодрайвера.
  • В видеодрайверах nVidia и AMD уже реализованы технологии виртуализации разрешения — nVidia DSR и AMD VSR, и технически остаётся лишь добавить поддержку коэффициентов ниже 1.
  • Приобретение более быстродействующей видеокарты решением не является:

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

    Более мощная видеокарта здесь бессильна.

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

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

Игры

  • Использование масштабирования, встроенного в конкретную полноэкранную программу (например, игру). Обычно доступно только в 2D-играх: например, pixel-art-ориентированной Owlboy.
  • Для масштабирования 3D-игр можно использовать бесплатную программу GeDoSaTo. Недостатки:

    • поддерживает только относительно старые игры, использующие DirectX 9 и ниже;
    • работает лишь с некоторыми из них;
    • современные версии программы на некоторых системах не работают вообще, у автора этих строк заработала одна из предыдущих версий — Beta 10 Poltergeist.
  • DgVoodoo (эмулятор Glide и «обёртка» для DirectX 8 и ниже) и DXGL (OpenGL-реализация DirectDraw) поддерживают алгоритм масштабирования без размытия «по соседним» (Nearest Neighbour) (источники: 1, 2).

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

  • Эмулятор 8/16-битных игровых приставок higan для Windows начиная с версии 104 поддерживает целочисленное масштабирование (Settings → Video → Windowed Mode / Fullscreen Mode → Integral scaling). При этом для предотвращения размытия следует снять галку Settings → Video Emulation → Blurring, а параметр Settings → Video Shader установить в значение None вместо используемого по умолчанию Blur.
  • SNES-эмулятор Snes9x EX+ для Android поддерживает целочисленное масштабирование (Options → Video → Zoom → Integer-only). При этом для предотвращения размытия следует установить параметр Options → Video → Image Interpolation в значение None вместо используемого по умолчанию Linear.

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

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

Просмотр изображений и видео

  • Для просмотра изображений — бесплатная программа XnView со снятой галкой Tools → Options → View → High quality zoom → Enlarge (Инструменты → Опции → Вид → Высокое качество при масштабировании → При увеличении). Ограничение: настройка применяется ко всем просматриваемым изображениям вне зависимости от кратности их размеров размеру окна программы и использования полноэкранного режима.
  • Для просмотра видео — бесплатный плеер MPC-HC с настройкой View → Options → Playback → Output → Resizer → Nearest neighbor (Вид → Настройки → Воспроизведение → Вывод → Интерполяция → Ближайший сосед). Ограничение: настройка применяется ко всем видео вне зависимости от кратности размеров видеокадра размеру окна программы и использования полноэкранного режима.

Встроенные средства Windows

  • Для оконных программ — экранная лупа Windows (Windows Magnifier). Недостатки:

    • неудобный интерфейс — трудно точно совместить масштабируемую область с границами подлежащего масштабированию объекта;
    • при некратных размере подлежащего масштабированию объекта и разрешении монитора область вокруг объекта не заполняется однотонной заливкой, поэтому помимо подлежащего масштабированию объекта видны посторонние объекты;
    • в оконном режиме — задержка (lag) и подёргивание.
  • Для оконных Windows-программ, несовместимых с HiDPI — использование Windows 10, где, в отличие от Windows 7, старые программы при целочисленных системных масштабах автоматически масштабируются без размытия.

Прочее

  • Для отключения неоправданного размытия изображений на веб-страницах — расширение SmartUpscale для браузера Firefox.
  • Есть сведения, что размытие отсутствует при масштабировании с целочисленными коэффициентами средствами официального видеодрайвера Intel для операционной системы Linux.
  • Есть информация, что некоторые 4K-телевизоры Panasonic поддерживают возможность вывода Full-HD-сигнала без размытия. Например, в модели TX-55CX802B это реализуется параметром «1080p Pixel by 4 pixels» в меню «Picture → Option Settings». Судя по всему, эта возможность касается исключительно разрешения Full HD (1920×1080) и не работает при иных разрешениях входного видеосигнала (например, 1280×720). При этом аналогичная модель меньшего размера — TX-50CX802 — такой функции лишена. По некоторым данным, аналогичная функция доступна в режиме «Graphics» в некоторых моделях 4K-телевизоров Sony (например, X900E).

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

Аппаратные

  • Масштабирование средствами монитора. Преимущество по сравнению с масштабированием средствами видеодрайвера — экономия пропускной способности видеоинтерфейса и потенциальное снижение электромагнитного излучения от сигнального кабеля.
  • Устройство для масштабирования, подключаемое в разрыв между видеокартой и монитором. Существует аналогичное устройство UltraHDMI для вывода видеосигнала игровой приставки Nintendo 64 на интерфейс HDMI без потерь качества (обзор). Возможно, устройство можно построить на основе программируемых вентильных матриц FPGA: 1, 2. Потенциальные недостатки:

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

Программные

  • Масштабирование средствами видеодрайвера.
  • Программный эмулятор монитора, перехватывающий подлежащее выводу на монитор изображение, масштабирующий его и выводящий отмасштабированное изображение на физический монитор.
  • Реверс-инжиниринг (reverse engineering) существующих видеодрайверов с целью активации возможности масштабирования в бОльшую сторону помимо уже существующего масштабирования в меньшую сторону в уже существующей функции nVidia DSR или AMD VSR.

Что можно предпринять сейчас

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

  • Подписаться под петицией на Change.org о реализации целочисленного масштабирования без размытия на уровне видеодрайверов.
  • Рассказать о проблеме размытия как можно большему количеству людей, указав ссылки на петицию и эту статью.
  • Выразить свою поддержку в соответствующих существующих темах форумов GeForce, AMD, Intel, а также на Reddit.
  • Обратиться с жалобой на низкое качество масштабирования средствами видеодрайвера в техническую поддержку производителя видеочипа: nVidia, AMD (1, 2) или Intel (1, 2).

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

  • Реализовать встроенное целочисленное масштабирование в разрабатываемых ими играх.
  • Лоббировать встраивание целочисленного масштабирования в популярные игровые движки Unreal Engine, Unity, CryEngine и проч., чтобы создаваемые на них игры автоматически были снабжены этой функцией.

Прогресс

«По соседним» в Linux-драйвере nVidia 384.47+

В видеодрайвере nVidia GeForce для операционных систем Linux, Solaris и FreeBSD начиная с версии 384.47 () доступен алгоритм масштабирования «По соседним» (nearest neighbour). Включается командой следующего вида:

nvidia-settings -a CurrentMetaMode="DP-1: 3840x2160_60 {ViewPortIn=1920x1080, ViewPortOut=3840x2160, ResamplingMethod=Nearest }"

где параметр DP-1 задаёт видеовыход, к которому подключён монитор, ViewPortIn задаёт размер области отрисовки (рендеринга) в логических точках (пикселах), а ViewPortOut соответствует размеру изображения в физических точках после масштабирования.

Программная реализация и быстродействие

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

Неправильная работа в играх

К сожалению, во многих играх функция работает неправильно: изображение отрисовывается в разрешении ViewPortIn (например, Full HD), затем масштабируется с размытием до разрешения ViewPortOut (например, 4K), затем из него вырезается нижняя левая часть, соответствующая размеру ViewPortIn, и лишь эта часть выводится на монитор.

Проблема не зависит от конкретного окружения рабочего стола (desktop environment) и проявляется как минимум в Unity (Ubuntu 17.04) и GNOME (Ubuntu 17.10).

Один из разработчиков драйвера Аарон Платтнер (Aaron Plattner) считает, что проблема не в драйвере, а в том, что игры неправильно трактуют данные, предоставляемые программной подсистемой RandR.

Проверенные игры

Ниже приведены результаты проверки некоторых игр в виртуальном разрешении Full HD на мониторе Dell P2415Q с физическим разрешением 4K в операционной системе Ubuntu 17.10.

Видна нижняя-левая четверть изображения

Работают правильно

  • Oddworld New’n’Tasty.
  • Trine 2.
  • Half-Life 2. Но пункты меню не реагируют на указатель мыши — вероятно, указатель логически (в отличие от видимого положения) расположен дальше от верхнего-левого угла экрана пропорционально коэффициенту масштабирования.

Другие особенности

  • “Euro Truck Simulator 2” работает в разрешении 1920×1080, которое выводится напрямую на монитор, в обход масштабирования средствами видеокарты, поэтому имеет место размытие, обусловленное применением собственного механизма масштабирования монитора.
  • “The Cave” в целом работает нормально, но в настройках игры фигурировало разрешение 3840×2160 вместо реального эффективного разрешения 1920×1080. После переключения на 1920×1080 ничего визуально не изменилось, за исключением формально выбранного в игре разрешения.

Недоступно в драйвере nVidia для Windows

В Windows-версии драйвера nVidia GeForce функция недоступна.