Гордон Фримен

Half-Life Inside: всё о вселенной Half-Life

Киноэффекты в Source: Размытие в движении

И кино и телевидение представляют последовательность картинок как видео с фиксированной частотой кадров. Кино работает с частотой 24 Гц (или 24 кадра в секунду), в то время как телевидение работает на частоте 50 или 60 Гц в зависимости от системы PAL или NTSC. Как могли заметить обладатели современных видео-карт, 3D игры, такие как Day of Defeat, не используют фиксированную частоту — кадры отрисовываются с максимальной возможной частотой.

В идеале, игры отрисовываются с частотой обновления экрана вашего монитора: 60-75 Гц для LCD и обычно 85-100Hz для CRT мониторов. Здесь на сцену выходит Вертикальная Синхронизация (Vertical Sync или V-Sync). Вертикальная синхронизация используется для того, чтобы гарантировать, что частота кадров соответствует частоте обновления экрана или, в более сложных сценах, частному от частоты обновления. Это сделано для того, чтобы избежать дерганья, когда кадры отрисовываются с частотой, отличной от частоты отображения их монитором.

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

Давайте рассмотрим пример: машина движется со скоростью 200 км/ч. Каждый кадр отображается в течение 1/24 секунды*, а наша машина двигается со скоростью 55 метров в секунду. За каждый кадр машина пройдет примерно 2.3 метра, так что пока нос машины только пересекает финишную черту в начале кадра, к его концу он уже сдвинется на всю длину корпуса. Этим и вызвано появление эффекта размытости в движении.

* Наш читатель Дэн Ветановец прислал нам письмо, в котором указал, что из-за механизма кинокамер наш пример не вполне технически корректен. Он также прислал точное описание процесса, но принцип остался тем же. Мы решили не смущать читателей длинным техническим объяснение — достаточно сказать, что если объект движется быстрее чем пленка — возникает размытие. Спасибо Дэн.

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


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

Day of Defeat. Размытие в движении (Accumulation Buffer)

https://youtu.be/f-sov0BqL0g

Существуют разные методы вычисления размытия в движении в реальном времени, но в Valve считают, что ни один из них не может дать того уровня реализма, как режим Accumulation Buffer, который они используют. У нас есть короткий видеоклип, демонстрирующий Frame Feedback — один из методов, признанных неподходящими. Он использует изображение из старых кадров в реальном времени — что выливается в дергающийся бардак и не работает нормально. Скачайте видео, также известное как «Когда размытие происходит не так, как надо».

Day of Defeat. Размытие в движении (Frame Feedback)

https://youtu.be/VmgrVmqqk7A

Второй метод — известный как Vector Motion Blur — используется в демо компании ATI — Dangerous Curves, которое можно скачать с демо-страницы ATI. При этом методе во время рендеринга картинки сохраняется вектор движения каждого пикселя на экране. Эти векторы в последствие используются для отрисовки размытия по направлению движения.

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

Глубина резкости и размытие в движении вместе

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

Ранее, мы могли достичь этого для всей сцены разом с помощью Уровня Детализации (LOD), но глубина резкости позволяет нам накладывать исправления в зависимости от сценария, выделяя то, что нужно с максимумом детализации и одновременно привлекая внимание игрока к важным частям сцены.


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

Технология Accumulation buffers известна достаточно давно. Вкратце, это название означает, что отдельные кадры помещаются в буфер, где они хранятся (или «аккумулируются») для последующего повторного использования в сцене с несколько иной целью рендеринга. Это работает примерно так же, как и временной анта-алиасинг у ATI: второй кадр рисуется на немного иной цели рендеринга для создания более плавной картинки при совмещении кадров.

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

Day of Defeat. Глубина резкости и размытие в движении (Accumulation Buffer)

https://youtu.be/a__amZ9YoAk

Day of Defeat. Глубина резкости и размытие в движении (Accumulation Buffer) — Полноэкранная версия

https://youtu.be/kTCUXcT4QSg

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

Cтраницы: 12345