Первые шаги в Maya. Урок 14. Программно-визуализируемые системы частиц (часть 1)
Воздействие на частицы физических сил
Примеры внедрения частиц в сцену
Клубящийся дым
Попробуем воспользоваться системой частиц для создания клубящегося дыма. Для этого вначале сформируйте систему частиц с направленным вверх Directional-эмиттером, для чего эмиттер следует повернуть на 90° относительно оси Z (рис. 46). Увеличьте для эмиттера значение параметра Spread примерно до 0,2 (частицы станут испускаться в разных направлениях), увеличьте скорость движения частиц и сделайте ее случайной (параметры Speed и SpeedRandom). А затем увеличьте значение в поле MaxDistance примерно до 3 (рис. 47) — в итоге область вылета частиц станет больше.
Рис. 46. Исходная система частиц
Рис. 47. Настройка параметров генерации частиц эмиттером
Проиграйте анимацию, и вы увидите, что частицы действительно разлетаются в разные стороны, при этом с течением времени их количество заметно возрастает и каждая частица доживает до конца анимации. Нам же требуется, чтобы общее количество частиц во всех кадрах (за исключением начальных, когда дым лишь начинает идти) было примерно одинаковыми, при этом новые частицы непрерывно приходили бы на смену старым. Поэтому отрегулируйте параметры жизни частиц. Для этого выделите систему частиц и в редакторе атрибутов в свитке LifespanAttributes (Атрибуты периода существования) измените режим LifespanMode (Режим периода существования) с варианта LiveForever (Вечно) на RandomRange (Случайный диапазон). А затем присвойте параметру Lifespan (Время жизни) значение 2, а параметру LifespanRandom (Случайное время жизни) — значение 1 (рис. 48). В итоге каждая из частиц будет жить от 2 до 3 секунд.
Рис. 48. Настройка параметров жизни частиц
Установите для визуализации частиц вариант Cloud (Облако) — частицы окажутся представленными большими перекрывающимися кругами. Затем отрегулируйте значения параметров Radius (Радиус), SurfaceShadig (Затенение поверхности) и Threshold (Пороговое значение) в соответствии с рис. 49 — это приведет к тому, что круги станут больше, а степень смешивания между ними выше, хотя на клубы дыма, конечно, все это пока мало похоже (рис. 50). Откройте редактор Hypershade, дважды щелкните на материале particleCloud1 (который и был автоматически назначен частицам) и измените параметры материала в соответствии с рис. 51, отрегулировав параметры прозрачности материала, характера шума и особенностей затенения поверхности — вид визуализированных частиц изменится (рис. 52).
Рис. 49. Результат базовой настройки параметров типа частиц
Рис. 50. Вид визуализированных частиц после автоматического назначения материала
Рис. 51. Параметры настройки материала particleCloud
Рис. 52. Результат корректировки параметров материала particleCloud
Теперь добьемся того, чтобы размер частиц стал различным — это можно сделать путем установки динамического радиуса, что, в свою очередь, достигается внедрением градиентной серо-белой текстуры, которая обеспечивает постепенное увеличение радиуса частиц. При выделенной системе частиц откройте в редакторе атрибутов свиток AddDynamicAttributes (Добавление динамических атрибутов), щелкните на кнопке General (Общие), откройте вкладку Particle (Частицы), выделите строчку radiusPP (рис. 53) и щелкните на кнопке Ок. Это приведет к появлению в разделе PerParticleArrayAttributes (Атрибуты одной частицы массива) нового атрибута radiusPP (Радиус одной частицы). Щелкните правой кнопкой на поле radiusPP и выберите в контекстном меню команду CreateRamp (Создать градиент) — в данном поле появится строка arrayMapperl.outValuePP (рис. 54). Нажмите на поле radiusPP правую кнопку мыши, выберите из контекстного меню команду Edit Ramp (Редактировать градиент) и измените параметры градиента в соответствии с рис. 55. В итоге размер частиц действительно будет меняться динамически — уменьшаться с возрастом частиц, что достигается благодаря градиентному переходу от темно-серого цвета к белому (рис. 56).
Рис. 53. Выделение строки radiusPP
Рис. 54. Появление динамического радиуса
Рис. 55. Параметры настройки градиента для динамического радиуса
Рис. 56. Вид частиц с динамическим радиусом (в окне проекции (слева) и при рендеринге)
Осталось сделать так, чтобы частицы по мере старения становились все более прозрачными. Для этого вновь активируйте в редакторе материалов материал particleCloud, щелкните в редакторе атрибутов справа от поля LifeTransparency (Изменение прозрачности в течение жизни), выберите в списке текстур градиент Ramp, а затем отрегулируйте его параметры примерно так, как показано на рис. 57. Полученный в итоге дым представлен на рис. 58.
Рис. 57. Параметры настройки градиента для параметра LifeTransparency
Рис. 58. Клубящийся дым
Попробуйте внедрить данный дым в подходящую сцену, например создайте дом с трубой и поместите систему частиц прямо внутрь трубы, из которой в итоге и будет идти дым (рис. 59).
Рис. 59. Дым, выходящий из трубы дома
Горящий костер
Попробуем воспользоваться системой Tube-частиц для имитации искр, летящих от горящего костра. Смоделируйте в качестве основы сцены плоскость со сложенными на ней горкой несколькими цилиндрами, которые будут играть роль поленьев (рис. 60). Увеличьте общее число кадров анимации до 400 (кнопка AnimationPreferences — Параметры анимации). Создайте Omni-эмиттер, воспользовавшись командой Particles=>CreateEmitter (Частицы=>Создать эмиттер), и проиграйте полученную анимацию — очевидно, что со временем частиц становится слишком много (а вначале их совсем нет), так как они живут вечно (рис. 61). Попробуем добиться более-менее одинакового количества частиц во всех кадрах. Для этого вначале заставим эмиттер генерировать сверхбольшое количество частиц, активировав 1-й кадр и установив в поле Rate, например, число 1000 и создав для данного параметра анимационный ключ (рис. 62). Точно такой же ключ с тем же значением Rate создайте для 5-го кадра, а для 6-го уменьшите значение Rate примерно до 300 и также создайте ключ анимации. После этого выделите систему частиц и в свитке LifespanAttributes (Атрибуты периода существования) измените режим LifespanMode (Режим периода существования) с LiveForever (Вечно) на RandomRange (Случайный диапазон). Затем присвойте параметру Lifespan (Время жизни) значение 5, а параметру LifespanRandom (Случайное время жизни) — значение 2 (рис. 63). Это позволит ограничить время жизни частиц и сделать его случайным. После это количество частиц во всех кадрах окажется примерно одинаковым (рис. 64).
Рис. 60. Первоначальный вид сцены
Рис. 61. Появление системы частиц
Рис. 62. Создание ключа для 1-го кадра
Рис. 63. Настройка параметров жизни частиц
Рис. 64. Вид системы частиц после настройки параметров их генерации и изменения характера их жизни
Установите для визуализации частиц вариант Tube (Трубки) и определите параметры трубок, задав для них радиусы и длину (рис. 65). Придайте хаотичность разбрасыванию частиц, воздействовав на них полем турбулентности (команда Fields=>Turbulence — Поля=>Турбулентность). Оцените результат, проведя визуализацию (рис. 66), — видно, что воздействие поля явно чрезмерно и турбулентная сила начинает действовать слишком рано, тогда нужно, чтобы ее влияние сказывалось уже после того, как частицы поднимутся над костром на некоторое расстояние. Поэтому уменьшите уровень воздействия поля (параметр Magnitude) примерно до 3, измените тип интерполяции на вариант Quadratic и перетащите источник поля в левый верхний угол костра (последнее необходимо, чтобы частицы ощутили воздействие турбулентности не сразу после появления, а некоторое время спустя) — рис. 67.
Рис. 65. Настройка параметров визуализации Tube-частиц
Рис. 66. Вид сцены после назначения системе частиц турбулентного поля
Рис. 67. Настройка параметров турбулентности
Теперь следует подумать о самом процессе горения костра и материале для искр. Горение организовать совсем несложно, благо в Maya для этого предусмотрен соответствующий эффект. Выделите первый цилиндр-полено и зажгите его, воспользовавшись командой Effects=>CreateFire (Эффекты=>Создать огонь). Аналогичную операцию последовательно выполните в отношении других поленьев — сцена преобразится (рис. 68). Откройте редактор Hypershade и дважды щелкните на материале particleCloud2. Обратите внимание, что базовый материал particleCloud1 был первоначально присвоен системе частиц, а particleCloud2 появился после назначения эффекта Fire и в нем уже сделаны все настройки, необходимые для получения огненной поверхности. Назначьте материал particleCloud2 системе частиц (это окажется гораздо быстрее, чем вручную подбирать нужные параметры для материала particleCloud1), а затем проведите рендеринг и при необходимости скорректируйте настройки параметров системы частиц, используемых для имитации искр от костра. В данном случае для эмиттера мы увеличили значение параметра Rate в 6-м кадре до 800 (с повторным созданием ключа анимации) и параметров Speed (Скорость) и SpeedRandom (Случайная скорость) — до 2. А для частиц изменили значения настроек визуализации Radius0, Radius1 и Tile Size на 0,04; 0,04 и 2 соответственно. Кроме того, пришлось передвинуть эмиттер в верхнюю часть костра, а также немного изменить материал для искр (для этого предварительно следует создать копию материала particleCloud2 и назначить ее системе частиц), увеличив в свитке Transparency значение плотности (параметр Density) примерно до 24 (рис. 69). Все эти действия позволили расширить поток искр и сделать их более отчетливыми (рис. 70).
Рис. 68. Результат назначения поленьям эффекта Fire
Рис. 69. Корректировка параметров материала для искр
Рис. 70. Вид сцены после корректировки параметров системы частиц
По окончании можно создать подходящее обрамление для горящего костра и текстурировать поленья — возможный вид одного из промежуточных кадров полученной в итоге анимации представлен на рис. 71.
Рис. 71. Горящий костер