CFA LogoCFA Logo Computer
Загрузка поиска
Новости Компьютеры Прайс-лист [Новое] Прайс-лист [Б/У] Для ноутбуков Конфигуратор ПК Заказ, Оплата, Доставка Сервис объявления Драйвера Статьи Как нас найти Контакты
Новости
RSS канал новостей
Несмотря на лето и запрет в Украине российских интернет ресурсов Яндекс, Mail.Ru и других, посещаемость ...
Китайская компания Colorful презентовала в эти дни свою новую материнскую плату на базе топового ...
Компания Google опубликовала в эти дни свой ежемесячный отчет о распределении на рынке фирменной ...
Тайваньская компания Gigabyte Technology сегодня официально представила свою башенную систему охлаждения ...
Компания LG Electronics планирует расширить линейку своих флагманских смартфонов LG G6. К выпущенной ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Свежемороженая скорость

Алексей САЛО clone@bk.ru

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

Теория

Как уже говорилось, Motion blur возникает, когда мы пытаемся сделать снимок с помощью фотоаппарата объекта, который движется с большой скоростью. Так как затвор (или шторка) фотообъектива открывается на период времени, больший, чем 0, то наш фотоаппарат «видит» изображение чуть в разных позициях. В результате мы получаем на снимке один объект в разных позициях, и этот объект выглядит смазано (размыто). Взгляните на Рис. 1 и 2. На первом рисунке у нас изображен падающий вниз шарик без использования эффекта (не очень-то и заметно, что он вообще падает). На втором рисунке у нас опять падает шарик, но уже с эффектом motion blur (согласитесь, это выглядит намного понятней и реалистичнее). Теперь поговорим о том, как этот эффект реализовать в играх.

Рис. 1.   Рис. 2.

Реализация

Наиболее очевидное решение — нарисовать несколько сцен в различный период времени (начало падения шарика, его состояние через 5 мс, потом через 10 мс после падения). Затем следует «склеить» все кадры воедино.

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

Теперь о том, как мы будем смешивать эти кадры. Можно просто наложить один на другой. А можно отрисовать каждый кадр, используя при этом альфа-канал. В качестве альфа-величины (величины прозрачности) для каждого кадра будем использовать 1/кадр. То есть, первый кадр у нас будет полностью непрозрачным (1/1=1 :-)). Второй кадр будет иметь прозрачность 1/2, и так далее.

Альфа-метод более гибок. Во-первых, мы можем менять количество кадров, которые хотим смешать. Во-вторых, мы можем размыть только движущиеся объекты. То есть, если мы имеем сложный статический фон, нам не нужно прорисовывать его по несколько раз в одном один кадре. Вместо этого мы один раз прорисовываем фон, а затем рисуем с альфа-каналом размытые объекты (тем самым экономим время и не теряем качество — неплохая оптимизация). Например, у нас есть игра, скажем, гонки на автомобилях. Мы сидим в салоне машины. Салон для нас — это статический фон, и размывать его при движении руля не обязательно :-). Теперь мы можем не беспокоиться о салоне и размывать только окружающую среду (деревья, линию дорожной разметки и т.д.) Если бы мы использовали первый метод, то пришлось бы рисовать по 4 варианта каждого кадра, как для окружающей среды, так и для салона автомобиля. Разумеется, хороших fps (frame per second) нам при этом не видать.

Что ж, на этом можно закончить. Написание кода — это уже не так сложно, если вы представляете себе задачу. Но будьте осторожны: при перепрорисовке сложных объектов происходит серьезная потеря скорости. Вот некоторые советы, чтобы хоть как-то решить эту проблему:

перепрорисовывайте только движущиеся объекты;

отключайте motion blur полностью, когда этот эффект не нужен;

предоставьте возможность пользователю отключить motion blur, если он этого хочет.

Кстати, вы некогда не задумывались над тем, почему в знаменитой NFS (Need For Speed) эта технология не использована? Не думаю, что с motion blur эта игра выглядела бы хуже…

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © www.sector.biz.ua 2006-2015 design by Vadim Popov