Целочисленное масштабирование без размытия. Масштабирование бизнеса - это что такое? AMD - недоступно, но включено в опрос

Кратко

Проблема

Full HD на 4K-мониторе выглядит хуже , чем на Full-HD -мониторе.

Это происходит из-за размытия, всегда добавляемого мониторами и видео­драйверами при масштабировании, хотя при целочисленных масштабных коэффициентах (например, 2 в случае FHD→4K) этого можно избежать.

В результате в 3D-играх снижается резкость, белые линии становятся серыми, а пиксельная графика (pixel art ) перестаёт быть пиксельной.

Решение

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

Такое масштабирование без потерь качества можно встроить в драйверы видеокарт , но это до сих пор не сделано , хотя 4K-мониторы на рынке с 2014 года.

Что делать

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

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

Изображение на компьютерных мониторах и телевизорах состоит из точек (пикселов). Количество точек по горизонтали и вертикали называется разрешением.

Масштабирование - это изменение размеров (разрешения) изображения. Оно необходимо, если физическое разрешение монитора или телевизора отличается от разрешения подаваемого на него видеосигнала: например, если игра в разрешении 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 - слева и справа.

Коррекция соотношения сторон

Кроме того, алгоритм «По соседним» не предусматривает возможность коррекции соотношения сторон (aspect ratio ) изображения. Такая коррекция нужна, например, для старых игр, рассчитанных на соотношение сторон 4:3, но зачастую использовавших уменьшенное по вертикали разрешение 320×200 вместо 320×240, или 640×400 вместо 640×480.

Примеры

Пиксель-арт

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

Фото

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

  • (686 КБ) ;
  • (737 КБ) ;
  • (740 КБ) .

Демо

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

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

Ещё важнее с ростом физического разрешения

Чем выше физическое разрешение экрана, тем важнее и эффективнее целочисленное масштабирование.

  • Чем выше физическое разрешение экрана, тем труднее достичь комфортного быстродействия игр при его использовании. Разрешение 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).
  • Появляется возможность ещё полнее использовать площадь экрана путём использования логических пикселов с переменным размером с разницей в размере соседних пикселов в 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»);
  • в играх на основе пиксельной графики (pixel art ) быстродействие не является проблемой , а важен пикселизованный характер изображения без неуместного размытия, не соответст­вующего замыслу авторов игры;
  • некоторые игры (например, «Duck Tales Remastered») имеют фиксированное разрешение (например, Full HD), а поддержка остальных разрешений достигается масштабированием с размытием;
  • если экраном повышенного разрешения оснащён ноутбук , установка мощной видеокарты практически невозможна из-за естественных ограничений по габаритам, энергопотреблению и тепловыделению.

Видеокарта с более высоким быстродействием здесь бессильна .

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

Масштабирование, встроенное в игры

  • В некоторые игры масштабирование без размытия встроено. Обычно это доступно только в современных 2D-играх на основе пиксельной графики (pixel art ): например, Owlboy .
  • В игру (Quake на более современном движке) начиная с версии (2017-11-20) встроена возможность целочисленного масштабирования без размытия с коэффициентами до 400% с помощью конфигурационного параметра r_scale . Для использования этой возможности следует в подпапку ID1 папки игры поместить текстовый файл autoexec.cfg , содержащий параметр вида r_scale 4 , где 4 указывает на масштабный коэффициент. Например, при выбранном в игре разрешении 3840×2160 игра отрисовывается в разрешении 960×540 и масштабируется до 3840×2160 без размытия путём отображения каждого логического пиксела как квадратной группы из 16-ти (4×4) физических пикселов одинакового цвета.

Программы масштабирования

  • Для масштабирования Windows-игр, поддерживающих оконный режим, можно использовать программу .
  • Для масштабирования 3D-игр можно использовать программу GeDoSaTo . Недостатки:

    • поддерживает только относительно старые игры, использующие DirectX 9 и ниже;
    • работает лишь с некоторыми из них;
    • современные версии программы на некоторых системах не работают вообще, у автора этих строк заработала одна из предыдущих версий - Beta 10 Poltergeist .

Эмуляторы Glide и DirectX

Glide - программный интерфейс (API), использовавшийся в видеокартах 3dfx. Glide-эмуляторы позволяют играть в игры с поддержкой Glide на компьютерах, поддерживающих современные API DirectX и OpenGL.

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

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

  • Эмулятор 8/16-битных игровых приставок higan для Windows начиная с версии (2017-08-12) поддерживает целочисленное масштабирование (Settings → Video → Windowed Mode / Fullscreen Mode → Integral scaling Settings → Video Emulation → Blurring , а параметр Settings → Video Shader установить в значение None Blur .
  • В SNES -эмуляторе bsnes для Windows начиная с версии (2019-02-22) в режиме центрированного вывода (Settings → Output → Center ) автоматически применяется целочисленное масштабирование. При этом для предотвращения размытия следует снять галку Settings → Output → Blur Emulation , а параметр Settings → Shader установить в значение None вместо используемого по умолчанию Blur .
  • SNES -эмулятор Snes9x начиная с версии (2018-06-22) поддерживает целочисленное масштабирование (Video → Display Configuration (Display Settings) → General → Integer Scaling ). При этом для предотвращения размытия следует снять галку Video → Bilinear Filtering , а во избежание других искажений исходного изображения - в обоих выпадающих списках Video → Display Configuration (Display Settings) → Output Image Processing выбрать значение None .
  • SNES -эмулятор Snes9x EX+ для Android начиная с версии 1.4.4 (2011-09-21) поддерживает целочисленное масштабирование (Options → Video → Zoom → Integer-only ). При этом для предотвращения размытия следует установить параметр Options → Video → Image Interpolation в значение None вместо используемого по умолчанию Linear .
  • Cemu - экспериментальный эмулятор игровой приставки Wii U для Windows - начиная с версии 1.15.2 (2019-02-04) поддерживает алгоритм масштабирования «По соседним» («Nearest Neighbour ») (Options → General settings → Graphics → Upscale filter / Downscale filter → Nearest Neighbor ). Произвольное разрешение можно установить для каждой конкретной игры с помощью графических пакетов (Options → Graphic packs ). Эмулятор формально несовместим с HiDPI (не является DPI-aware), поэтому для гарантии отсутствия размытия рекомендуется отключить DPI-виртуализацию в свойствах его исполняемого файла.
  • Оболочка RetroArch Settings → Video → Integer Scale → On Settings → Video → Bilinear Filtering в значение Off .
  • Оболочка BizHawk для эмуляторов игровых приставок поддерживает челочисленное масштабирование (Config → Display → Scaling & Filtering → Expand pixels by integers only (e.g no 1.3333x) ). Для отключения размытия следует установить параметр Final Filter в значение None (по умолчанию). Но периодически изображение выводится с ошибочным соотношением сторон и искажёнными пропорциями пикселов.

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

  • Для запуска DOS-программ - эмулятор DOSBox ECE - улучшенная неофициальная версия программы DOSBox, поддерживающая целочисленное масштабирование без размытия. В отличие от обычной версии DOSBox, в ECE-версии реализовано полноценное масштабирование без использования фильтров , благодаря чему поддерживается масштабирование без размытия в полноэкранном режиме, масштабный коэффициент вычисляется автоматически и не ограничен малыми значениями (3x в официальных сборках DOSBox).

    В качестве значения параметра output в разделе конфигурационного файла (*.conf) для игры следует использовать значение openglpp или surfacepp либо не задавать этот параметр вовсе. Для отключения коррекции соотношения сторон (например, растяжения 320×200 до высоты 240, соответствующей соотношению 4:3) и включения строго квадратных пикселов служит параметр aspect=false в разделе конфигурационного файла. Включить вертикальную синхронизацию (V-Sync ) при output=openglpp можно параметром glfullvsync=true в разделе . Дополнительную информацию см. в readme -файле pixel-perfect -патча , включённом также и в дистрибутив DOSBox ECE (README for pixel-perfect patch.txt).

    Пример конфигурационного файла DOSBox ECE для игры «Epic Pinball»:


    fullscreen=true
    output=openglpp
    glfullvsync=true


    cycles=4000


    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 ). Ограничение: настройка применяется ко всем видео вне зависимости от кратности размеров видеокадра размеру окна программы и использования полноэкранного режима.

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

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

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

Телевизоры

  • Есть информация , что некоторые 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.

Прочее

  • Программа ScummVM , современная среда для запуска некоторых старых игр типа «Broken Sword», по умолчанию в полноэкранном режиме использует масштабирование «По соседним» («Nearest Neighbour »). В оконном режиме доступна также возможность вывода с фиксированными целочисленными масштабами 2x (200%) и 3x (300%) («Настройки → Графика → Граф. режим»), но глобальная настройка применяется только к играм с разрешением не более 320×240, а для игр с более высоким разрешением требуется задавать эту настройку с помощью индивидуального для игры набора настроек. Программа формально несовместима с HiDPI (не является DPI-aware), поэтому для гарантии отсутствия размытия рекомендуется отключить DPI-виртуализацию в свойствах её исполняемого файла. При дробных масштабных коэффициентах алгоритм «По соседним» приводит к искажениям, поэтому для игр, не требующих коррекции соотношения сторон, может иметь смысл использование ScummVM в оконном режиме в сочетании с целочисленным масштабированием с помощью программы .
  • Для отключения неоправданного размытия изображений на веб-страницах - расширение для браузеров Firefox и Chrome.
  • Есть сведения , что размытие отсутствует при масштабировании с целочисленными коэффициентами средствами официального видеодрайвера Intel для операционной системы Linux.
  • Операционная система Raspbian для мини-компьютеров Raspberry Pi начиная с 15 марта 2018 года поддерживает масштабирование без размытия с коэффициентом 200% с помощью параметра настроек «Pixel Doubling » на вкладке «System » в приложении «Raspberry Pi Configuration ».

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

Аппаратные

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

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

Программные

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

Что делать

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

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

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

  • Встройте целочисленное масштабирование в разрабатываемые вами игры. В трёхмерных (3D-) играх это можно реализовать с помощью рендеринга в текстуру (Render To Texture ) с последующим её масштабированием аппаратными средствами видеокарты с использованием алгоритма «По соседним» («Nearest Neighbour »). В игровом движке Unreal Engine доступна встроенная возможность масштабирования без размытия с помощью консольной переменной r.Upscale.Quality со значением 0 .
  • Лоббируйте встраивание целочисленного масштабирования в популярные игровые движки Unity , CryEngine и проч., чтобы автоматически сделать эту функцию доступной в будущих играх на их основе.

Алгоритм

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

Описание

  1. Делим ширину (A) и высоту (B) экрана в физических пикселах (точках) соответственно на ширину (C) и высоту (D) подлежащего масштабированию изображения.
  2. Выбираем меньшее из полученных соотношений.
  3. Отбрасываем дробную часть. Полученное целое число обозначаем E .
  4. Отображаем каждый пиксел исходного изображения как квадратную группу из E × E физических пикселов одинакового цвета, равного цвету пиксела исходного изображения. Ширина (F = C * E) и высота (G = D * E) отмасштабированного изображения в физических пикселах будут в E раз больше ширины (C) и высоты (D) исходного изображения соответственно.
  5. Выравниваем отмасштабированное изображение по центру экрана:

    1. из ширины (A) и высоты (B) экрана вычитаем соответственно ширину (F) и высоту (G) отмасштабированного изображения в физических пикселах, результаты делим на 2, отрасываем дробную часть, полученные числа обозначаем H и J соответственно;
    2. отмасштабированное изображение выводим на расстоянии H по горизонтали и J по вертикали от верхнего-левого угла экрана.
  6. Оставшееся экранное пространство вокруг отмасштабированного изображения заливаем чёрным цветом.

Пример

Например, требуется вывести изображение 640×480 на экране 1920×1080:

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) пикселов по вертикали от верхнего-левого угла экрана.

Прогресс

nVidia - ограниченная поддержка в Linux-драйвере

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

В видеодрайвере nVidia GeForce для операционных систем Linux, Solaris и FreeBSD начиная с версии 384.47 (2017-06-29) доступен алгоритм масштабирования «По соседним» 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) на мониторе с физическим разрешением 4K (3840×2160) в операционной системе Ubuntu версий 17.10 и 18.04.

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

В Windows-версии драйвера nVidia GeForce функция недоступна. 25 марта 2019 года официальный представитель nVidia заявил на форуме nVidia, что nVidia не планирует реализовывать масштабирование без размытия в видеодрайвере для Windows. В качестве причины называется невозможность такой реализации этой функции в Windows-драйвере, которая не потребовала бы постоянного сопровождения («ongoing continuous support »). Подробности не уточняются.

AMD - недоступно, но включено в опрос

В видеодрайверах AMD целочисленное масштабирование без размытия недоступно. Но AMD включила эту функцию («GPU Integer scaling support ») в список потенциально планируемых функций в официальном опросе , призванном помочь определить, какие из функций наиболее востребованы пользователями.

Linux - ограниченная поддержка в XRandR

Системная Linux-программа XRandR для управления графической подсистемой позволяет включить масштабирование без размытия вне зависимости от производителя графического чипа. Функция доступна в экспериментальной версии, находящейся в разработке, и включается такой командой:

xrandr --output DP-1 --scale 0.5 x0.5 --filter nearest

  • DP-1 - условное обозначение видеовыхода, к которому подключён монитор;
  • 0.5 - понижающий коэффициент: например, 0.5 на 4K-мониторе (3840×2160) включит виртуальное разрешение Full HD (1920×1080);

Увидеть обозначение видеовыхода можно в панели управления видеокартой либо в списке, выводимом командой:

xrandr | grep " connected " | awk "{ print$1 }"

Последняя стабильная по состоянию на 2019-03-27 версия 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 следующими командами:

sudo apt install git
sudo apt install xorg-dev
sudo apt install xutils-dev
sudo apt install autoconf

Только оконные и псевдополноэкранном игры

С играми и аналогичны таковым у фильтров трансформации в Linux-драйвере nVidia: масштабирование возможно только для игр, работающих в оконном или псевдополноэкранном (borderless ) режиме.

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

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

Масштабируемость - важный аспект электронных систем, программных комплексов , систем баз данных , маршрутизаторов , сетей и т. п., если для них требуется возможность работать под большой нагрузкой. Система называется масштабируемой , если она способна увеличивать производительность пропорционально дополнительным ресурсам. Масштабируемость можно оценить через отношение прироста производительности системы к приросту используемых ресурсов. Чем ближе это отношение к единице, тем лучше. Также под масштабируемостью понимается возможность наращивания дополнительных ресурсов без структурных изменений центрального узла системы.

В системе с плохой масштабируемостью добавление ресурсов приводит лишь к незначительному повышению производительности, а с некоторого «порогового» момента добавление ресурсов не даёт никакого полезного эффекта.

Вертикальное и

Вертикальное масштабирование

Вертикальное масштабирование - увеличение производительности каждого компонента системы с целью повышения общей производительности. Масштабируемость в этом контексте означает возможность заменять в существующей вычислительной системе компоненты более мощными и быстрыми по мере роста требований и развития технологий. Это самый простой способ масштабирования, так как не требует никаких изменений в прикладных программах, работающих на таких системах.

Горизонтальное масштабирование

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

Показатели

См. также

Примечания

Ссылки

Без него невозможно построение ни одной географической карты. Что такое масштаб? И какие виды масштабов существуют в картографии и геодезии? Об этом пойдет речь в данной статье.

Что такое масштаб?

Масштаб - это слово немецкое (masstab), которое состоит из двух частей: mass - "мера, величина" и stab - "палка, жердь". Мерная жердь - вот как можно перевести данный термин.

Что такое масштаб? В общей трактовке это математическая величина, которая показывает, во сколько раз уменьшена модель (изображение) по сравнению с оригиналом. Это понятие активно используется в математике, картографии, моделизме, геодезии и проектировании, фотоискусстве, программировании.

Иными словами, масштаб - это соотношение двух линейных размеров. В картографии он показывает, во сколько раз отрезок на карте (или плане) уменьшен по сравнению с реальной длиной этого же отрезка. При составлении любой географической карты невозможно изобразить объекты (лес, поселок, здание и т. п.) в реальную величину. Поэтому все величины многократно уменьшают (в 5, 10, 100, 1000 раз и так далее). Масштаб карты - это как раз и есть данная величина, выраженная числом.

Виды масштабов

Масштаб показывают на картах и чертежах с помощью чисел либо графически. Соответственно, выделяется несколько их видов.

Численный масштаб имеет вид дроби. Он наиболее распространен в картографии. Такое обозначение многие из нас видели в нижней части топографической карты или плана местности. Численный масштаб карты имеет следующий вид (к примеру): 1:100 000. Это значит, что реальная длина отрезка на местности в 100 000 раз больше, чем его длина на данной карте.

Именованный масштаб используется тогда, когда необходимо узнать, чему равен масштаб карты. Его также довольно часто указывают на географических картах. Он имеет такой вид: в 1 см - 1 км.

Линейный масштаб - это уже графический тип масштаба. Он являет собой линейку, которая разделена на графы соответствующих размеров. На фото выше представлен данный вид масштаба.

Поперечный масштаб - это более усложненный вариант графического вида. Он используется для максимально точных измерений, и его можно встретить на более серьезных картах.

Как правильно пользоваться масштабом карты? Предположим, вам необходимо по конкретной карте узнать реальное расстояние между селами А и В. При этом вам дан такой масштаб: в 1 см - 0,5 км (или 1:50 000). Для этого нужно взять обычную линейку и измерить расстояние между двумя пунктами по карте. Затем полученную величину (предположим, это отрезок длиной в 5 сантиметров) следует умножить на 0,5 км, соответственно масштабу нашей карты. Таким образом, мы получим правильный ответ: расстояние между селом А и селом В составляет 2,5 километра.

Разновидности карт (по масштабу)

Масштаб выступает одним из критериев для классификации географических карт. Так, согласно ему, все карты делятся на:

  • мелкомасштабные (масштаб до 1:1 000 000);
  • среднемасштабные (от 1:1 000 000 до 1:200 000);
  • крупномасштабные (от 1:200 000 и более).

Разумеется, на крупномасштабных картах местность более детализирована: здесь могут быть показаны отдельные улицы или даже здания. Чем крупнее масштаб карты, тем больше объектов местности на ней можно изобразить.

Мелкомасштабные географические карты, как правило, используются для изображения полушарий и континентов, среднемасштабные - для государств и их частей, крупномасштабные - для отдельных, небольших по площади территорий. С крупномасштабными картами очень хорошо знакомы военные, краеведы, а также туристы.

Картографическая генерализация

Какой бы детальной ни была карта, на ней все равно не получится отобразить абсолютно все объекты и детали, которые присутствуют на данной местности. В этом как раз и заключается сущность понятия "картографическая генерализация".

Слово generalis можно перевести с латинского языка как "обобщенный". Генерализация - это процесс отбора тех географических объектов, которые будут изображены на конкретной карте. Причем этот процесс является объективным, целесообразным и научно обоснованным.

Чтобы понять, что такое генерализация, достаточно вспомнить те карты, которые вы наверняка держали в своих руках. Так, на карте Евразии вы вряд ли найдете город Череповец. А вот на карте Вологодской области он обязательно будет отмечен.

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

В заключение

Итак, что такое масштаб? Данная величина показывает, насколько уменьшено изображение, по сравнению с реальными размерами изображаемого объекта. Это понятие получило наибольшее распространение в картографии и географии. Существует несколько видов масштабов: численный, именованный, линейный и поперечный.

С термином "масштаб" тесно связано понятие картографической генерализации. Этот процесс позволяет топографам отобрать важнейшие географические объекты и отобразить их на географической карте.

Всем дарова. Сегодня будем говорить о непонятном, а именно о том что такое Масштабирование ГП AMD. По названию понятно что масштабирование, но чего именно? ГП это наверно GP, что означает графический процессор. Короче я не буду гадать, я полетел в интернет, там поищу инфу. Ребята, первая инфа уже есть. Вроде бы это подгонка разрешения игр под разрешение моника. Короче вроде как штука полезная, но нужно проверять на деле, чтобы картинка была не размытой и была комфортная для восприятия. То есть нужно включать Масштабирование ГП, потом отключить, сравнивать, короч экспериментировать типа…

Толком понять не могу что такое Масштабирование ГП. Но понял точно, если моник не совсем стандартный или даже игра какая-то заумная, то по бокам могут быть черные полосы, ну знаете? Ну вот Масштабирование ГП это вроде может исправить, но как? А вот тут я не знаю, оно может картинку растянуть, но качественно это делается или нет, это нужно проверять…

Ребята, я понял только одно, что Масштабирование ГП может помочь когда есть какие-то траблы с разрешением. Например в игре полосы черные по бокам. Особого определения в интернете что это мне не удалось найти, извиняйте.

Так ребята, дальше ищу инфу, ибо немного нужно разобраться все таки что это. Значит вот один чел пишет, что если включать Масштабирование ГП, то картинка становится лучше, чем если включать Выполнять масштабирование на Дисплей. Вот еще один чел пишет, что проблем с растянутостью нет никакой, во многих мониках есть опция как отображать: во весь экран или в формате. И тут чел пишет еще, что там где такой опции нет, то там можно включить Масштабирование ГП. То есть опять же, Масштабирование ГП это что-то типа подгонки игры под моник, чтобы игра заполняла весь моник и чтобы не было черных полос по бокам. Я все понял именно так, но может я ошибаюсь….

Вот один чел на форуме Steam пишет что он раньше играл с видюхой NVIDIA и мог растянуть разрешение, а теперь у него стоит видюха AMD и он не может растянуть разрешение. И вот один чел чему отвечает, что бы он включил Масштабирование ГП. Так что вывод снова делаем такой, что Масштабирование ГП это для растягивания разрешения.

Вот нашел картинку, знаю что тут плоховато видно, за это сори, но здесь вроде отображена именно эта настройка Масштабирование ГП, смотрите:

Ребята, больше не знаю что сказать. Я понял одно, что Масштабирование ГП это опция чтобы химичить с разрешением, когда в игре по бокам черные полосы. Включать опцию или нет, это все зависит от вашего игрового процесса, если полос нет, то включать не нужно, а если есть, то можно попробовать, может станет лучше. На этом все, удачи вам ребята и позитива!

) Здравствуйте! Я Александр Макаров, и вы можете меня знать по фреймворку «Yii» — я один из его разработчиков. У меня также есть full-time работа — и это уже не стартап — Stay.com, который занимается путешествиями.

Сегодня я буду рассказывать про горизонтальное масштабирование, но в очень-очень общих словах.

Что такое масштабирование, вообще? Это возможность увеличить производительность проекта за минимальное время путем добавления ресурсов.

Обычно масштабирование подразумевает не переписывание кода, а либо добавление серверов, либо наращивание ресурсов существующего. По этому типу выделяют вертикальное и горизонтальное масштабирование.

Вертикальное — это когда добавляют больше оперативки, дисков и т.д. на уже существующий сервер, а горизонтальное — это когда ставят больше серверов в дата-центры, и сервера там уже как-то взаимодействуют.

Самый классный вопрос, который задают, — а зачем оно надо, если у меня все и на одном сервере прекрасно работает? На самом-то деле, надо проверить, что будет. Т.е., сейчас оно работает, но что будет потом? Есть две замечательные утилиты — ab и siege, которые как бы нагоняют тучу пользователей конкурента, которые начинают долбить сервер, пытаются запросить странички, послать какие-то запросы. Вы должны указать, что им делать, а утилиты формируют такие вот отчеты:

Главные два параметра: n — количество запросов, которые надо сделать, с — количество одновременных запросов. Таким образом они проверяют конкурентность.

На выходе получаем RPS, т.е. количество запросов в секунду, которое способен обработать сервер, из чего станет понятно, сколько пользователей он может выдержать. Все, конечно, зависит от проекта, бывает по-разному, но обычно это требует внимания.

Есть еще один параметр — Response time — время ответа, за которое в среднем сервер отдал страничку. Оно бывает разное, но известно, что около 300 мс — это норма, а что выше — уже не очень хорошо, потому что эти 300 мс отрабатывает сервер, к этому прибавляются еще 300-600 мс, которые отрабатывает клиент, т.е. пока все загрузится — стили, картинки и остальное — тоже проходит время.

Бывает, что на самом деле пока и не надо заботиться о масштабировании — идем на сервер, обновляем PHP, получаем 40% прироста производительности и все круто. Далее настраиваем Opcache, тюним его. Opcache, кстати, тюнится так же, как и APC, скриптом, который можно найти в репозитории у Расмуса Лердорфа и который показывает хиты и мисы, где хиты — это сколько раз PHP пошел в кэш, а мисы — сколько раз он пошел в файловую систему доставать файлики. Если прогнать весь сайт, либо запустить туда какой-то краулер по ссылкам, либо вручную потыкать, то у нас будет статистика по этим хитам и мисам. Если хитов 100%, а мисов — 0%, значит, все нормально, а если есть мисы, то надо выделить больше памяти, чтобы весь наш код влез в Opcache. Это частая ошибка, которую допускают — вроде Opcache есть, но что-то не работает…

Еще часто начинают масштабировать, но не смотрят, вообще, из-за чего все работает медленно. Чаще всего лезем в базу, смотрим — индексов нет, ставим индексы — все сразу залетало, еще на 2 года хватит, красота!

Ну, еще надо включить кэш, заменить apache на nginx и php-fpm, чтобы сэкономить память. Будет все классно.

Все перечисленное достаточно просто и дает вам время. Время на то, что когда-то этого станет мало, и к этому уже сейчас надо готовиться.

Как, вообще, понять, в чем проблема? Либо у вас уже настал highload, а это не обязательно какое-то бешеное число запросов и т.д., это, когда у вас проект не справляется с нагрузкой, и тривиальными способами это уже не решается. Надо расти либо вширь, либо вверх. Надо что-то делать и, скорее всего, на это мало времени, что-то надо придумывать.

Первое правило — никогда ничего нельзя делать вслепую, т.е. нам нужен отличный мониторинг. Сначала мы выигрываем время на какой-то очевидной оптимизации типа включения кэша или кэширования Главной и т.п. Потом настраиваем мониторинг, он нам показывает, чего не хватает. И все это повторяется многократно – останавливать мониторинг и доработку никогда нельзя.

Что может показать мониторинг? Мы можем упереться в диск, т.е. в файловую систему, в память, в процессор, в сеть… И может быть такое, что, вроде бы, все более-менее, но какие-то ошибки валятся. Все это разрешается по-разному. Можно проблему, допустим, с диском решить добавлением нового диска в тот же сервер, а можно поставить второй сервер, который будет заниматься только файлами.

На что нужно обращать внимание прямо сейчас при мониторинге? Это:

  1. доступность, т.е. жив сервер, вообще, или нет;
  2. нехватка ресурсов диска, процессора и т.д.;
  3. ошибки.
Как это все мониторить?

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

Этот доклад - расшифровка одного из лучших выступлений на обучающей конференции разработчиков высоконагруженных систем за 2015 год.

Старьё! - скажите вы.
- Вечные ценности! - ответим мы.

  • highload junior
  • Добавить метки