Иллюзия движения

https://paulbakaus.com/tutorials/performance/the-illusion-of-motion/
  • Перевод
История о чувстве зрения, восприятии кадров и частоты обновления, размытости движущегося объекта и телевизионных экранах.
(также см. перевод статьи того же автора «Иллюзия скорости» — прим. пер.)

Введение


Вы могли слышать термин кадры в секунду (FPS), и что 60 FPS — действительно хороший ориентир для любой анимации. Но большинство консольных игр идут на 30 FPS, а кинофильмы обычно записывают на 24 FPS, так зачем же нам стремиться к 60 FPS?

Кадры… в секунду?


Ранние времена кинопроизводства



Съёмки голливудского фильма 1950 года «Юлий Цезарь» с Чарлтоном Хестоном

Когда первые кинематографисты начали снимать кино, многие открытия делались не научным методом, а путём проб и ошибок. Первые камеры и проекторы управлялись вручную, а плёнка была очень дорогой — настолько дорогой, что при съёмке старались использовать наименьшую возможную частоту кадров, лишь бы сэкономить плёнку. Этот порог обычно находился между 16 и 24 FPS.

Когда на физическую плёнку наложили звук (аудиотрек) и воспроизводили его одновременно с видео, то управляемое вручную воспроизведение стало проблемой. Выяснилось, что люди нормально воспринимают переменный фреймрейт для видео, но не для звука (когда изменяется и темп, и высота тона), так что кинематографистам пришлось выбрать постоянную скорость для того и другого. Выбрали 24 FPS, и сейчас, спустя почти сто лет, он остаётся стандартом в кино. (В телевидении частоту кадров пришлось слегка изменить из-за того, как ЭЛТ-телевизоры синхронизируются с частотой электросети).

Кадры и человеческий глаз


Но если 24 FPS еле приемлем для кино, то какой оптимальный фреймрейт? Это хитрый вопрос, потому что оптимальной частоты кадров нет.


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

Глаз — это не камера. Он не воспринимает движение как серию кадров. Он воспринимает непрерывный поток информации, а не набор отдельных картинок. Почему тогда кадры вообще работают?

Два важных феномена объясняют, почему мы видим движение, когда смотрим на быстро сменяющиеся картинки: инерция зрительного восприятия и фи-феномен (стробоскопическая иллюзия непрерывного движения — прим. пер.).

Большинство кинематографистов думают, что единственной причиной является инерция зрительного восприятия, но это не так; хотя и подтверждённая, но не доказанная с научной точки зрения инерция зрительного восприятия является феноменом, согласно которому остаточное изображение, вероятно, сохраняется примерно 40 миллисекунд на сетчатке глаза. Это объясняет, почему мы не видим тёмное мерцание в кинотеатрах или (обычно) на ЭЛТ.


Фи-феномен в действии. Заметили движение на картинке, хотя на ней ничего не двигается?

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

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

Стандартные фреймрейты, от плохих к идеальным


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

Фреймрейт Восприятие человеком
10-12 FPS Абсолютный минимум для демонстрации движения. Меньшие значения уже распознаются глазом как отдельные изображения.
< 16 FPS Создаются видимые заминки, у многих такой фреймрейт вызывает головные боли.
24 FPS Минимальный терпимый фреймрейт для восприятия движения, экономически эффективный
30 FPS Намного лучше, чем 24 FPS, но не реалистичный. Это стандарт для видео NTSC из-за частоты переменного тока
48 FPS Хорош, но недостаточен для истинной реалистичности (хотя Томас Эдисон думал иначе). Также см. эту статью.
60 FPS Зона наилучшего восприятия; большинство людей не воспримут дальнейшего повышения качества выше 60 FPS.
∞ FPS К настоящему времени наука не смогла доказать или наблюдением обнаружить теоретический лимит человека.
Примечание: Несмотря на то, что 60 FPS считаются хорошим фреймрейтом для плавной анимации, этого ещё недостаточно для отличной картины. Контраст и резкость всё ещё можно улучшить за пределами этого значения. Для изучения, насколько наши глаза чувствительны к изменению яркости, был проведён ряд научных исследований. Они показали, что испытуемые способны распознать белый кадр среди тысячи чёрных кадров. Если хотите копнуть поглубже, вот несколько ресурсов, и ещё.

Демо: как выглядит 24 FPS в сравнении с 60 FPS?


60vs24fps.mp4
Благодарю своего друга Марка Тёнсинга за создание этого фантастического сравнения.

HFR: перемонтаж мозга с помощью «Хоббита»


«Хоббит» был популярным кинофильмом, снятым на двойном фреймрейте 48 FPS, который называется HFR (high frame rate). К сожалению, не всем понравился новый вид. Этому было несколько причин, главная из них — так называемый «эффект мыльной оперы».

Мозг большинства людей обучен воспринимать 24 полных кадра в секунду как качественное кино, а 50-60 полукадров (чересстрочные телесигналы) напоминают нам телеэфир и разрушают «эффект плёнки». Схожий эффект создаётся, если активировать интерполяцию движения на вашем ТВ для материала 24p (прогрессивная развёртка). Она многим не нравится (несмотря на то, что современные алгоритмы довольно хороши в рендеринге плавных движений без артефактов, что является главной причиной, почему критики отвергают эту функцию).

Хотя HFR значительно улучшает изображение (делает движения не такими прерывистыми и борется со смазанностью движущихся объектов), непросто найти ответ, как улучшить его восприятие. Это требует переобучения мозга. Некоторые зрители не замечают никаких проблем после десяти минут просмотра «Хоббита», но другие абсолютно не переносят HFR.

Камеры и CGI: история motion blur


Но если 24 FPS называют едва переносимым фрейрейтом, то почему вы никогда не жаловались на прерывистость видео, выходя из кинотеатра? Оказывается, в видеокамерах есть встроенная функция — или баг, если хотите — которой не хватает в CGI (в том числе в анимациях CSS!): это motion blur, то есть размытие движущегося объекта.

После того, как вы видели motion blur, его отсутствие в видеоиграх и в софте становится до боли очевидным.

Motion blur, как определяется в Википедии, это

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

В данном случае картинка лучше тысячи слов.


Без motion blur


C motion blur

Изображения от Evans & Sutherland Computer Corporation, Солт-Лейк-Сити, Юта. Используются с разрешения. All rights reserved.

Motion blur использует хитрость, изображая много движения в одном кадре, жертвуя детализацией. Вот причина, почему кинофильм на 24 FPS выглядит относительно приемлемо, по сравнению с видеоиграми на 24 FPS.

Но как изначально появляется motion blur? Согласно описанию E&S, которая впервые применила 60 FPS для своих мега-купольных экранов:

Когда вы снимаете фильм на 24 FPS, камера видит и записывает только часть движения перед объективом, а затвор закрывается после каждой выдержки, чтобы перемотать плёнку к следующему кадру. Это значит, что выдержка закрыта в течение такого же времени, что и открыта. При быстром движении и действии перед камерой частота кадров недостаточно высока, чтобы успеть за ними, а изображения размываются в каждом кадре (из-за времени экспозиции).

Вот графика, упрощённо объясняющая процесс.


Изображения Hugo Elias. Используются с разрешения.

Классические кинокамеры используют обтюратор (вращающийся секционированный диск — прим. пер.) для захвата motion blur. Вращая диск, вы открываете затвор на контролируемый промежуток времени под определённом углом и, в зависимости от этого угла, изменяете время экспозиции. Если выдержка маленькая, то на плёнку запишется меньше движения, то есть motion blur будет слабее; а если выдержка большая, то запишется больше движения и эффект проявится сильнее.


Обтюратор в действии. Via Википедия

Если motion blur — такая полезная вещь, то почему кинематографисты стремятся от него избавиться? Ну, при добавлении motion blur вы теряете детализацию; а избавившись от него — теряете плавность движений. Так что когда режиссёры хотят снять сцену с большим количеством деталей, вроде взрыва с большим количеством вылетающих частиц или сложной сцены с действием, они часто выбирают маленькую выдержку, которая уменьшает размытие и создаёт чёткий эффект кукольной мультипликации.


Визуализация захвата Motion Blur. Via Википедия

Так почему бы его просто не добавить?

Motion blur значительно улучшает анимацию в играх и на веб-сайтах даже на низких фреймрейтах. К сожалению, его внедрение слишком дорого обходится. Для создания идеального motion blur вам понадобилось бы снять в четыре раза больше кадров объекта в движении, а затем осуществить временнýю фильтрацию или сглаживание (вот отличное объяснение от Хьюго Элиаша). Если для выпуска приемлемого материала на 24 FPS вам нужно делать рендеринг на 96 FPS, то вместо этого вы можете просто поднять фреймрейт, так что зачастую это не вариант для контента, который рендерится в реальном времени. Исключениями являются видеоигры, где заранее известна траектория движения объектов, так что можно рассчитать приблизительный motion blur, а также системы декларативной анимации вроде CSS Animations и, конечно, CGI-фильмы как у Pixar.

60 Гц != 60 FPS: частота обновления и почему она важна


Примечание: герц (Гц) обычно используется, когда говорят о частоте обновления, в то время как показатель кадров в секунду (fps) — устоявшийся термин для покадровой анимации. Чтобы не путать их, мы используем Гц для частоты обновления и FPS для фреймрейта.

Если вы задаётесь вопросом, почему на вашем ноутбуке так некрасиво выглядит воспроизведение дисков Blu-Ray, то часто причина в том, что фреймрейт неравномерно делится на частоту обновления экрана (в противоположность им, DVD конвертируются перед передачей). Да, частота обновления и фреймрейт — не одно и то же. Согласно Википедии, «[..] частота обновления включает в себя повторное рисование идентичных кадров, тогда как фреймрейт измеряет, как часто исходный видеоматериал будет выдавать полный кадр новых данных на дисплей». Так что фреймрейт соответствует количеству отдельных кадров на экране, а частота обновления соответствует числу раз, когда изображение на экране обновляется или перерисовывается.

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

Новая проблема у каждого дисплея


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


Затвор кинопроектора в действии. Из Википедии.

Однако это не полное описание. Конечно, в результате такого процессы вы увидите-таки фильм, но мерцание экрана из-за того, что экран остаётся тёмным 50% времени, сведёт вас с ума. Эти затемнения между кадрами разрушат иллюзию. Для компенсации проекторы на самом деле закрывают затвор два или три раза на каждом кадре.

Конечно, это кажется нелогичным — почему в результате добавления дополнительных мерцаний нам кажется, что их стало меньше? Задача в том, чтобы уменьшить период затемнения, который оказывает непропорциональный эффект на зрительную систему. Порог слияния мерцания (тесно связанный с инерцией зрительного восприятия) описывает эффект от этих затемнений. Примерно на ~45 Гц периоды затемнения должны составлять менее ~60% времени показа кадра, вот почему эффективен метод двойного срабатывания затвора в кино. Более чем на 60 Гц периоды затемнения могут составлять более 90% времени показа кадра (необходимо для дисплеев вроде ЭЛТ). Вся концепция в целом немного сложнее, но на практике вот как можно избежать мерцания:

  • Использовать иной тип дисплея, где нет затемнения между кадрами, то есть он постоянно отображает кадр на экране.
  • Применить постоянные, неизменяемые фазы затемнений с продолжительностью менее 16 мс

Мерцающие ЭЛТ

Мониторы и телевизоры ЭЛТ работают, направляя электроны на флуоресцентный экран, где содержится люминофор с низким временем послесвечения. Насколько мало время послесвечения? Настолько мало, что вы никогда не увидите полное изображение! Вместо этого в процессе электронного сканирования люминофор зажигается и теряет свою яркость менее чем за 50 микросекунд — это 0,05 миллискунды! Для сравнения, полный кадр на вашем смартфоне демонстрируется в течение 16,67 мс.


Обновление экрана, снятое с выдержкой 1/3000 секунды. Из Википедии.

Так что единственная причина, почему ЭЛТ вообще работает — это инерция зрительного восприятия. Из-за длительных тёмных промежутков между подсветками ЭЛТ часто кажутся мерцающими — особенно в системе PAL, которая работает на 50 Гц, в отличие от NTSC, работающей на 60 Гц, где уже вступает в действие порог слияния мерцания.

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

Размытые ЖК-дисплеи

Жидкокристаллические дисплеи (LCD), которые классифицируются как устройства выборки и хранения, на самом деле довольно удивительные, потому что у них вообще нет затемнений между кадрами. Текущее изображение непрерывно демонстрируется на нём, пока не поступит новое изображение.

Позвольте повторить: На ЖК-дисплеях нет мерцания, вызванного обновлением экрана, независимо от частоты обновления.

Но теперь вы думаете: «Погодите, я недавно выбирал телевизор, и каждый производитель рекламировал, чёрт побери, более высокую частоту обновления экрана!» И хотя в основном это чистый маркетинг, но ЖК-дисплеи с более высокой частотой обновления решают проблему — просто не ту, о которой вы думаете.

Зрительное размытие в движении

Производители ЖК-дисплеев всё повышают и повышают частоту обновления из-за экранного или зрительного motion blur. Так и есть; не только камера способна записывать размытие в движении, но ваши глаза тоже могут! Прежде чем объяснить, как это происходит, вот две сносящие крышу демки, которые помогут вам почувствовать эффект (нажмите на изображение).



В первом эксперименте сфокусируйте взгляд на неподвижном летающем инопланетянине вверху — и вы будете чётко видеть белые линии. А если сфокусировать взгляд на движущемся инопланетянине, то белые линии волшебным образом исчезают. С сайта Blur Busters:

«Из-за движения ваших глаз вертикальные линии при каждом обновлении кадра размываются в более толстые линии, заполняя чёрные пустоты. Дисплеи с малым послесвечием (такие как ЭЛТ или LightBoost) устраняют подобный motion blur, так что этот тест выглядит иначе на таких дисплеях».

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

Во втором эксперименте ребята из Blur Busters пытаются воссоздать эффект ЖК-дисплея по сравнению с экраном с малым послесвечием, просто вставляя чёрные кадры между кадрами дисплея — удивительно, но это работает.

Как показано ранее, motion blur может стать либо благословением, либо проклятием — он жертвует резкостью ради плавности, а добавляемое вашими глазами размытие всегда нежелательно. Так почему же motion blur — настолько большая проблема для ЖК-дисплеев по сравнению с ЭЛТ, где подобных вопросов не возникает? Вот объяснение того, что происходит, если краткосрочный кадр (полученный за короткое время) задерживается на экране дольше, чем ожидалось.



Следующая цитата — из отличной статьи Дейва Марша на MSDN о временнóй передискретизации. Она удивительно точна и актуальна для статьи 15-летней давности:

При адресации пикселя он загружается с определённым значением и остаётся с этим значением светового выхода до следующей адресации. С точки зрения рисования изображения это неправильно. Конкретный экземпляр оригинальной сцены действителен только в конкретное мгновение. После этого мгновения объекты сцены должны быть перемещены в другие места. Некорректно удерживать изображения объектов в неподвижных позициях, пока не придёт следующий образец. Иначе выходит, что объект как будто внезапно перепрыгивает в совершенно другое место.

И его вывод:

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

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

Дополнительно: так в какой степени наш мозг выполняет интерполяцию, на самом деле?


Никто не знает точно, но определённо есть много ситуаций, где мозг помогает создать финальное изображение того, что ему показывают. Взять хотя бы для примера этот тест на слепое пятно: оказывается, существует слепое пятно в том месте, где оптический нерв присоединяется к сетчатке. По идее, пятно должно быть чёрным, но на самом деле мозг заполняет его интерполированным изображением с окружающего пространства.

Кадры и обновления экрана не смешиваются и не совпадают!


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

Проблема: разрыв экрана


Что происходит, когда ваша игра или приложение начинают рисовать новый кадр на экране, а дисплей находится посередине цикла обновления? Это буквально разрывает кадр на части:


Вот что происходит за сценой. Ваш CPU/GPU выполняет определённые вычисления для составления кадра, затем передаёт его в буфер, который должен ждать, что монитор вызовет обновление через стек драйверов. Затем монитор считывает этот фрейм и начинает его отображать (здесь вам нужна двойная буферизация, чтобы всегда одно изображение отдавалось, а одно составлялось). Разрыв происходит, когда буфер, который в данный момент выводится на экран сверху вниз, заменяется следующим кадром, который выдаёт видеокарта. В результате получается, что верхняя часть вашего экрана получена из одного кадра, а нижняя часть — из другого.

Примечание: если быть точным, разрыв экрана может произойти, даже если частота обновления и фреймрейт совпадают! У них должна совпадать и фаза, и частота.


Разрыв экрана в действии. Из Википедии

Это явно не то, что нам нужно. К счастью, есть решение!

Решение: Vsync


Разрыв экрана можно устранить с помощью Vsync, сокращённо от «вертикальная синхронизация». Это аппаратная или программная функция, которая гарантирует, что разрыва не произойдёт — что ваше программное обеспечение может отрисовать новый кадр только тогда, когда закончено предыдущее обновление экрана. Vsync изменяет частоту изъятия кадров из буфера вышеупомянутого процесса, чтобы изображение никогда не изменялось посередине экрана.

Следовательно, если новый кадр ещё не готов для отрисовки на следующем обновлении экрана, то экран просто возьмёт предыдущий кадр и заново отрисует его. К сожалению, это ведёт к следующей проблеме.

Новая проблема: джиттер


Хотя наши кадры больше не разрываются, воспроизведение всё равно далеко не плавное. На этот раз причина в проблеме, которая настолько серьёзна, что каждая индустрия даёт ей свои названия: джаддер, джиттер, статтер, джанк или хитчинг, дрожание и сцепка. Давайте остановимся на термине «джиттер».

Джиттер происходит, когда анимация воспроизводитеся на другой частоте кадров по сравнению с той, на которой её снимали (или предполагали воспроизводить). Часто это означает, что джиттер появляется, когда частота воспроизведения нестабильная или переменная, а не фиксированная (поскольку бóльшая часть контента записывается с фиксированной частотой). К сожалению, именно это происходит при попытке отобразить, например, контент 24 FPS на экране, который обновляется 60 раз в секунду. Время от времени, поскольку 60 не делится на 24 без остатка, приходится один кадр показывать дважды (если не использовать более продвинутые преобразования), что портит плавные эффекты, такие как панорамирование камеры.

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

Необязательно мне верить на слово; посмотрите своими глазами. Вот эффектная демонстрация микроджиттера (микростаттера).

Борьба с джиттером


При преобразовании: «телекинопроектор»


«Телекинопроектор» — метод преобразования изображения на киноплёнке в видеосигнал. Дорогие профессиональные конвертеры вроде тех, что используются на телевидении, осущестьвляют эту операцию в основном с помощью процесса, который называется управление вектором движения (motion vector steering). Он способен создавать очень убедительные новые кадры для заполнения промежутков. В то же время по-прежнему широко используются два других метода.

Ускорение

При преобразовании 24 FPS в сигнал PAL на 25 FPS (например, ТВ или видео в Великобритании) обычной практикой считается просто ускорить оригинальное видео на 1/25 секунды. Так что если вы когда-нибудь гадали, почему «Охотники за привидениями» в Европе на пару минут короче, то вот ответ. Хотя метод работает на удивление хорошо для видео, он ужасно отражается на звуке. Вы спросите, насколько хуже может быть ускоренный на 1/25 звук без дополнительного изменения высоты тона? Почти на полтона хуже.

Возьмём реальный пример крупного провала. Когда Warner выпустила в Германии расширенную Blu-Ray коллекцию «Властелина колец», они использовали для немецкого дубляжа уже скорректированную PAL-версию звуковой дорожки, которая была предварительно ускорена на 1/25 с последующим понижением тона для исправления изменений. Но поскольку Blu-Ray идёт на 24 FPS, им пришлось выполнять обратное преобразование видео, так что они снова его замедлили. Конечно, с самого начала плохой идеей было выполнять такое двойное преобразование, из-за потерь, но что ещё хуже, после замедления видео для соответствия частоте кадров Blu-Ray они забыли изменить обратно тон на звуковой дорожке, так что все актёры в фильме внезапно стали звучать сверхдепрессивно, разговаривая на полтона ниже. Да, это реальная история и да, она очень оскорбила фанатов, было много слёз, много плохих копий и много потерянных денег после большого отзыва дисков.

Мораль истории: изменение скорости — не самая лучшая идея.

Pulldown

Преобразовать киноматериал для NTSC, американского телевизионного стандарта, не получится простым ускорением, потому что преобразование 24 FPS в 29,97 FPS соответствует ускорению на 24,875%. Если только вы по-настоящему не любите бурундучков, это будет не лучшим вариантом.

Вместо этого используется процесс под названием 3:2 pulldown (среди прочих), который стал самым популярным методом преобразования. В рамках этого процесса берут 4 оригинальных кадра и преобразуют их в 10 чересстрочных полукадров или 5 полных кадров. Вот иллюстрация, которая описывает процесс.


3:2 Pulldown в действии. Из Википедии.

На чересстрочном дисплее (то есть ЭЛТ) видеополя посредине отображаются в тандеме, каждый в чересстрочном варианте, поэтому они состоят из каждой второй строки пикселей. Оригинальный кадр A разбивается на два полукадра, оба из которых отображаются на экране. Следующий кадр B тоже разбивается, но нечётное видеополе отображается дважды, так что этот кадр распределяется по трём полукадрам. И, в сумме, мы получаем 10 распределённых по видеополям полукадров из 4 оригинальных полных кадров.

Это работает достаточно хорошо при показе на чересстрочном экране (таком как ЭЛТ-телевизор) примерно с 60 видеополями в секунду (практически полукадрами), поскольку полукадры никогда не показываются вместе. Но такой сигнал выглядит ужасно на дисплеях, которые не поддерживают полукадры и должны составить вместе 30 полных кадров, как в самом правом столбце на иллюстрации вверху. Причина провала в том, что каждый третий и четвёртый кадры слепляются из двух разных кадров оригинала, что приводит к тому, что я называют «Франкенфрейм». Это особенно ужасно выглядит на быстром движении, когда имеются значительные отличия между соседними кадрами.

Так что pulldown выглядит изящно, но это тоже не универсальное решение. Тогда что? Неужели нет идеального варианта? Как выясняется, он таки есть, и решение обманчиво простое!

При показе: G-Sync, Freesync и ограничение максимальной частоты кадров


Вместо того, чтобы бороться с фиксированной частотой обновления, конечно, гораздо лучше использовать переменную частоту обновления, которая всегда синхронизирована с фреймрейтом. Это именно то, для чего предназначены технологии Nvidia G-Sync и AMD Freesync. G-Sync — модуль, встроенный в мониторы, он позволяет им синхронизироваться с выдачей GPU вместо того чтобы заставлять GPU синхронизироваться с монитором, а Freesync достигает той же цели без модуля. Это действительно революционные технологии, которые устраняют необходимость в «телекинопроекторе», а весь контент с переменным фреймрейтом, вроде игр и веб-анимаций, выглядит намного более плавным.

К сожалению, и G-Sync, и Freesync — относительно новые технологии и ещё недостаточно широко распространились, так что если вы как веб-разработчик делаете анимации для веб-сайтов или приложений и не можете себе позволить использовать полноценные 60 FPS, то лучше всего будет ограничить максимальный фреймрейт, чтобы он без остатка делился на частоту обновления — практически во всех случаях наилучшим ограничением будет 30 FPS.

Заключение и последующие действия


Так как достичь пристойного баланса с учётом всех желаемых эффектов — минимального размытия в движении, минимального мерцания, постоянной частоты кадров, хорошего отображения движения и хорошей совместимости со всеми дисплеями — без особого обременения GPU и дисплея? Да, сверхбольшие фреймрейты могут снизить размытие в движении, но большой ценой. Ответ ясен и после чтения этой статьи вы должны его знать: 60 FPS.

Теперь, когда вы умнее, приложите все усилия, чтобы запустить весь анимированный контент со скоростью 60 кадров в секунду.

a) Если вы веб-разработчик


Сходите на jankfree.org, где разработчики Chrome собирают лучшие ресурсы о том, как сделать все ваши приложения и анимации безупречно плавными. Если у вас есть время только для одной статьи, то выберите отличную статью Пола Льюиса The Runtime Performance Checklist.

b) Если вы Android-разработчик


Сверьтесь с нашими «Лучшими практиками для производительности» в официальном разделе Android Training, где мы собрали для вас список самых важных факторов, узких мест и хитростей оптимизации.

c) Если вы работаете в киноиндустрии


Записывайте весь контент на 60 FPS или, ещё лучше, на 120 FPS, чтобы можно было свести его к 60 FPS, 30 FPS и 24 FPS в случае необходимости (к сожалению, для добавления поддержки 50 FPS и 25 FPS (PAL) придётся поднять частоту кадров до 600 FPS). Воспроизводите весь контент на 60 FPS и не извиняйтесь за «эффект мыльной оперы». Эта революция потребует времени, но она случится.

d) Для всех остальных


Требуйте 60 FPS для любых движущихся картинок на экране, а если кто спросит почему, отправьте его к этой статье.
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 50
  • –1
    30 FPS… Это стандарт для видео NTSC из-за частоты переменного тока

    Неверно. В современном телевидении картинка отображается для PAL — 50, а для NTSC — 60 раз в секунду (точнее, 2*30000/1001). Именно по этой причине она более плавная, чем в кино.

    Трюк в том, для уменьшения требований к частотному диапазону используется черезстрочное отображение — один раз отображаются чётные, а в другой раз — нечётные строки.
    • +7
      Вполне себе верно, 30 fps — FRAMES per second. А 60 (точнее 59.94) — полукадров — полей — FIELDS per second. Собственно целых кадров так и будет 30 (29.97).

      PS: За перевод и за статью спасибо, в целом лично для меня нового мало, однако иногда приходится объяснять эту тему (про 24 и 60 fps, vsync, tearing и jitter) другим людям и с такой статьёй и наглядными примерами из неё это будет намного проще.
      • 0
        Обращаю внимание, что я специально написал «картинка», чтобы избежать путаницы. Изображение в классическом видео снимается и воспроизводится именно 50/60 раз в секунду; картинка для двух последующих полей соответствует разным моментам времени.

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

        Соответственно, в табличке значение должно быть не 30, а 50 или 60.
        • +2
          Это уже технические моменты аналогового сжатия видео и терминология, вводящая в заблуждение. Суть в том, что картинка по стандарту NTSC может меняться 59.94 раз в секунду (PAL и SECAM — 50 раз).
      • 0
        VR очках сколько FPS?
        • –3
          В VR очках то откуда фпс? Фпс на вашем компьютере. Сколько он выдаст, столько в очках и будет. Когда падает ниже 60, в динамических сценах чувствуется дискомфорт. Это сугубо индивидуально, конечно.
          • 0
            HTC Vive и Oculus Rift поддерживают частоту обновления до 90 герц.
            • 0
              Так FPS, а не частоту обновления дисплея
              • +5
                FPS ограничивается максимальной частотой обновления дисплея. Видеокарта может хоть миллион кадров в секунду обрабатывать, но если экран не может этот миллион показать, то реальный фпс будет всё равно равен частоте обновления экрана.
                • –2
                  Видеокарта может хоть миллион кадров в секунду обрабатывать

                  Если только под таким кадром подразумевается заливка экрана одним сплошным цветом, не более.
          • –2

            А где про профессиональных киберспортсменов, очень любящих, когда количество кадров в секунду превышает сотню?

            • +5
              Это миф перешедший в легенду ).
              Про игроки любят ЗАПАС фпс от нормы. Так как периодически бывают такие бара-бумы, что фпс проседает очень сильно. И тот, у кого запас производительности больше, имеет преимущество.
              • +3
                Не рассматриваете гипотезу, что при большей частоте обновления экрана меньше input lag, и именно это может быть желанным эффектом?
                • +3
                  Так FPS в играх вообще весь про input lag, утверждение, что «60 гарантированных FPS хватит всем» — это аналог утверждения «ни один мозг не заметит input lag при 60 (и выше) FPS „

                  Я всегда считал, что проблема в том, что 60 — это примерная нижняя граница, при которой input lag незаметен, поэтому минимальное проседание при активной игре (любой пропуск фрейма конвейером видеокарты) — как серпом по ганглиям.
                  • 0
                    Я пока что заметил, что много зависит от конкретной игры (или движка). Может, связано с motion blur (если он есть, низкий ФПС менее заметен). Может, связано с равномерностью межкадровых интервалов. Но в одних играх на 30 ФПС уже хорошо (таких мало), в других — на 40, а в третьих только на 60+ (на 60 Гц мониторе).

                    Это я к тому, что input lag как фактор восприятия плавности картинки не рассматривал, в этом что-то есть, но вряд ли это единственный фактор.
                    • 0
                      Я сталкивался с таким феноменом — когда смотришь как играет кто-то другой, картинка кажется плавной, когда играешь сам — ощущение, что смотришь зажёванный диафильм. Не могу утверждать, что дело в input lag, просто набор субъективных ощущений.
                      • 0
                        От жанра зависит.

                        На стратегиях или игре с «деревянным» управлением и автоприцелом (привет, любители геймпадов!) хватит и 30-40 FPS.
                        На синглплеерном экшене от первого лица — 60FPS. На мультиплеерном экшене уже не менее 80, т.к. при 60 возможны проседания до 40, которые очень заметны.

                        Естественно, это с нормальным монитором, поддерживающим синхронизацию апдейта.
                    • 0
                      После 30 фпс инпут лага нет по моим наблюдениям. Если точнее, физически не успеть среагировать быстрее после этой цифры. Ну и толку нет при сетевых играх, ибо пинг. А вот выстраивать траектории эффективнее при более высоком фпс. Но это я про FPS(стрелялки), как там в других играх я не знаю.
                    • 0
                      Не совсем миф. Дело в том, что иногда расчёт физики тоже привязан к кадрам. Этим особенно известен движок Quake. В результате, если у вас высокий фпс, то вы могли запрыгнуть на какой-то высокий ящик, так точка прыжка в момент расчёта попадала в самую высокую часть траектории, а при низком фпс — нет. Это вполне себе реально влияло на киберспортивных соревнованиях.
                      • 0
                        На турнирах не влияло никак, ибо cl_maxfps у всех одинаков, как и машины.
                        • 0
                          Да, потому что стали требовать мощные машины по дефолту.
                  • 0
                    Может кому пригодится. Я использую SVP для раскадрирования видео в режиме реального времени с 24 кадров до 60, любой фильм теперь можно смотреть как видеоигру, правда есть проблема с артефактами в динамических сценах, но к этому можно привыкнуть.
                    • +2
                      Это как в любом телевизоре из средней ценовой категории конца нулевых? Всякие псевдо-highFPS, псевдо-3D, псевдо-HDR?
                      При первой же возможности выключаю всю эту ересь. Множество талантливых людей трудилось, выверяя каждый кадр: от решений оператора по ISO/апертуре и осветителей до color grading в постпродакшене, а тут этот улучшатор-3000 с функцией «сделать чётко». Спасибо, нет.
                      А успех «Властелина колец» в 48fps как бы намекает, что выше fps != лучше.
                      • 0
                        Дело вкуса. Мне наоборот так больше нравится. Правда сейчас сижу под линем, где его ставить как-то муторно :(
                        А по поводу качества — SVP вполне неплохо работает, хотя да, на очень динамичных сценах лажал (давно не пользовался, может сейчас получше)
                        • 0
                          А мне властелин очень понравился, 48 кадров очень хорошо!
                          • 0

                            Увы, для меня 24/30 fps это сплошное «дёргание». Конечно, на безрыбье… В первой половине 1990-х смотрели кино на ПК 320x200 с просаживанием картинки до 10..15 fps и тащились от торжества технологий. Но это же не повод всю жизнь в пещере жить :D Минимальный комфортный уровень сейчас для меня это около 60 fps. Выше заметно только уже на совсем большом экране и мало. Но 24/30 — это не комфортно.


                            Так что SVP на ПК и встроенное 4x на телевизоре :)

                          • 0
                            Это делает любой современный телевизор, про это есть упоминание в статье. Лично мне нравится эфект плавности.
                          • 0
                            как ЭЛТ-телевизоры синхронизируются с частотой электросети

                            Синхронизация подразумевает точное совпадение, тогда как в реальности частоту кадров/полукадров подбирали под частоту сети чтобы эффект наводки от промышленной сети меньше бил по глазам.
                            Кстати многие думали/утверждали что синхронизация по кадрам велась от промышленной сети, напомню что в таком случае автомобильные телевизоры не работали бы…
                            В составе видеосигнала есть кадры синхронизации по строкам и кадрам, точнее полукадрам и они почти совпадали у разных каналов, это было хорошо заметно когда телевизор в зоне с плотным вещанием поверх основной картинке показывал призраков с соседнего (такой себе эффект «картинка в картинке», если повезло то можно было пропускать надоедливую рекламу). Там вообще много чего интересного на заре происходило, можно веселую статью написать…
                            • 0
                              Синхронизация подразумевает точное совпадение, тогда как в реальности частоту кадров/полукадров подбирали под частоту сети чтобы эффект наводки от промышленной сети меньше бил по глазам.

                              Раньше не было кварцев. А синхронизация по LC ненадёжна. Синхроимпульсы в самом видео поймать было сложно. Поэтому и использовали синхронизацию именно по электросети. Автомобильных ТВ тогда не было и в планах :)


                              Позже, конечно, всё это стало уже не актуально, но частоты стандартов уже состоялись.

                              • 0

                                Частота электросети еще менее надежна чем LC. Поэтому в конечном счете все равно приходилось ловить синхроимпульсы в самом видео.

                                • 0
                                  Частота электросети еще менее надежна чем LC

                                  LC плывёт, а частота электросети стабильна всегда с точностью не хуже 1%. И, главное, частота/фаза синхронизированы в рамках единой энергосистемы.


                                  Поэтому в конечном счете все равно приходилось ловить синхроимпульсы в самом видео.

                                  Да. Так и пришлось. Но это был уже следующий этап развития. И частоты к тому времени уже были согласованы.

                                  • 0
                                    Тогда зачем нужны были ручки регулировки синхронизации даже на допотопных механических телевизорах, ведь все синхронизировалось от сети?

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

                                    На заре телевидения (постмеханическое телевещание) была проблема с фильтрацией наводок от сети, пульсации от сети так или иначе просачивались на итоговое изображение. И одно дело когда по изображению идет медленная волна, другое когда там рябь идет из за большой разницы в частотах между пульсацией питания и сменой кадров.
                                    Стандарты PAL, SECAM, NTSC вообще надстройка над первичным черно-белым изображением и отличаются в первую очередь методом кодирования цветовой информации а не частотой смены кадров. Чтоб понятнее было это как 8086 (чернобелое вещание) и 286+ (цветое вещание), на базе архитектуры одного процессора была расширена архитектура для возможности использовать старый программный код (уже выпущенные телевизоры) на новых процессорах (цветное вещание).
                                    Теперь про что раньше:
                                    — первое решение по передаче картинки (еще даже не радио) датируется вроде как 1884 годом, механическим диском с кучей дырочек;
                                    стандарт вещания с 625-ю строками 25 кадрами, приняли в 1946 году, любой выпущенный с тех пор телевизор, в силу своих возможностей покажет аналоговый телевизионный сигнал (трудно ждать от КВНа цветную картинку) даже будучи запущенным от автомобиля через конвектор;
                                    — пьезоэлектрический эффект открыт в 1880, изготовлен образец в 1917 патент 1918 массовое производство и использование пошло в 20-30 годах прошлого века.

                                    Как мне рассказывали преподаватели, при разработке современного стандарта телевещания хотели перейти на 24 кадра для совместимости с кинопленкой, но отказались из за наводимых на изображение помех от сети, мерцаний ламп в студии и так далее. О синхронизации от сети не от преподавателей не слышал, не в «сети» я достоверную информацию не нашел, кроме других подобных утверждений.

                                    По аналогии можно определить следующее: вы состоите в секте верующих в «синхронизацию от сети», а я в это не верю, если с богом доказать его существование маловероятно, то для вступления в вашу секту подойдет кусок принципиальной схемы от КВНа, или несколько ссылок на статьи разных авторов не из вашей секты.
                                  • 0
                                    На заре телевидения синхронизация от сети была прорывом, потому что альтернативой было… ручное торможение диска развертки. И синхроимпульсы появились отнюдь не сразу, потому что уменьшали и без того смешное разрешение.
                                  • +1
                                    Причина, почему в стандартах вещательного телевидения сделали частоту кадров близкой к частоте электросети, очень проста и не требует много букв для разъяснения. Электроника тогдашних телевизоров питалась выпрямленным и сглаженном НЧ фильтрами напряжением сетевой частоты, которое содержало заметные остаточные пульсации частотой 50/60 или 100/120 Гц. Эти пульсации накладывались на пилообразный ток, отклонявший электронный луч в схеме горизонтальной развертки ЭЛТ. Эта схема потребляла большую мощность, так что для её питания трудно было сделать недорогой высокоэффективный фильтр. Если опустить математику, результатом были заметные на глаз волнообразные горизонтальные колебания изображения на экране с частотой, равной разности между частотой кадровой развертки и сетевой частотой. Если эта разница была минимальной (доли герца), такие колебания были очень медленными и не очень мешали восприятию изображения. В идеале, конечно, эти частоты лучше бы было уравнять. В студийном телеоборудовании, где не было нужды экономить каждую копейку, так и было сделано: вместо кварцев использовалась ФАПЧ задающего генератора с сетью. При этом, если приемник потребителя питался от той же энергосистемы, что и студия, и у потребителей пульсаций не было. Кстати, древние компьютерные терминалы эпохи мэйнфреймов тоже имели, вместо кварца, ФАПЧ задающего генератора с питающей сетью.
                                    Описанная проблема исчезла с переходом в абонентских ТВ на импульсные источники питания, случившемся в 80-е годы 20 века. А уже в ЭЛТ мониторах эпохи ПК использование не синхронизированных с сетью частот разверток стало само собой разумеющимся.
                                • –1
                                  А можете объяснить зачем в цифровом видео применяется интерполяция, она ведь только вредит, тем более цифра и без этого жмется хорошо.
                                  • 0
                                    Хотел написать интерлейс, до сих пор его можно в камерах встретить.
                                  • 0
                                    Что-то я вот здесь не понял, если честно. Что значит «ничего не двигается»?

                                    Фи-феномен в действии. Заметили движение на картинке, хотя на ней ничего не двигается?

                                    image
                                    • +1

                                      Темный кружек не двигается, он светится по очереди в разных положениях, но мозг автоматически дорисовывает движение.

                                      • 0
                                        Все кружки остаются на месте. Меняется их яркость, причем так, что мы воспринимаем это как движение ярко-желтого кружка, а не как последовательное изменение яркости статичных кружков.
                                        • +1
                                          это смотря как фокусировать зрение.Я в первый раз вообще смотрел обширно, представляя как фонари поочереди загораются.
                                        • 0
                                          А если ускорить, то эффект сильнее проявится?
                                          image
                                        • 0
                                          На демо видео в 60 fps я все равно вижу мелкое дрожание шарика при перемещении.
                                          как будто он двигается с шагом в пару пикселей но очень быстро.
                                          Думаю 120 fps хватит очень многим.
                                          А в играх кадры позволяют точнее и быстрее целиться.
                                          • 0
                                            Демо видео некорректно. Частота 24 кадра не кратна 60 кадрам в этом видео. Прокрутил видео по шагам, нижний шар перемещается то раз в 2 то раз в 3 кадра из за чего добавляется дополнительная неравномерность движения.
                                          • +2
                                            В демо 24 vs 60 не хватает варианта на 24 с motion blur; было бы интереснее.
                                            • 0
                                              Поставьте на паузу, там как раз вариант с 24 кадрами использует motion blur.
                                              Кстати 24 кадра там не честные, т.к. 60 не делится целочислено на 24, а значит движение там еще более дерганное.
                                              • 0
                                                Да, действительно есть. Но то ли слабоват, то ли тот самый джиттер всё портит.
                                                Надо было видео на 120 к/сек делать, наверное.
                                                • 0
                                                  Не обязательно дёрганное, если использовалась интерполяция кадров. Но интерполяция, хотя и даёт плавность, снижает детализацию.
                                              • +2
                                                • 0
                                                  Неплохой разбор вопроса, спасибо за статью.
                                                  Я привык к тому что в кино используется частота 24 к/с, на мой взгляд это один из нескольких элементов, создающих ощущение «кино» — того, что отличает от любительского видео. И теперь мне некомфортно смотреть современные версии фильмов в 60 к/с.
                                                  • 0
                                                    Слышал от многих геймеров, что VSync — зло из-за джиттера. У меня вот монитор 60 Hz, видеокарта спокойно тянет 160 FPS на FullHD или 120 FPS на 4К в определённой игре, и без VSync играть просто нереально — как раз очень заметны дерганные анимации из-за постоянно скачущего FPS (в тяжелых сценах — 70 FPS, в «обычных» — 120), а с VSync игра просто держит стабильные 60 FPS и все рисуется плавненько.

                                                    P.S. Спасибо за статью, было интересно.

                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.