Pull to refresh

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

Reading time17 min
Views69K
Original author: Paul Bakaus
История о чувстве зрения, восприятии кадров и частоты обновления, размытости движущегося объекта и телевизионных экранах.
(также см. перевод статьи того же автора «Иллюзия скорости» — прим. пер.)

Введение


Вы могли слышать термин кадры в секунду (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 для любых движущихся картинок на экране, а если кто спросит почему, отправьте его к этой статье.
Tags:
Hubs:
Total votes 89: ↑89 and ↓0+89
Comments51

Articles