Разбивающаяся сосулька

При создании визуальных эффектов очень важную роль играют источники частиц. Они позволяют имитировать большое число повторяющихся элементов. Так, например, используя поток частиц, можно создать сноп искр на бенгальском огне или стайку рыб, плывущую под водой. В 3ds Max есть два способа работы с частицами. В простых случаях можно работать с набором стандартных источников частиц. Однако когда требуется создать сложный эффект, лучше использовать модуль Particle Flow. Главное отличие этого модуля от стандартных источников частиц — возможность управления частицами на основе описания событий. С помощью Particle Flow можно настроить анимационный эффект с учетом скорости движения частиц, размера, цвета, формы, изменения положения в пространстве и других характеристик. Рассмотрим пример использования модуля Particle Flow для имитации осколков от сосульки, упавшей с крыши дома.

Создание объектов сцены


Создадим основные объекты для нашей сцены: стену дома, крышу и сосульки. Обращаем ваше внимание на то, что мы не будем создавать дом целиком, так как не планируем, что во время анимации камера будет совершать облет вокруг дома. По нашему замыслу камера будет неподвижна, и сосулька будет падать с одной стены, поэтому лишние объекты создавать ни к чему. С одной стороны, на это тратится лишнее время, а с другой — сцена загромождается ненужными объектами. Начнем со стены. Создайте примитив Box. Подберите для него такие параметры, чтобы он был похож на стену: Length — 1, Width — 130, Height — 8. Удерживая нажатой клавишу Shift, переместите объект в сторону, создав тем самым его копию. Созданный дубликат мы используем для моделирования крыши. Поскольку крыша должна располагаться под наклоном, при помощи команды Rotate поверните клонированный объект на -45 градусов вокруг оси X. Поднимите второй параллелепипед, выровняв его положение так, чтобы оба объекта образовывали стену дома и крышу. Чтобы крыша была реалистичной, сделаем несложную операцию, после которой у зрителя будет создаваться впечатление, что крыша покрыта черепицей. Выделите объект, перейдите на вкладку Modify командной панели и увеличьте число сегментов по ширине (Width Segs) и высоте (Height Segs) до 150. Выберите из списка Modifier List модификатор Displace. Этот модификатор позволяет изменять геометрическую форму объекта, сдвигая каждую вершину полигональной поверхности, основываясь на заданном двухмерном изображении. Задайте силу смещения, выбрав для параметра Strength значение 1,5. В области Image нажмите кнопку None возле параметра Map и выберите в качестве карты смещения процедурную карту Checker. В области Alignment выберите направление смещения вдоль оси Y и, нажав кнопку Fit, выровняйте положение карты смещения. В области Map подберите число элементов крыши, задав частоту повторения рисунка по координатам U и V. Для этого для параметра U Tile установите значение 22, а для параметра V Tile — 3 (рис. 1).

Поскольку после увеличения числа сегментов крыша содержит большое число полигонов, спрячем ее на время, чтобы не тормозить работу в окне проекции. Для этого щелкните правой кнопкой мыши по объекту и выберите команду Hide Selection в контекстном меню. Теперь смоделируем сосульки. Обычно они имеют конусообразную форму, поэтому для их создания используем примитив Cone. Для того чтобы сосулька сужалась книзу, значение параметра Radius 1 должно быть равно нулю. Перейдите на вкладку Modify командной панели и установите для объекта следующие параметры: Radius 1 — 0, Radius 2 — 1, Height — 13. Лед на крыше дома должен иметь слегка неровную форму, которую легко воссоздать при помощи модификатора Noise. Для того чтобы действие модификатора было лучше заметно, в настройках объекта увеличим число сегментов по высоте (Height Segments) до 11. Выберите из списка Modifier List модификатор Noise. Значение параметра Scale, который определяет масштаб зашумления, установите равным 6. Установите флажок Fractal и в области Strength укажите небольшое значение для создания шума в плоскости XY. Для этого задайте значение 0,4 параметрам X и Y. Включите отображение крыши, выбрав из контекстного меню команду Unhide All, и переместите под нее сосульку. Поскольку под крышей обычно находятся сразу несколько сосулек разной формы, клонируйте исходный объект. Проделайте эту операцию несколько раз, создав несколько сосулек. Чтобы сосульки не были одинаковыми, измените форму только что созданных объектов, используя операцию Scale. Измените настройки каждого объекта (рис. 2).

Анимация сосульки с использованием модуля reactor и модификатора Slice

Все готово к созданию анимации. Допустим, после весенней оттепели одна из сосулек отрывается и падает на землю. Чтобы падение этого объекта выглядело реалистично, мы будем использовать модуль для просчета динамики reactor. Чтобы определить уровень земли, на которую упадет сосулька, добавьте в сцену вспомогательный объект Plane. Для этого нажмите кнопку Create Plane на панели reactor. В нашей сцене объект Plane и основание стены дома совпадают. Однако если вы случайно переместили объекты, например, сдвинули стенку, вам необходимо будет выровнять их относительно оси Z. Для этого выполните команду Tools > Align, щелкните на стене дома, в окне Align Selection установите флажок Z Position, а затем установите переключатели Current Object и Target Object в положение Minimum. Для того чтобы reactor просчитал падение сосульки, необходимо выбрать объекты, которые будут участвовать во взаимодействии и включить их в группу твердых тел. Выделим сосульку, стену и плоскость и нажмем кнопку Create Rigid Body Collection. В окне проекции появится вспомогательный объект Rigid Body Collection. В его настройках в списке Rigid Bodies можно увидеть список объектов, которые включены в группу твердых тел. Физические параметры объектов, поведение которых просчитывается модулем reactor, задаются в его настройках. Для доступа к ним нужно нажать кнопку reactor на вкладке Utilities командной панели.

Посмотрите на результат взаимодействия объектов в окне предварительного просмотра. Для этого нажмите кнопку Preview in Window в свитке Preview & Animation настроек утилиты reactor. Запустите анимацию, нажав клавишу P. Вы увидите, что сосулька неподвижна, поскольку для нее не указана масса. Чтобы задать массу падающему объекту, выделите сосульку и в свитке Properties утилиты reactor укажите значение параметра Mass равным четырем. Снова нажмите кнопку Preview in Window, чтобы посмотреть, что получилось на этот раз. Запустите анимацию. На этот раз сосулька должна упасть, однако ее падение будет выглядеть неестественно. Это можно объяснить целым рядом причин. Одна из них — наличие силы трения. Поскольку сосулька скользкая, сила трения у этого объекта минимальная, и при просчете ее учитывать не нужно. Отключите просчет силы трения. Для этого установите флажок Do Not Simulate Friction в свитке настроек World. Опять вызовите окно предварительного просмотра и проиграйте анимацию. На этот раз сосулька упадет так, как нужно, и даже немного покатится по земле. Если результат вас устроит, в свитке Preview & Animation нажмите кнопку Create Animation, чтобы выполнить просчет. После завершения просчета проиграйте анимацию. То, что вы наблюдали в окне предварительного просмотра, теперь происходит в окне проекции — сосулька падает на землю и катится. При падении с большой высоты ледяная сосулька непременно должна была бы разбиться. Попробуем имитировать этот эффект. Предположим, что в результате столкновения куска льда с землей он разламывается на две части, одна из которых разбивается на множество осколков. Поскольку в реальной жизни такое событие происходит очень быстро, человек не успевает увидеть, как одна из частей, ударившись о землю, покрывается трещинами и распадается. Визуально кажется, будто на месте соударения сразу возникает множество осколков, а сосулька мгновенно становится меньше размером. Иными словами, время, в течение которого отколовшийся кусок распадается на мелкие части, мизерно мало. Поэтому, если в процессе анимации в момент соударения сосульки с землей подменить форму целой сосульки на форму сосульки с отколотой частью, а в месте соударения разбросать осколки, зрителю будет казаться, что сосулька разбилась. Передвиньте ползунок анимации, чтобы выяснить, в каком кадре происходит соударение с землей. В нашем случае оно происходит на 17-м кадре. Это означает, что на 17-м кадре сосулька должна быть еще целой, а на 18-м — с отколотой частью. Перейдите на вкладку Modify командной панели и выберите из списка Modifier List модификатор Slice, который поможет нам отсечь ненужную часть. Включите режим автоматического создания ключевых кадров, нажав кнопку Auto Key, расположенную под шкалой анимации. Переместите ползунок анимации на 18-й кадр (возможно, для вашей сцены этот кадр будет иным). Разверните список модификатора Slice в стеке, щелкнув на плюсике рядом с его названием, и перейдите в режим редактирования Slice Plane. Передвиньте плоскость к месту разлома. Переключатель Slice Type установите в положение Remove Bottom. В результате та часть объекта, которая находится ниже плоскости, будет отсечена. Анимируя положение этой плоскости, можно добиться того, что в одном кадре модель будет целой, а в другом — с отломанной частью. Передвиньте ползунок на 17-й кадр и опустите плоскость вниз. Проиграйте анимацию, чтобы убедиться, что вы добились желаемого результата.

Создание осколков при помощи Particle Flow

Осталось смоделировать разлет осколков, в которые превратилась отломанная часть сосульки. Кусочки льда, образованные в результате столкновения с землей, имеют относительно небольшой размер, поэтому их удобно создавать с помощью частиц. Решений этой задачи существует множество. Один из вариантов — создать частицу, которая летит с некоторой высоты и ударяется о землю в той же точке, куда падает лед. В результате столкновения частицы с землей должно произойти порождение новых частиц, которые должны отскочить в разные стороны и снова упасть на землю. При этом дробящаяся частица должна быть невидима для зрителя. Опишем поведение частиц при помощи модуля Particle Flow. Для начала работы с ним необходимо перейти на вкладку Create командной панели, в категории Geometry выбрать строку Particle Systems и нажать кнопку PF Source. Этот объект представлен в окне проекции пиктограммой. Разместите источник PF Source над землей. По умолчанию поток частиц испускается из прямоугольной поверхности. Каждая новая частица появляется в случайном месте этого прямоугольника. Поскольку нам нужно, чтобы источник испускал только одну частицу, его поверхность должна быть небольшой. Это позволит нам точнее попасть частицей в точку столкновения льда с землей. Уменьшите площадь поверхности источника. Для этого перейдите на вкладку Modify командной панели и установите значения параметров Length и Width равными единице. Теперь поток частиц узконаправлен. Выровняйте положение источника частиц таким образом, чтобы он располагался точно над падающей сосулькой (рис. 3). Нажмите кнопку Particle View, чтобы открыть окно с настройками поведения частиц. Для того чтобы сделать какой-нибудь эффект с помощью модуля Particle Flow, нужно описать события, которые происходят с потоком частиц. Для описания событий используются операторы (Operators) и критерии (Tests). Каждое событие состоит из группы операторов и критериев.

Операторы определяют поведение частиц в событии. При помощи операторов можно указать изменение формы, цвета, скорости движения, размера, материала и других характеристик частиц. Критерии нужны для связывания нескольких событий в одном эффекте. Они указывают на то, при каком условии происходит переход от одного события к другому. В окне Particle View (Представление частиц) уже присутствуют два события. Они автоматически были добавлены программой после создания источника частиц. Первое событие является глобальным и, по сути, означает присутствие источника частиц. Следующее событие определяет условия, при которых происходит рождение частиц. Рассмотрим все операторы этого события, которые занесены в него по умолчанию. Оператор Birth отвечает за количество испускаемых частиц, а также за продолжительность порождения частиц источником. Поскольку нам нужна одна частица, установите в настройках оператора один и тот же номер кадра для начала и окончания порождения. Для параметра Emit Start уже установлен нулевой кадр. Установите значение 9 и для параметра Emit End. Число частиц сократите до единицы, введя соответствующее значение в поле Amount. Следующий оператор — Position Icon — оставьте без изменений. Он определяет положение частиц относительно поверхности источника. Оператор Speed определяет скорость движения частицы. Задайте значение одноименного параметра равным тремстам, а направление скорости (Direction) выберите вдоль указателя значка источника частиц (Along Icon Arrow). Оператор Rotation задает случайное вращение потока частиц. Оставьте его без изменений. Оператор Shape определяет форму частицы. Поскольку в данном событии она должна быть невидима, этот оператор нужно удалить. Для этого щелкните по нему правой кнопкой мыши и выберите команду Delete в контекстном меню. Оператор Display определяет вид частицы в окне проекции. По умолчанию она отображается в виде точки. После столкновения частицы с землей поток изменит свое поведение, что означает переход к новому событию. Для перехода к этому событию используйте критерий столкновения с последующим порождением частиц Collision Spawn. Добавьте его в текущее событие, просто перетащив мышью из списка в нижней части окна Particle Viewв текущее событие. В настройках этого критерия необходимо указать объект-отражатель, с которым частица столкнется. На данном этапе мы этого сделать не можем, поскольку в сцене отсутствуют объекты такого типа. Добавьте отражатель в сцену. Для этого перейдите на вкладку Create командной панели, в категории Space Warps выберите строку Deflectors и нажмите кнопку Deflector. Создайте в окне проекции отражатель большого размера так, чтобы он захватывал все объекты сцены. Вернитесь к окну Particle View и в настройках критерия нажмите кнопку By List в области Deflectors. Выберите объект и нажмите кнопку Select. Продолжим настройку критерия. Параметр Offspring регулирует число частиц, порождаемых в результате столкновения. Установите его равным 13. Параметр Divergence, который отвечает за угол разлета новых частиц, установите равным 38. Создайте новое событие. Для этого перетащите значок первого оператора события на свободную область в окне Particle View. После отскока порожденные частицы будут видны, поэтому новое событие лучше всего начать с оператора Display. В списке Type настроек оператора выберите тип отображения Geometry. Чтобы частицы были видны после визуализации, добавьте оператор Shape. В списке Shape выберите тип отображения Tetra (Тетраэдр), так как он наиболее подходит для имитации осколков. Свяжите события между собой. Для этого установите курсор на выступ диаграммы события, который расположен напротив критерия, щелкните мышью и, удерживая кнопку, переместите курсор на мишень в верхней части второго события. На то, что события связаны, будет указывать соединяющая их синяя линия, которая появится сразу после того, как вы отпустите кнопку мыши.

Теперь можно посмотреть, какая анимация у нас получилась. Проиграйте анимацию. В окне проекции вы увидите отскакивающие частицы, однако они слишком крупные. Вернитесь к окну Particle View и в настройках оператора Shape измените значение параметра Size до 1. Чтобы частицы не улетали в бесконечность, необходимо указать силу гравитации, притягивающую частицы к земле. Это можно сделать с помощью оператора Force. Но сначала добавьте в сцену объект, определяющий гравитацию. Для этого перейдите на вкладку Create командной панели, в категории Space Warps выберите строку Forces и нажмите кнопку Gravity. Создайте в окне проекции объемную деформацию. Вернитесь к окну Particle View, добавьте в событие оператор Force и в области Force Space Warps нажмите кнопку By List. Выберите объект и нажмите кнопку Select. Чтобы, отскакивая от отражателя, осколки были по-разному повернуты, добавьте оператор Rotation. Это необязательно, но это придаст движениям реалистичность. Отскочившие осколки приобретают угловую скорость. Задайте ее с помощью оператора Spin. Поскольку частицы притягиваются к земле, и вектор скорости постоянно изменяет свое направление, выберите в списке Spin Axis тип оси Speed Space Follow. Он позволяет задать вращение частицы вокруг оси, положение которой определяется направлением движения частицы. Обратите внимание, что, несмотря на схожие названия, типы оси Speed Space Follow и Speed Space отличаются друг от друга. Во втором случае на протяжении всего события каждая частица вращается вокруг оси, положение которой неизменно, даже если частица изменяет направление. Поскольку вращение частицы относительно всех осей равновероятно, установите для каждой оси (X, Y и Z) значение 1. Параметр Spin Rate задайте равным 1000.

Переходим к последнему событию, которое будет результатом столкновения частиц с землей. В этом событии нужно описать, что частицы находятся в состоянии покоя и лежат на земле. Критерием для перехода к этому событию будет столкновение без порождения частиц. Добавьте критерий Collision. В его настройках нажмите кнопку By List в области Deflectors. Выберите отражатель, уже присутствующий в сцене, и нажмите кнопку Select. Поскольку частицы должны прекратить свое движение, в настройках критерия Collision нужно установить переключатель Test True If Particle в положение Collides, а затем выбрать вариант Stop в списке Speed. Это означает, что частицы остановятся после падения. Новое событие снова начните с добавления оператора Display. Свяжите его с предыдущим событием. В списке Type настроек оператора выберите тип отображения Geometry. Еще раз посмотрите, что у вас получилось, проиграв анимацию. На этот раз частицы не улетают, но продолжают вращаться, даже когда лежат на земле. Остановите это вращение, добавив в событие оператор Spin. Параметр Spin Rate установите равным нулю. Тип оси вращения (Spin Axis) укажите тот же, что и в предыдущем событии — Speed Space Follow (рис. 4). Проиграйте анимацию, чтобы убедиться, что частицы больше не вращаются на месте. Наша анимация в целом готова, однако имеет некоторые недостатки, которые можно устранить. Для этого измените значения некоторых параметров. В настройках критерия Collision Spawn в два раза уменьшим значение параметра Inherited %. Этот параметр определяет скорость порожденных частиц относительно исходной частицы в процентном соотношении. Значение параметра Variation % в области Speed установите равным 25. Подберите такие настройки, чтобы частицы отличались по размеру. Для этого в области Size уменьшите значение параметра Scale % до 70, а значение параметра Variation %, наоборот, увеличьте до 100. Если вы недовольны разбросом осколков, в области Uniqueness можно нажать кнопку New, задающую случайное значение параметра Seed.

Итак, цель достигнута. Лед разбивается на осколки от удара о землю (рис. 5).

Сергей и Марина Бондаренко


Компьютерная газета. Статья была опубликована в номере 18 за 2006 год в рубрике софт

©1997-2024 Компьютерная газета