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


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

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

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

Масштабирование — это изменение размеров (разрешения) изображения. Оно необходимо, если физическое разрешение (количество точек по горизонтали и вертикали) монитора или телевизора отличается от разрешения подаваемого на него видеосигнала: например, если игра в разрешении 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.
  • Для оконных программ — экранная лупа Windows (Windows Magnifier). Недостатки: неудобный интерфейс, задержка (lag) и подёргивание.
  • Для запуска DOS-игр — эмулятор DOSBox с определёнными настройками.
  • DgVoodoo (эмулятор Glide и «обёртка» для DirectX 8 и ниже) и DXGL (OpenGL-реализация DirectDraw) поддерживают алгоритм масштабирования без размытия «по соседним» (Nearest Neighbour) (источники: 1, 2).
  • Для просмотра изображений — бесплатная программа XnView со снятой галкой Tools → Options → View → High quality zoom → Enlarge (Инструменты → Опции → Вид → Высокое качество при масштабировании → При увеличении). Ограничение: настройка применяется ко всем просматриваемым изображениям вне зависимости от кратности их размеров размеру окна программы и использования полноэкранного режима.
  • Для просмотра видео — бесплатный плеер MPC-HC с настройкой View → Options → Playback → Output → Resizer → Nearest neighbor (Вид → Настройки → Воспроизведение → Вывод → Интерполяция → Ближайший сосед). Ограничение: настройка применяется ко всем видео вне зависимости от кратности размеров видеокадра размеру окна программы и использования полноэкранного режима.
  • Для оконных 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 — такой функции лишена.

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

Аппаратные

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

    • может вносить дополнительную задержку (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 и проч., чтобы создаваемые на них игры автоматически были снабжены этой функцией.