2. Объект считается динамическим, а не статическим. Частицы возникают, меняются и пропадают, а за время своего существования могут менять расположение и вид.
3. Объекты определены не совсем четко, то есть задан только набор начальных условий и правила возникновения, изменения и исчезновения частиц.
На всех этапах существования частиц на них влияют вероятностные процессы, поэтому форма и вид объекта в каждый момент времени точно не определены.
Чтобы упростить рендеринг систем частиц, обычно делают следующие предположения:
□ Частицы не могут перекрываться.
□ Частицы не отражают свет, а излучают его.
□ Частицы не отбрасывают теней на другие частицы.
В набор атрибутов частиц обычно входят координаты, цвет, прозрачность, скорость, размер, форма и время жизни. При рендеринге системы частиц атрибуты каждой частицы сопоставляются с некоторыми общими параметрами, что позволяет правильно обновлять координаты частиц и их вид в каждом кадре. Все координаты частиц должны обновляться в зависимости от начального вектора движения, влияния гравитации, ветра, трения и других факторов. Цвет каждой частицы (включая прозрачность), их размер и форма могут меняться как функция от времени, а время жизни частицы, ее высоту, скорость и любые другие параметры можно вычислить.
Преимущества данной технологии рендеринга в том, что с ее помощью можно создавать довольно сложные системы с минимальными усилиями. С другой стороны, их можно усложнять или, наоборот, упрощать. Билл Ривз в статье [8] отмечает: «Самое важное в системах частиц - то, что они меняются: такое поведение делает объекты очень реалистичными».
13.6.1. Настройка приложения
Шейдер в следующем примере работает, как хлопушка, начиненная конфетти, - откуда-то появляется множество маленьких ярких кусочков бумаги. Они появляются не все сразу, а постепенно. Их начальные скорости случайны, но установлено общее направление от начальной точки. На частицы будет влиять гравитация, и в конце концов все они опустятся вниз.
Код, приведенный в листинге 13.3, представляет собой программу на языке С, создающую начальные значения для нашей системы частиц. Для каждой частицы задаются начальные координаты, выбранный случайным образом цвет, случайное (с некоторыми ограничениями) значение скорости и случайное время появления.
Функция createPoints позволяет создавать двухмерную сетку из точек произвольного размера. В принципе, в сетке нет необходимости, но эффект разлета частиц из сетки, как кусочков поп-корна, выглядит интересно. Проще всего определить систему частиц в одномерном массиве, тогда все координаты вершин будут иметь одинаковое начальное значение (например, (О, 0, 0)).
Однако в этом шейдере частицы определены в двухмерном массиве, размеры которого и определяют количество создаваемых частиц. После выделения памяти под массивы во вложенном цикле вычисляются значения для каждого из атрибутов частицы в каждой ячейке сетки. В каждом наборе координат г/-компонент будет равен 0, а х- и 2-компоненты будут различными для каждой новой ячейки. Каждое значение цвета определяется случайным образом из диапазона [0,5, 1,0] - для того чтобы цвета были светлыми, пастельными. Векторы направления движения тоже случайны, но имеют строгий уклон вниз - для этого их г/-координата умножается на 10. В общем движение частиц направлено в сторону добавлением числа 3 к х- и 2-координатам. И наконец, каждой частице назначается начальное значение времени из диапазона [0, 10].