3D Studio MAX: первые шаги. Урок 16. Системы частиц. Часть 1
РАrrау
Система частиц РАrrау (Массив частиц) — произвольное множество частиц, которые могут распределяться на поверхности объектов некоторым образом и позволяют имитировать взрывы и скопления объектов. Принципиальным отличием данной системы от рассмотренных выше является возможность определения геометрического объекта, который будет вести себя как эмиттер, то есть испускать частицы. Однако это будет лишь виртуальный источник частиц — настоящим источником является реальный эмиттер, который генерирует частицы в соответствии с определенными для них параметрами, но, в отличие от рассмотренных выше систем частиц Spray и Snow, никак не влияет на них своим местонахождением, направлением или размером.
Создайте систему частиц РАrrау и произвольный объект, который будет использоваться в качестве виртуального эмиттера, например обычную геосферу (рис. 39). Запустите анимацию — никаких частиц генерироваться пока не будет, так как виртуальный эмиттер не указан. В свитке BasicParameters щелкните на кнопке PickObject и укажите геосферу. Нажмите кнопку Play на панели анимации — частицы тут же появятся, причем они будут вылетать не из реального РАrrау-эмиттера, а из заменяющей его геосферы (рис. 40).
Рис. 39. Исходные объекты — геосфера и РАrrау-источник
Рис. 40. Вид проекций с РАrrау-частицами в одном из промежуточных кадров
За настройку параметров РАrrау-частиц отвечает целая группа свитков:
- Basic Parameters — определяет базовые параметры частиц: размер эмиттера (IconSize), способ размещения частиц над поверхностью (ParticleFormation), вариант отображения их в окнах проекций (ViewportDisplay) и т.д.;
- Particle Generation — регулирует параметры возникновения частиц: количество частиц, появляющихся в одном кадре (UseRate), общее число частиц, создаваемых за все время жизни системы (UseTotal), скорость/разброс друг относительно друга/угол расхождения (Speed/Variation/Divergence), момент появления/исчезновения (EmitStart/EmitStop), продолжительность жизни (Life), размер (Size) и т.п.;
- Particle Type — устанавливает тип частиц;
- Rotation and Collision — управляет вращением частиц (скоростью вращения — SpinSpeedControls и осью вращения — SpinAxisControls) и столкновениями между ними (InterparticleCollisions);
- Object Motion Inheritance — позволяет управлять движением частиц посредством перемещения эмиттера, определяя процент частиц, которые унаследуют движение объекта-эмиттера в момент формирования частиц (Influence), регулируя силу, с которой движение эмиттера влияет на частицы (Multiplier) и устанавливая процент случайного изменения параметра Multiplier (Variation);
- BubbleMotion — отвечает за создание эффекта покачивания частиц при их движения (данный эффект имеет место, например, при поднятии пузырьков воздуха на водную поверхность) посредством таких параметров, как пройденное частицей расстояние (Amplitude), временной период прохождения одного колебания пузырьковой волны (Period), первоначальное смещение пузырькового узора вдоль вектора (Phase) и др.;
- ParticleSpawn — определяет поведение частиц, переживших столкновение или смерть;
- Load/SavePresets — позволяет сохранять/загружать параметры настройки частиц для дальнейшего использования данных настроек в других системах частиц.
Разберемся с некоторыми базовыми настройками параметров частиц непосредственно на примере созданной выше РА rrау-системы. Увеличьте число частиц, установив параметр UseRate (свиток ParticleGeneration) равным 100 (рис. 41). Теоретически количество частиц может задаваться и через параметр UseTotal, но чаще всего он используется для имитации потока частиц, движущихся без следа, в то время как параметр UseRate оптимален для создания потока частиц, оставляющих след. Увеличьте размер частиц до 5 (параметр Size в свитке ParticleGeneration) — на внешнем виде частиц в окнах проекций это никак не скажется, поскольку по умолчанию они отображаются в виде крестиков (вариант Ticks в свитке Basic Parameters), однако будет заметно при визуализации (рис. 42).
Рис. 41. Результат увеличения числа частиц
Рис. 42. Вид сцены с исходным (слева) и увеличенным размером частиц
Частицы могут визуализироваться различным образом в зависимости от типа, к которому принадлежат, — установка типа производится в свитке ParticleType. По умолчанию частицы имеют тип StandartParticles, а потому могут отображаться в виде треугольников (Trangle), шестиугольников (SixPoint), кубов (Cube), прямоугольников (Facing), тетраэдров (Tetra), сфер (Sphere) и т.д. (рис. 43).
Рис. 43. Варианты отображения частиц типа StandartParticles — в виде шестиугольников (слева) и кубов
В качестве других типов частиц предусмотрены типы (рис. 44):
- MetaParticles (Метачастицы) — каждая частица при визуализации заменяется мета-сферой (metaball), в результате чего частицы сливаются друг с другом наподобие реальных водяных капель;
- ObjectFragments (Фрагменты объекта) — частицы отображаются в виде фрагментов объекта, вылетающих с его поверхности, что позволяет создавать имитацию взрыва или иного разрушения объекта;
- Instanced Geometry (Геометрия образца) — частицы наследуют свойства некоторого объекта сцены, взятого в качестве образца, поэтому системы таких частиц используются для имитаций скоплений некоторых объектов (стая птиц, косяк рыб и т.п.).
Рис. 44. Другие варианты отображения частиц — MetaParticles (слева), ObjectFragments (в центре), InstancedGeometry (справа)
Установите тип частиц ObjectFragments, уменьшите скорость перемещения частиц до 1, а продолжительность жизни каждой частицы увеличьте до 100, соответствующим образом изменив параметры Speed и Life в свитке ParticleGeneration, и визуализируйте все кадры анимации. Частицы окажутся представленными отдельными плоскими фрагментами объекта, которые начнут медленно отплывать от объекта в разные стороны, а объект, несмотря на подобное разрушение, будет оставаться целым и невредимым (рис. 45). Поэтому выделите геосферу и скройте ее (команда Hide Selection из контекстного меню), а для придания толщины ее осколкам установите для параметра Thickness значение 5 (свиток ParticleType) — рис. 46. Как видно из анимации, частицы-фрагменты при движении не меняют плоскости, в которой изначально были расположены, а потому их анимация на разрушение объекта (например, в результате взрыва) не похожа. Для исправления ситуации увеличьте разброс частиц друг относительно друга и угол расхождения частиц (параметры Variation и Divergence в свитке ParticleGeneration), а также значение скорости разброса частиц ( Speed) примерно до 5 (рис. 47). В итоге геосфера станет рассыпаться на куски, разлетающиеся случайным образом (рис. 48). Сохраните созданную анимацию — чуть позже она нам потребуется.
Рис. 45. Отбрасывание плоских фрагментов от объекта (объект видим)
Рис. 46. Отбрасывание объемных фрагментов от объекта (объект невидим)
Рис. 47. Настройка параметров разброса частиц
Рис. 48. Вид разлетающейся на куски геосферы в одном из промежуточных кадров
По умолчанию частицы размещаются над поверхностью объекта беспорядочно (включен вариант OverEntireSurface в свитке Basic Parameters), однако для частиц типов StandardParticles и MetaParticles возможны и другие варианты, когда частицы располагаются:
- по видимым ребрам объекта — AlongVisibleEdges;
- по всем вершинам — AtAllVertices;
- в отдельных точках — AtDistinctPoints;
- в центрах граней — FaceCenters.
Для того чтобы более наглядно увидеть разницу между вышеназванными вариантами размещения частиц, создайте новую сцену с кубом и системой РА rrау-частиц и укажите куб в качестве виртуального эмиттера. Уменьшите скорость частиц до 1 и увеличьте размер до 5 (параметры Speed и Size в свитке ParticleGeneration), а в свитке ParticleType для частиц типа StandardParticles выберите вариант Sphere. Затем в качестве варианта размещения вначале установите в свитке Basic Parameters метод AlongVisibleEdges, а затем — AtAllVertices, каждый раз проводя рендеринг, — в итоге частицы будут вылетать не беспорядочно, а строго из ребер или из вершин куба соответственно (рис. 49).
Рис. 49. Вид сцены в промежуточном кадре анимации: вариант AlongVisibleEdges (слева), AtAllVertices (справа)
Взрыв геосферы
Воспользуемся сохраненной анимацией для создания имитации взрыва геосферы. Пока полученный вариант разлетающихся частиц геосферы на взрыв мало похож хотя бы потому, что геосферу мы скрыли (иначе она оставалась бы на экране невредимой, несмотря на появление разлетающихся из нее осколков), а она должна быть видна в нескольких начальных кадрах и лишь затем должна исчезнуть. Напрямую анимировать ее видимость не получится, однако это возможно через редактор дескрипторов DopeSheet. Для открытия редактора выберите из меню Graph Editor (Редактор графов) команду Track View- Dope Sheet. Подсветите в его левой части объект GeoSphere 01 и создайте трек видимости, применив команду Track s=> Visibility Track=> Add (рис. 50). В списке параметров объекта появится дополнительная строка Visibility — выделите ее, активируйте инструмент AddKeys (Создать ключи) и щелкните в произвольном месте строки трека видимости. По умолчанию значение данного ключа равно 1 во всех кадрах, а значит, объект всегда видим. Активируйте созданный ключ и в нижних полях ввода укажите для него номер кадра, в котором объект должен пропадать, и значение 0 (рис. 51) — в итоге объект будет самостоятельно исчезать при начале его разрыва на отдельные фрагменты. Дополнительно создайте ключ в 0-м кадре и установите его равным 1, чтобы в начальных кадрах анимации сфера оставалась видимой.
Рис. 50. Создание трека видимости
Рис. 51. Определение параметров ключа видимости
Для того чтобы взрыв объекта выглядел более реально, желательно подобрать геосфере и частицам подходящие материалы. В данном случае для геосферы использовано текстурное изображение, а для частиц — стандартный материал с красным цветом на канале Diffuse и большим значением SpecularLevel. В самой геосфере потребуется сымитировать эффект горения на начальной стадии взрыва, чего можно добиться посредством атмосферного эффекта FireEffect. Для создания такого эффекта воспользуйтесь командой Rendering=>Environment (Визуализация=>Окружение), на вкладке Atmosphere (Атмосфера) щелкните на кнопке Add (Добавить) и выберите эффект FireEffect. Перейдите на панель Create=>Helpers, выберите на ней уровень AtmosphericApparatus и создайте сферический гизмо SphereGizmo. Разместите гизмо внутри сферы и отрегулируйте его размер так, чтобы он был немного меньше сферы. В области FireEffectParameters окна EnvironmentandEffects щелкните на кнопке PickGismo (Указать гизмо) и укажите созданный вспомогательный объект на любом из видовых экранов. Настройте параметры эффекта в соответствии с рис. 52. В группе Explosion щелкните на кнопке SetupExplossion и установите начало и конец взрыва (рис. 53).
Рис. 52. Настройка параметров эффекта Fire Effect
Рис. 53. Настройка времени начала и конца взрыва
После добавления эффекта горения придется скорректировать процесс разбрасывания частиц в ходе взрыва — в данном случае оказалось достаточно изменить момент появления частиц в сцене (параметр EmitStart в свитке ParticleGeneration) — рис. 54. В итоге будет получена весьма реалистичная анимация взрыва, когда геосфера вначале начинает светиться, а затем разлетается на множество разносящихся в разные стороны осколков (рис. 55).
Рис. 54. Корректировка времени начала появления частиц
Рис. 55. Отдельные кадры анимации взрыва
Движущийся косяк рыбы
Пусть у нас имеется образец некоторого объекта, например рыбы (рис. 56), на основе которого требуется сгенерировать группу однотипных объектов — косяк рыбы. Загрузите объект-образец, создайте систему РА rrау-частиц и цилиндр, назначьте цилиндр виртуальным эмиттером, щелкнув в свитке Basic Parameters на кнопке Pick Object, а затем на цилиндре (рис. 57). В свитке ParticleType вначале установите тип частиц InstancedGeometry, а затем щелкните на кнопке PickObject и задайте объект-образец. После этого уменьшите количество частиц, появляющихся в одном кадре, до 1 (в противном случае рыб будет слишком много), а сам размер частиц — до 1 (параметры UseRate и Size в свитке ParticleGeneration). Визуализируйте один из промежуточных кадров и увидите, что каждая частица окажется замененной на образец рыбы, при этом все частицы будут дислоцироваться в районе цилиндра, играющего роль виртуального эмиттера (рис. 58).
Рис. 56. Образец рыбы
Рис. 57. Исходные объекты анимации
Рис. 58. Первоначальный вид косяка рыбы
Область распределения частиц-образцов можно корректировать, управляя формой и размером виртуального эмиттера, — достаточно, например, уменьшить высоту цилиндра (играющего роль виртуального эмиттера) и частицы будут располагаться более кучно или исказить его форму деформирующим модификатором ( Bend, Ripple и т.п.), что также приведет к передислокации частиц (рис. 59).
Рис. 59. Изменение размещения частиц в результате масштабирования цилиндра (слева) и деформирования его модификатором Ripple (справа)
Получившиеся в результате наследования по закону Instanced Geometry объекты могут быть анимированы посредством анимирования объекта-образца — характер анимации у образца и построенных на его основе частиц будет идентичен. Для примера активируйте первый кадр, включите режим автоматического создания ключей, переключитесь в последний кадр и переместите образец произвольным образом, выключите режим автоматического создания ключей. После визуализации всех кадров вы сможете убедиться, что косяк рыбы движется вместе с объектом-образцом. По окончании скройте виртуальный эмиттер (команда Hide Selection из контекстного меню), назначьте образцу и созданным по нему частицам подходящий материал и поместите созданную группу рыб в водную среду. Для создания подобной среды в данном случае была использована Path-сетка (Create=>Geometry=>Path Grids=>Quad Patch), обработанная модификатором Noise, и текстура воды (рис. 60), которая была установлена как фон и дополнительно назначена полупрозрачной сфере, выставленной на переднем плане и предназначенной для создания иллюзии нахождения рыб в толще воды (рис. 61). Возможный вид одного из промежуточных кадров полученной в итоге анимации представлен на рис. 62.
Рис. 60. Текстура воды
Рис. 61. Окончательных вид сцены в окнах проекций
Рис. 62. Движущийся косяк рыб