Самодельный 3D-дождь в 3ds Max

Начиная с 6-й версии в 3ds max появился замечательный инструмент для создания самых разных эффектов с частицами — Particle Flow. С точки зрения трехмерной графики дождь — это эффект с частицами, так как он состоит и огромного числа небольших капелек, управлять каждой из которых вручную просто невозможно. При помощи Particle Flow можно создать трехмерный дождь и получить возможность управлять всеми каплями сразу и задавать их поведение. Несмотря на то, что на первый взгляд Particle Flow достаточно сложен, разобравшись, что к чему, вы без труда сможете не только вызывать дождь и снег, но и устраивать салют, рассыпать искры и т.д. Чтобы попрактиковаться в создании атмосферных осадков, попробуем создать при помощи Particle Flow анимацию падающих капель дождя на открытый зонт. После соударения капель с куполом зонта каждая капля должна распадаться на несколько более мелких, которые, в свою очеред, будут брызгами разлетаться в разные стороны.

Создание зонтика


Но прежд, чем перейти к созданию анимации дождя, создадим раскрытый зонт, на который будут падать капли. Это удобно сделать при помощи модификатора Edit Poly. Главное преимущество этого модификатора перед работой с редактируемой полигональной оболочкой Editable Poly заключается в том, что все действия, совершенные после назначения объекту модификатора, обратимы. В любой момент вы можете удалить или отключить действие модификатора, вернувшись на первоначальный этап работы с трехмерной моделью. Оговоримся, что это модификатор появился только в 3ds max 7, поэтому, если у вас более ранняя версия 3ds max, вы его не найдете. В этом случае вы можете преобразовать объект в Editable Poly. Зонтик состоит из двух частей: ручки и купола. Начнем с купола. Поскольку форма зонта напоминает фрагмент сферы, логично использовать этот примитив в качестве базового материала для создания будущей модели. Создайте в окне проекции примитив Sphere, в настройках объекта выберите значение параметра Hemisphere равным 0,65 и установите число сегментов равным шести. Последнее необходимо для того, чтобы объект походил на настоящий зонт, купол которого имеет шестиугольную форму. При таком низком количестве сегментов сфера напоминает скорее пирамиду, чем шар (рис. 1).

Для того, чтобы можно было работать с вершинами и гранями объекта, примените к нему модификатор Edit Poly. После его назначения внешне объект никак не изменился, но теперь стало возможным работать с его поверхностью. Перейдите на вкладку Modify командной панели. Раскройте строчку Edit Poly в стеке модификаторов и переключитесь в режим редактирования вершин. В основании получившегося объекта выделите центральную вершину. Перейдите в окно проекции Front и переместите ее вдоль оси Y вверх таким образом, чтобы объект с обратной стороны стал полым. Выйдите из режима редактирования Vertex и вызовите окно настроек инструмента MeshSmooth, щелкнув по иконке рядом с одноименной кнопкой в свитке Edit Geometry. Установите флажок Separate By Smoothing Groups и выберите значение параметра Smoothness равным 1. После этого объект примет форму перевернутой тарелки (рис. 2). Назначьте объекту модификатор MeshSmooth. В свитке Parameters установите флажок Separate By Smoothing Groups. Перейдите в окно проекции Top и раскройте строку MeshSmooth в стеке модификаторов. Переключитесь в режим редактирования Vertex — так вы сможете управлять формой сглаженного объекта. В окне проекции вы можете видеть контрольные точки, обозначенные синим цветом. По контуру объекта расположено 12 пар таких точек. Выделите 6 пар через одну. При помощи инструмента Scale масштабируйте выделенные пары точек в большую сторону примерно на 140%. Используя инструмент Move, переместите выделенные вершины вниз. Это позволит придать зонту округлую форму. Купол готов.

Теперь осталось сделать нижнюю часть зонта — ручку. Для этого еще раз примените к объекту модификатор Edit Poly. Переключитесь в режим редактирования вершин и выделите вершину в центре купола с вогнутой стороны. Воспользуйтесь командой Chamfer для создания полигона в центре купола. Для этого поднесите курсор к выделенной вершине (при этом он изменит форму) и, удерживая левую кнопку мыши, отведите его в сторону. Поскольку ручка зонта имеет загнутую форму, создать ее легче всего при помощи сплайна. Используя инструмент Line, нарисуйте ручку требуемой формы (рис. 3). Чтобы придать сплайну требуемую форму, установите тип излома для каждой точки. Для этого переключитесь в режим редактирования Vertex, выделите требуемую вершину, вызовите контекстное меню программы правой кнопкой мыши и выберите в нем один из четырех вариантов поведения сплайна в ключевой точке — Bezier Corner, Bezier, Corner или Smooth. Поскольку ручка должна располагаться перпендикулярно куполу, положение точек сплайна должно быть такое, чтобы, по крайней мере, две точки лежали на линии, параллельной оси Z глобальной системы координат. Для того чтобы обеспечить такое расположение сплайна, в режиме редактирования Vertex нужно выровнять положение двух точек. Выделите одну из вершин, посмотрите ее координаты в строке состояния, затем выделите вторую вершину и в случае необходимости измените координаты, чтобы две из них совпадали.

Это можно сделать, просто изменив число в соответствующих окошках. Вернемся к нашему куполу, на котором мы сейчас создадим ручку, выполнив выдавливание по форме сплайна. Переключитесь в режим редактирования Рolygon и выделите тот самый полигон, который мы недавно создали в центре объекта. В свитке Edit Polygons нажмите иконку, расположенную справа от кнопки Extrude Along Spline. В окне настроек выдавливания нажмите кнопку Pick Spline и укажите трехмерную кривую в сцене. Увеличьте значение параметра Segments до 40, чтобы ручка не была угловатой. Установите флажок Align to Face Normal, чтобы ручка правильно располагалась на поверхности купола. Купол настоящего зонтика натянут на спицы, поэтому в открытом состоянии должны быть видны их кончики. Для того чтобы их создать, перейдите в режим редактирования Vertex и выделите все вершины по краю купола, на которых должны быть видны спицы. Выделяя вершины, будьте внимательны — по краям модели они расположены близко друг к другу, поэтому вы можете захватить сразу две. Нажмите кнопку Settings, расположенную возле кнопки Extrude в свитке Edit Polygons. В появившемся окне Extrude Polygons установите подходящие значения параметров Extrusion Height и Extrusion Base Width. Проделайте ту же операцию с вершиной, расположенной в центре купола с выпуклой стороны (рис. 4). Зонтик готов, однако во многих местах модель содержит острые ребра, которые необходимо сгладить. Используем инструмент MeshSmooth. Вызовите окно настроек инструмента MeshSmooth, щелкнув по иконке рядом с одноименной кнопкой в свитке Edit Geometry.

Если применить сглаживание при снятом флажке Separate By Smoothing Groups, можно увидеть, что в местах, где должны выступать спицы, видны артефакты. Кроме того, штырь в центре купола после сглаживания оттягивает на себя часть купола. Если же установить флажок Separate By Smoothing, вышеописанные ошибки исчезнут, однако не будет сглажен край рукоятки. Причина такого сглаживания модели заключается в том, что полигон в основании рукоятки имеет группу сглаживания, отличную от остальных полигонов, которые составляют ручку. В этом легко убедиться, если переключиться в режим редактирования Рolygon, выделить полигон, лежащий в основании, и заглянуть в свиток Рolygon Properties. В области Smoothing Groups нажата вторая кнопка. Если вы выделите любой другой полигон, составляющий ручку, номер группы изменится на 1. Из этого следует, что всем полигонам, составляющим рукоятку, кроме того, который лежит в основании, назначена группа сглаживания 1, а крайнему полигону — группа 2. После выполнения операции сглаживания между различными группами сглаживания образуются области с резкими углами, поэтому при установленном флажке Separate By Smoothing Groups основание рукоятки имеет резкие края. Чтобы этого избежать, выделите крайний полигон и измените его группу сглаживания. Для этого в области Smoothing Groups отожмите кнопку 2 и нажмите кнопку 1. Выйдите из режима редактирования Рolygon, снова вызовите окно MeshSmooth Selection и выполните сглаживание объекта, установив флажок Separate By Smoothing Groups. Теперь зонтик выглядит надлежащим образом.

Анимация капель дождя

Теперь настало время перейти к дождю и заставить капли падать на наш зонтик. По умолчанию в 3ds max используется продолжительность анимации длиной в 100 кадров. При настройках по умолчанию можно создать анимацию продолжительностью около трех секунд, чего в нашем случае очень мало. Чтобы увеличить продолжительность анимации, используйте диалоговое окно Time Configuration, которое вызывается при помощи одноименной кнопки, расположенной под кнопками управления анимацией. В этом окне установите значение параметра Length равным 300. После этого вы сможете увидеть, что масштаб линейки времени под ползунком анимации изменился. Создайте в окне проекции источник частиц PF Source. Расположите созданный объект над зонтом таким образом, чтобы при воспроизведении анимации частицы опускались на купол зонта (рис. 5). Источник частиц Particle Flow в окне проекции по умолчанию принимает прямоугольную форму, а стрелка в центре такого прямоугольника обозначает направление движения частиц. Поскольку капли должны отскакивать от поверхности зонта, необходимо назначить зонту свойства отражателя. Для того чтобы это сделать, нужно создать в окне проекции вспомогательный объект-отражатель. Купол зонта имеет сложную геометрию — это не плоскость и не сфера, поэтому нужно выбрать тип отражателя UDeflector (Универсальный отражатель) и указать в его настройках, какой объект в сцене будет обладать свойствами отражателя. Для создания этого объекта перейдите в категорию SpaceWarps, выберите строку Deflectors и нажмите кнопку UDeflector. Создайте его в любом месте окна проекции, в свитке Basic Parameters нажмите кнопку Pick Object и укажите модель зонта в сцене. При значении параметра Bounc, равном единице, частицы будут отскакивать от поверхности купола зонта. Теперь необходимо описать события, которые должны происходить с потоком частиц.

Выделите источник частиц и перейдите на вкладку Modify командной панели. С помощью кнопки Particle View откройте окно событий Particle View. Вы также можете открыть это окно, просто нажав клавишу 6. После того, как в сцену добавлен тип источника частиц PF Source, окно Particle View включает в себя начальную диаграмму событий (рис 6). Cобытие Global Event — это факт существования частиц. Строчка Render 01 (Geometry) в этом событии отвечает за то, будут ли визуализироваться частицы потока, а также в каком виде они будут просчитываться (с учетом геометрии каждой частицы, по габаритным контейнерам для каждого элемента и т.д.). Оставляем этот пункт без изменений.

Первое событие (Event 01) — порождение новых частиц источником. Рождение частиц определяется оператором Birth 01. В настройках этого оператора можно указать первый кадр, в котором произойдет рождение частиц (Emit Start), и последний (Emit Stop), после которого частицы появляться не будут. Кроме этого, оператор Birth отвечает за количество частиц (Amount), испускаемых источником PF Source. В нашем случае необходимо установить следующие значения: Emit Start — 0, Emit Stop — 300, Amount — 500. Второй оператор в группе этого события — Position lcon 01. Его настройки определяют область испускания частиц. Тут необходимо в выпадающем списке Location (Область) выбрать вариант Volume (Объем). Это означает, что частицы будут порождаться не на поверхности объекта, а в каком-то объеме. Следующий оператор — Speed 01 — задает скорость и направление потока частиц. Установите значение параметра Speed равным 25, а в выпадающем списке Direction (Направление) выберите Along Icon Arrow (в направлении стрелки, обозначенной на значке PF Source). Оператор Rotation 01 в нашей сцене не имеет особого значения, так как его настройки указывают характер вращения отдельных частиц. Оператор формы — Shape 01 — по умолчанию хранит информацию о том, что частицы потока должны обладать формой сферы. Форма выбирается в выпадающем списке Shape. Также можно установить размер частиц (параметр Size). В нашем случае он будет равен 0,36. Оператор Display 01 (Ticks) предназначен для управления отображением частиц в окне проекции. Поскольку трехмерная сцена в 3ds max может содержать большое количество потоков частиц, разобраться в таком многообразии элементов довольно трудно. Поэтому любой поток частиц в любом событии можно представить в окне проекции в виде точек, крестиков, звездочек и т.д. Чтобы при взгляде на диаграмму событий сразу же можно было определить, частицы какого события отображены в окне проекции, достаточно найти их цвет в диаграмме напротив оператора Display. На этом первое событие прерывается. Поток частиц рождается, частицы приобретают форму сфер и с определенной скоростью летят в заданном направлении. Для того, чтобы перейти к следующему событию, мы должны установить критерий отбора частиц для второго события. Таким критерием должен стать факт появления новых частиц в результате столкновения с зонтом.

Добавьте в список операторов первого события (Event 01) оператор Collision Spawn. Он создает новые частицы после столкновения с объектом. Выделите этот оператор, чтобы задать для него некоторые настройки. В списке Deflectors при помощи кнопки Add укажите объект UDeflector, созданный нами в сцене ранее. Установите переключатель Spawn Rate and Amount в положение Spawn On First Collision (Соударение при первом столкновении). Установите флажок напротив опции Delete Parent (Удалить порождающие частицы) для того, чтобы, ударившись о поверхность купола зонта, частицы исчезали, порождая новые. Значение параметра Spawnable % укажите равным 100 — это означает, что все частицы, столкнувшиеся с зонтом, будут исчезать и порождать новые частицы. Число новых частиц, образовавшихся на месте каждой упавшей на зонт капли, установите равным пяти (параметр Offspring #). Установите флажок напротив опции Restart Particle Age. Это даст возможность оперировать возрастом вторичных частиц с момента их рождения. В списке Offspring, который находится в области Speed, выберите действие Bounce. Обратите внимание, что, если в списке Offspring будет установлен тип действия Continue, после соударения с поверхностью зонта новые частицы продолжат свое движение в прежнем направлении. Если на этом этапе визуализировать анимацию, вторичных частиц на ней видно не будет, так как были созданы лишь условия к переходу ко второму событию. Само же событие создано не было. Создадим его.

Второе событие (Event 02) должно описывать поведение частиц, образовавшихся в результате соударения. Их поведение должно выглядеть приблизительно следующим образом: каждая частица должна отлететь от поверхности зонта и, уменьшаясь в размерах, исчезнуть на небольшом расстоянии от места падения породившей ее частицы. Такой характер движения частиц создаст иллюзию брызг, возникающих в результате падения капель дождя на зонт. Оператор, описывающий движение частиц, в этом событии создавать не надо, поскольку отскок вторичных частиц уже указан в настройках оператора Collision Spawn в предыдущем событии (Event 01). Остается задать уменьшение размеров при отлете. Для этой цели можно использовать оператор Scale. Перетащите его в окно событий на любое свободное место, создав тем самым событие Event 02. Установите тип масштабирования Absolute. Благодаря этому масштабирование будет применено к каждой частице по отдельности. Добавьте ко второму событию оператор Display и задайте в его настройках любой цвет, отличный от того, который вы задавали в настройках этого же оператора в первом событии. Это даст вам возможность отличать в окне проекции падающие и отражающиеся частицы по цвету. Укажите направление движения частиц от события Event 01 к событию Event 02. Для этого захватите указателем мыши выступ в левой части строки критерия Collision Spawn, убедитесь, что указатель мыши изменил форму и напоминает "прицел", и, удерживая нажатой левую кнопку мыши, перетяните его к похожему выступу блока Event 02. Как только вы отпустите кнопку, на экране появится линия, указывающая стрелкой направление протекания событий (рис. 7).

Вернемся к настройке оператора Scale. Этот оператор устанавливает масштаб каждой частицы, управляя, таким образом, ее размером. Так как геометрические размеры вторичных частиц изменяются, необходимо анимировать настройки этого оператора. Величина, которая должна меняться — Scale Factor. При установленном флажке Constrain Proportions величина масштаба изменяется одинаково в направлении каждой из осей координат — X, Y, Z. Установите ползунок анимации в крайнее левое положение и нажмите кнопку Auto Key, включающую режим автоматического создания ключевых кадров анимации. Выделите в окне Particle View оператор Scale 01 и установите начальное значение параметра Scale Factor равным 67. Благодаря этому вторичные частицы будут иметь начальный размер, составляющий 67% от размера порождающих их частиц. Передвиньте ползунок анимации на 4-5 кадров и уменьшите значение параметра Scale Factor до 0. Выключите режим автоматического создания ключевых кадров анимации. Обратите внимание, что на шкале анимации не отображаются маркеры ключей анимации. Это объясняется тем, что создаваемые ключи относятся к времени жизни частиц, а не к времени протекания анимации в целом. В списке Animation Offset Keying: Sync By выберите тип Event Duration. Это означает, что изменение параметра Scale Factor будет происходить в течение всего события Event 02. Сцена готова. Анимировав ее, мы получим то, что требовалось: капли дождя падают на раскрытый зонт, разбиваются на несколько более мелких капель, которые, разлетаясь, уменьшаются в размере до тех пор, пока не исчезнут.

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


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

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