CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 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
Обновить





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