Анимированные шейдеры

С помощью анимации можно показать все, что только человек может себе представить. Эта возможность делает анимацию очень гибкой, придуманной для понимания чего-либо сразу многими.

Уолт Дисней Как точно заметил Уолт Дисней, анимация предоставляет зрителю множество информации. Вращение объекта позволяет получить представление о его очертаниях и форме. Имитация пребывания внутри здания дает человеку, находящемуся в нем, представление о том, как здание будет выглядеть изнутри. Увидев мимику лица на экране, можно понять, какие эмоции испытывает человек.

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

В этой главе рассказывается, как написать шейдер, создающий эффект анимации. Обычно эффект анимации контролируется одной или несколькими uniform-переменными, через которые передается время от приложения. Можно передавать номер кадра, количество прошедшего времени или любое другое значение, с помощью которого можно контролировать время. Если изображены несколько объектов, которые должны двигаться по-разному, каждый объект будет нарисован своим шейдером. Если же у объектов одинаковы все характеристики, кроме параметров анимации, исходные коды шейдеров будут различаться только фрагментом, определяющим эффект анимации для конкретного объекта.

Шейдер можно написать так, что он будет рисовать объект по-разному всякий раз при новом значении времени. Чтобы избежать дефектов изображения и разрывов при движении объекта, в конце временного цикла объект должен возвратиться в первоначальное положение. Если приложение использует для создания эффекта анимации шейдер, ему уже не нужно выполнять сложные вычисления - лишь обновлять значения времени при смене кадров и перерисовывать объект. Но иногда приложение может выполнять и некоторые дополнительные вычисления для достижения интересных эффектов анимации.

Интересные эффекты анимации создаются с помощью хранимых и процедурных текстур, шума и другими способами. В этой главе будут описаны некоторые простые эффекты анимации и шейдеры для изменения формы и расположения объекта, а также для имитации колебательных движений.

3.1. Два режима рисования объекта

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


⇐ вернуться назад | | далее ⇒