Показать сообщение отдельно
Старый 30.11.2017, 22:47   #2
Жрец Нефтиды
Модератор
 
Аватар для Жрец Нефтиды
 
Регистрация: 15.07.2012
Адрес: Санкт-Петербург
Сообщений: 1,395
Сказал(а) спасибо: 344
Поблагодарили 539 раз(а) в 368 сообщениях
Вес репутации: 623
Жрец Нефтиды has a reputation beyond reputeЖрец Нефтиды has a reputation beyond reputeЖрец Нефтиды has a reputation beyond reputeЖрец Нефтиды has a reputation beyond reputeЖрец Нефтиды has a reputation beyond reputeЖрец Нефтиды has a reputation beyond repute
По умолчанию

Переходим к самому интересному – полевым испытаниям.
Вначале берём любой HD фильм с разрешением 1920x1080, то есть такой фильм, разрешение которого равно разрешению монитора. Запускаем на BE. "Вид" – "Настройки рендеринга" – "Тест дрожания" (который правильнее было бы назвать тестом на разрыв). Раздвигаем на весь экран. Наблюдаем за двумя ползущими красными вертикальными полосами. Видим, что они ровные, без "ступеньки", и движутся плавно. Выгружаем BE.
Снова запускаем фильм. "Вид" – "Настройки рендеринга" – "Показать статистику". Вот на этом тесте мы застрянем надолго.
В правом нижнем углу видим ползущий график. Он, пожалуй, самый важный показатель синхронизации. По вертикальной оси отложено время. Одно деление соответствует одной миллисекунде.
Однозначно, что чем ровнее на этом графике красная и зелёная линия, тем лучше. Видим, что при предлагаемых выше настройках обе линии ровные и имеют лишь незначительные пульсации. Добиться абсолютно ровных линий, видимо, невозможно в принципе, потому что погрешность в реальных физических процессах всегда присутствует.
Пробуем HD видео с разной fps: 23,976, 24, 25, 29,97, 30… Видим, что линии остаются ровные.
Теперь испытываем видео с разрешением 720x576. Линии стали чуть менее ровными. Это законно: теперь рендеру нужно ещё и отмасштабировать изображение. Но всё равно пульсации незначительные, намного меньше тех гор и впадин, что показаны в английской статье.
Пробуем играть с опциями. Для начала можем попробовать Sync Video Renderer. Увидим, что результат намного хуже. К тому же если мы в нём выберем "Синхронизировать дисплей с видео", то он будет вставлять пустые строки и колонки. Мне вовсе не хочется, чтобы в моё видео чего-то там вставляли.
Возвращаемся к Exchanged Video Renderer (custom presenter). Некоторые опции сильно влияют на гладкость линий, другие же лишь слегка. Например, подъём числа буферов EVR от 5 до 20 лишь слегка улучшает гладкость, но всё же улучшает. В первую очередь попробуй поиграть комбинациями "Ускорить графический процессор видеокарты перед вертикальной синхронизацией" и "Ускорить графический процессор видеокарты после подачи кадра".
Также можно посмотреть визуально те участки фильмов, где, по замыслу, объект должен двигаться равномерно. При приведённых настройках так оно и будет. На старом же железе и ПО наблюдались рывки.
Кого интересует только практическая сторона дела, на этом может остановиться. Я же чувствую себя, как фараон из фильма "Фараон": "Мы их победили, но я абсолютно не понимаю, как".
Попробуем разобраться с линиями на графике. С зелёной линией всё понятно: она отображает тот момент времени, когда кадр будет прорисован на мониторе. То есть зелёная отображает, с позиции времени, тот конечный продукт, который мы увидим глазами. Слово "когда" здесь фундаментальное: синхронизация работает с параметром времени, а не с чем-то другим.
С красной линией сложнее. The red line represents the start of the vertical blank and, when everything flows smoothly, defines zero along the vertical axis. Физическую суть я не понял. В другом месте промелькнула фраза, что красная линия показывает представление кадров. Представление откуда? Куда?
Я перерыл уйму виртуальных хранилищ, где хоть что-то говорится о рендеринге и синхронизации. Все писания, которые я отыскал, ограничиваются начальными сведениями. Авторы быстро скатываются на синхронизацию для электронно-лучевых мониторов и на синхронизацию для игр. Глубинных прояснений физической сути дела я не нашёл. Ну что ж, эта тем будет первой (единственной?), где не будет сказано ни слова ни об играх, ни о древнеегипетских кинескопах.
Вот вопросы, которые мне пока не ясны.
1. Двадцать лет люди смотрят на экранах компьютеров фильмы. Состыковка частоты кадров фильма и частоты обновления монитора – одна из фундаментальных задач при просмотре. Где подробное описание, как всё происходит?
2. Что отображает красная линия на графике? Понятным и доступным языком.
3. Насколько верно, что расстояние по вертикали между красной и зелёной линиями показывает то время, которое пройдёт от представления (откуда, куда?) кадра до его визуализации на мониторе? Я почти уверен в этом, но хочу подтверждения.
4. С чем синхронизировано аудио? С зелёной линией? С красной? С чем-то другим?
5. Вернёмся к статье на русском, на которую я дал выше ссылку. Описанный там метод синхронизации, если разложить на пальцах, состоит в следующем. Момент времени вертикальной синхронизации почти всегда не совпадёт с тем моментом времени, когда кадр нужно воспроизводить по закону. Поэтому воспроизведение кадра отодвигается во времени вперёд до ближайшей синхронизации. Сдвиг может составить, для 60 Гц, от 0 до 16,67 мс. То есть каждый кадр будет воспроизводиться позже, чем положено по закону. Мы можем, конечно, сдвинуть видео по оси времени "назад" на 8,3 мс. Тогда половина кадров будет воспроизводиться раньше, чем положено, другая половина – позже, чем положено, и это раньше или позже будет лежать в диапазоне от 0 до 8,3 мс. Но это не сделает синхронизацию гладкой. Один кадр может воспроизвестись на 8 мс раньше, следующий – на 8 мс позже, и интервал между кадрами окажется на 16 мс больше (в другом случае меньше) положенного. Для fps=25 интервал между кадрами = 40 мс, и 16 сопоставимо с 40. В итоге дрыг. Вот так происходило дело во времена девяносто пятого виндузятника.
Сейчас такого нет. Как это достигается? В английской статье промелькнула идея об интерполяции. Сделаем простой эксперимент. Возьмём любое видео и, как есть, переконвертируем в avi XViD, изменив только частоту кадров на, скажем, 1,9. Смотрим. Видим, как и положено, движение рывками. Если бы присутствовала интерполяция, то она бы в момент воспроизведения сделала движение плавно-размазанным. На fps=25 эту тонкость можно и не уловить, а на 1,9 видно сразу. Нет, никакой интерполяции тут нет.
Смотрим на верхнюю строку статистики, где "Frame rate" и "clock". Видим, что эти два параметра при воспроизведении относительно плавно колеблются в большую или меньшую сторону от 100%. Это наводит на мысль, что частота кадров плавно изменяется в большую или меньшую сторону на протяжении отрезка из, скажем, 20 кадров. Изменяется таким образом, чтобы время, когда нужно воспроизводить кадр, максимально приближалось ко времени вертикальной синхронизации. Это – гипотеза, но ничего другого пока не приходит.
Итак, кому интересно – присоединяемся.

Последний раз редактировалось Жрец Нефтиды; 19.01.2019 в 20:28.
Жрец Нефтиды вне форума   Ответить с цитированием Вверх