Реализация эффекта
Откройте файл snowflake_start .max. В окне проекции Тор создайте искривления пространства UDeflec-tor (U-отражатель) и Gravity (Гравитация). Выделите искривление пространства UDeflector, в разделе Object-Based Deflector (Отражатель на основе объекта) панели параметров щелкните на кнопке Pick Object (Выбор объекта), затем укажите объект Ground Plane (Плоскость земли) сцены. Создайте в окне проекции Left искривление пространства Wind (Ветер). В окне проекции Front поверните его на 20° так, чтобы оно было направлено ниже от исходного варианта. Параметру Strength (Сила) задайте значение 0,05, а параметру Turbulence (Турбулентность) — значение 1.
Исходная сцена представлена завершенной сценой из занятия «Трава на грунте». Эта сцена несколько изменена (из нее удалена трава, а также несколько подкорректировано освещение), а затем визуализирована как статическое изображение. Полученный в итоге объект Ground Plane расположен в точности в том месте, в котором должна располагаться поверхность земли, а потому тут будет собираться выпавший снег. Искривление пространства Gravity будет притягивать снежинки вниз к земле, как указывает отражатель Udeflector. В то же время, в соответствии с искривлением пространства, снежинки будут падать под воздействием турбулентных потоков воздуха, которые отклоняют непрерывный поток снега от линейного направления.
В диалоговом окне настройки среды и эффектов (Environment and Effects) щелкните на кнопке Environment Map: None (Карта среды: Нет) и выберите карту Bitmap. В появившемся на экране диалоговом окне загрузите файл snow_background.jpg. Откройте диалоговое окно Material Editor и назначьте материал Matte/Shadow в первой же свободной ячейке. Назовите новый материал Mask и назначьте его объекту Ground Plane сцены. Проведите быстрое тестирование, визуализировав сцену, чтобы удостовериться в получении фона, подобного показанному на рисунке.
Заданный фон неплохо подходит для нашей сцены, а потому визуализируется и представляется с помощью модуля Mental Ray. Материал Matte/Shadow применяется для того, чтобы скрыть плоскость от наблюдателя, но при этом отобразить остальные элементы, расположенные в ее близости, которые отбрасывают на плоскость тень. Данная комбинация лучше всего подходит для нашего проекта.
После подготовки основных объектов сцены нам необходимо создать систему частиц и назначить ей элементы, которые будут представляться в сцене.
В окне проекции Тор создайте систему частиц Particle Flow (Поток частиц) с параметром Length (Длина), равным 800, и параметром Width (Ширина), равным 1000, которую назовите Falling Snow (Падающий снег). В поле Viewport (Окно проекции) раздела Quantity Multiplier (Количественный множитель) введите значение 100, а параметру Upper Limit (Верхний предел) раздела Particle Amount (Количество частиц) раскрывающейся панели System Management (Управление системой) введите значение 10000000. Измените расположениесистемы частиц так, чтобы она приобрела координаты (300, 25, 300) — расположилась над объектом Ground Plane и несколько сместилась относительно последнего.
Мы только что создали базовую систему частиц, с помощью которой будут генерироваться снежинки. Система слегка смещена, поскольку перед попаданием в сцену частицы будут поддаваться воздействию искривления пространства Wind, представляющего ветер, сдувающий снежинки в одном из направлений. Коэффициент Viewport увеличен, чтобы мы могли наблюдать в окне программы подавляющее количество генерируемых частиц. Если ваш компьютер не может похвастаться высокой производительностью, то уменьшите этот коэффициент до исходного значения 50 или сделайте еще меньше, если того требует ситуация. Эта настройка не изменяет время визуализации сцены, поскольку влияет только на представление сцены в окне проекции. Предельное количество частиц установлено в максимальное значение, чтобы в любой подходящий момент можно было увеличить общее количество частиц в сцене (если позволяет объем установленной оперативной памяти), не беспокоясь о сокрытии доброй части из них.
Выделите систему частиц Falling Snow, если это не было сделано раньше, и щелкните на кнопке Particle View (Представление частицы) или нажмите клавишу <6>. Переименуйте событие Event 01 на Snowflakes (Снежинки). Удалите из него операторы Speed (Скорость) и Shape (Форма), а затем добавьте операторы Shape Instance (Экземпляр формы), Material Static (Статический материал) и два оператора Force (Сила). Добавьте в нижнюю часть события критерий Collision (Столкновение). В операторе Birth (Рождение) задайте параметру Emit Start (Началоэмиссии) значение -50, параметру Emit Stop (Завершение эмиссии) — значение 200, а в поле Amount (количество) введите значение 10000.
Мы удалили из события Snowflakes отдельные операторы, поскольку в нашей сцене они не понадобятся — начальную скорость частицам задавать не нужно, так как они находятся под влиянием двух операторов Force. А поскольку частицы создаются на основе геометрических фигур, в событие необходимо включить оператор Shape Instance, а для назначения им материала в событие добавляет еще и оператор Material Static. К тому же частицы должны взаимодействовать с поверхностью, за что отвечает критерий Collision.
Выделите первый оператор Force и добавьте в его список сил (Force Space Warps) искривление пространства Gravity. Уменьшите значение параметра Influence (Влияние) до 50, чтобы сделать эффект незначительным. Выделите второй оператор Force и добавьте в его список Force Space Warps искривление пространства Wind. Выделите критерий Collision и добавьте в его список Deflectors (Отражатели) отражатель UDeflectorOl. В разделе Test True If Particle (Считать правдой, если частицы), установите переключатель Collides (Сталкиваются), а в раскрывающемся меню Speed (Co скоростью) выберите значение Stop (Нулевая).
Мы используем два разных оператора Force, чтобы разделить влияние на снежинки со стороны двух сил. Даже несмотря на существование двух раздельных искривлений пространств, все же лучше использовать в событии два оператора Force, а не один оператор Force, в котором будут сразу оба искривления пространства. И все потому, что каждую силу можно отдельно скопировать и вставить как экземпляр в другое событие, без использования второй силы. Параметр скорости в критерии Collision установлен в значение Stop, чтобы прекратить движение частиц при столкновении их с поверхностью земли, но поддавать воздействию искривлений пространств текущего события.
Выделите оператор Material Static события Snowflakes и создайте его экземпляр на холсте, чтобы создать новое событие. Назовите это новое событие Snowflakes at Rest (Снег на земле) и свяжите его с выходом критерия Collision события Snowflakes.
Поскольку мы уже указывали в системе частиц прекратить их движение при столкновении с отражателем UDeflector, в новом событии нам не понадобится использовать никаких других операторов, кроме экземпляра оператоpa Material Static, потому что материал не передается из одного события в другое, разве что его назначат для всей системы. Перемещение по временной шкале показывает, что частицы начинают свое движение в небе и прикрепляются к поверхности, как только попадают на нее.
Теперь можно приступать к созданию фигур снежинок. Объект снежинки представляется простой геометрией, которая будет заполнять всю сцену. В окне проекции юр создайте примитив Box (Блок) с длиной (Length), шириной (Width) и высотой (Height), равной 5, который назовите Snowflake. В этом же окне проекции создайте примитив Geosphere (Геосфера) и назовите его Snowflake Position Generator (Генератор центра снежки). Параметрам Radius (Радиус) и Segments (Сегменты) задайте значение 2. Добавьте в стек модификатор Noise (Шум). В поле Scale (Масштаб) введите значение 1, установите флажок Fractal (Фрактальный), а затем введите в полях X, Y и Z раздела Strength значение 50.
Внимательно изучая исходные изображения, особенно фотографии крупным планом, изображающих снег на листьях, легко заметить, что отдельные формации снежных скоплений состоят из примитивных кубов, из которых можно получить снежинки практически любой формы. В качестве метода распространения кубов в снежинках используется объект Geosphere.
Выделите объект блока Snow-flake и создайте на его основе составной объект Scatter. Щелкните для объекта Scatter на кнопке Pick Distribution Object и выберите объект Snowflake Position Generator. Количество копий (Duplicates) задайте равным 50, а в поле Vertex Chaos (Хаотичность вершин) введите значение 2. В разворачивающейся панели Display (Вывод) установите флажок Hide Distribution Object (Скрыть объект распределения). Перейдите на вкладку Hierarchy (Иерархия) и установите переключатель Affect Pivot Only (Влиять только на сводные точки). Щелкните на значке Center to Object (По центру объекта), чтобы указать точку привязки, и отключите режим Affect Pivot Only. Скройте объект Snowflake Position Generator.
По умолчанию составной объект Scatter автоматически, наряду с распространяемыми объектами, включает копию объекта, задающего метод распространения. Установка флажка Hide Distribution Object приводит к исключению его из конечного элемента. Сводная точка указывается для задания точки распространения, а она исходно не находится в центре составного объекта.
Повторно откройте диалоговое окно Particle View (Представление частиц) и выделите оператор I Shape Instance. В разделе Particle Geometry Object (Объект геометрии частиц) щелкните на кнопке None и выберите объект Snowflake Scatter Compound Object. Параметру Scale % задайте значение 20 с настройкой Variation, равной 50. Скройте объект Snowflake Scatter Compound Object, так как он вам больше не понадобится.
Размер исходного объекта геометрии системы частиц очень большой, поэтому мы уменьшили его, изменив значение параметра Scale в операторе Shape Instance, а затем увеличили степень его вариации. Чтобы убедиться в правильности задания настроек, в операторе Display задайте показывать геометрию. Предупреждение: в сцене присутствует огромное количество вычисляемых объектов, поэтому перед визуализацией обязательно сохраните сцену. При возникновении сбоя вы сможете вернуться к сцене в новом сеансе работы в программе. Чтобы уменьшить нагрузку на системные ресурсы, отобразите частицы в виде ограничительных рамок и/или уменьшите количество рождаемых частиц.
Настройка системы частиц завершена, нам осталось создать и применить материал, который будет использоваться в системе частиц, а затем создать эффект просвечивания снежинок.
Откройте диалоговое окно Materials Editor (Редактор материалов) и назовите новый материал Snowflake. В раскрывающемся меню Shader выберите значение Translucent Shader, а в качестве рассеянного (Diffuse) выберите белый цвет. Откройте разворачивающуюся панель Maps, добавьте в ячейку Opacity (Непрозрачность) карту Falloff (Спад) и назовите ее Snowflake Opacity Falloff (Спад непрозрачности снежинок). В верхней части структуры материала в поле Bump (Рельеф) введите значение 100, в ячейку Bump добавьте карту Speckle (Испещрение) и назовите карту Snowflake Bump (Рельеф снежинки). Параметру Size задайте значение 20. Вернитесь в начало материала и добавьте в ячейку «ranslucent карту Falloff, которую назовите Shadow Illumination (Освещение тени). Поменяйте местами цвета, в качестве типа спада (Falloff Type) выберите Shadow/Light Тени/Света), в ячейке цвета затенения (Shaded) выберите цвет RGB 188, 188, 190, а затем измените кривую Mix так, как показано на рисунке.
Очень большой этап, хотя и весьма однозначный. Мы использовали настройку Translu-еnсу, чтобы позволить свету, проходящему через снежинку, отображаться на противоположной стороне. Поскольку цвет просвечивания не должен иметь исходной однородности, мы применили карту Falloff, а затем подкорректировали кривую Mix, сделав яркие цвета более заметными в темных областях. Спад непрозрачности позволяет добиться образования мягких краев, а карта Speckle в ячейке Bump обеспечивает произвольность заполнения частицы Snowflake рельефным материалом.
Откройте диалоговое окно У EI представления частицы, если оно было скрыто, и выделите один из операторов Material Static. Перетащите материал Snowflake из окна Material Editor в пустую ячейку оператора Material Static и по запросу выберите вариант Instance (Экземпляр).
Поскольку прежде мы создавали экземпляры, а не копии операторов, все
операции, выполняемые с одним из них, незамедлительно будут
отображаться на всех без исключения экземплярах. При назначении
материала из окна Material Editor оператору Material Static мы, вне
всяких сомнений, также будем создавать их экземпляры. Таким образом, в
дальнейшем при внесении в материал изменений эти изменения будут
автоматически обновляться в операторе Material Static, а потому и во
всей системе частиц.
В качестве завершающих штрихов мы добавим в сцену освещение, чтобы сделать эффект «опрозрачнивания» материала в снежинках обоснованным, а потому и максимально реалистичным.
Скройте диалоговые окна 1 & Material Editor и Particle View. В окне проекции Тор создайте стандартный источник освещения Skylight (Освещение неба) и в ячейке Sky Color (Цвет неба) выберите RGB 162, 177, 187. Все еще находясь в окне проекции Тор, создайте источник освещения Direct (Направленный) и назовите Sun (Солнце). Образцу Multiplier Color (Цвет усиления) установите цвет RGB 255, 243, 232, увеличьте параметр Falloff (Спад) так, чтобы освещение покрыло всю сцену, и установите режим Overshoot (Превышение). Сместите источник освещения в окне проекции Тор так, как показано на рисунке, а затем сместите его на 700 единиц вверх в окне проекции Left.
В нашей сцене в текущий момент не должны присутствовать тени, поэтому мы их отключили. Применение теней с большим количеством геометрических элементов чревато быстрым переполнением оперативной памяти, а потому и невозможностью продолжения вычисления сцены. Как только на последующих этапах вам понадобится добавить тени, включите их, но помните, что система частиц не отбрасывает их, а только принимает.
Откроите диалоговое окно Particle View. Щелкните правой кнопкой мыши на корне системы частиц Falling Snow и выполните команду Properties. В появившемся на экране диалоговом окне включите режим Image Motion Blur (Размытие движения). Щелкните на кнопке ОК, чтобы закрыть диалоговое окно и визуализировать анимацию.
Добавление несильного размытия движения делает сцену реалистичнее, особенно в моменты пролета частиц перед самой камерой, которые
Чтобы не позволить компьютеру отказать в момент визуализации сцены, вам нужно уменьшить в ней количество обрабатываемых программой 3ds Max элементов, что сводится к уменьшению количества полигонов, но никак не количества представленных в сцене снежинок.
В окне проекции Тор создайте объект Box, который включает в себя плоскость земли и располагается как раз над значком системы частиц Particle Flow. Назовите его Particle Killer (Убийца частиц). Добавьте в стек модификатор Normal и измените его свойства так, чтобы сделать неви-зуализируемым. Добавьте в сцену отражатель UDeflector и в качестве объекта в нем выберите Particle Killer. Откройте диалоговое окно Particle View и добавьте в событие Snowflakes критерий Collision, расположив его под уже существующим критерием Collision. В список отражателей этого критерия добавьте элемент UDeflector. Перетащите на холст оператор Delete (Удалить), чтобы создать новое событие и связать его со вторым критерием Collision. Назовите новое событие Deletion. Визуализируйте сцену.
Частицы, находящиеся вне поля камеры при визуализации не существенны, поэтому визуализировать их совсем не обязательно, поскольку они значительно увеличивают общее время обработки данных сцены. Удаление этих нежелательных объектов — это один из самых эффективных методов уменьшения общего времени визуализации. В некоторых ситуациях он становится даже более эффективным, чем снижение уровня рождения частиц. Убедитесь, что в результате добавления в сцену объекта Particle Killer вы случайно не удалили частицы, которые уже «приземлились» на поверхность земли.
Действия для улучшения эффекта
Финальная сцена выглядит весьма убедительно, во многом благодаря удачно выбранной модели снежинок.
Тем не менее, чем больше их присутствует в сцене, тем больше времени
уходит на визуализацию анимации, опять-таки благодаря выбранной модели
снежинок. Вы получаете миллионы полигонов, которые при включении теней
могут быстро привести к сбою в самом производительном домашнем
компьютере. В этом занятии, как и в занятии, посвященном описанию
града, сцена быстро становится перегруженной частицами. Попробуйте
задать настройке Emit Start отрицательное значение, чтобы в начальный
момент на поверхности земли уже находилось определенное количество
снега. Впоследствии, чтобы уменьшить загруженность сцены, вы можете
смело уменьшить общее количество частиц.
Если вы несчастный обладатель старого компьютера с небольшим объемом оперативной памяти, то вместо выбранной модели частиц используйте лицевые частицы. Замените оператор Shape Instance в системе частиц оператором Shape Facing, укажите располагать частицы сторонами к камере, а затем используйте заранее визуализированные модели снежинок (визуализируйте их в окне проекции Front или Left), назначив материал соответствующей прозрачности. Это приведет к добавлению в сцену плоских частиц, которые, тем не менее, визуализируются намного быстрее, хотя и выглядят менее качественно. Единственная проблема такого метода — это однородность распределения частиц в сцене; она не может не бросаться в глаза. Чтобы побороть указанный недостаток, попробуйте визуализировать исходные снежинки под разными углами, добившись получения набора карт, скажем, десяти, затем настройте столько же материалов с разными назначенными в них картами, после чего используйте оператор Material Frequency для назначения частицам материала на произвольной основе.
Если вам не грех похвастаться производительностью своего компьютера, попробуйте даже увеличить общее количество частиц сцены до момента, пока вся поверхность земли не будет покрыта снегом. Исходя из способа представления геометрии частиц, можно заметить, что все снежинки будут объединяться в своеобразные кластеры, которые не имеют видимых границ. Если в сцене присутствует огромное количество частиц, то можно утверждать, что на поверхности земли образуется единый снежный покров. Желая протестировать свой компьютер в невероятно экстремальных условиях, попробуйте добавить падающий снег в сценах, описанных в занятиях, посвященных моделированию газона или поверхности грунта. Вам придется применить к системе частиц травяного покрова модуль Mesher, чтобы использовать с: в качестве отражателя для снежинок. Настройка такой системы не должна вызвать у вас видимых затруднений. С другой стороны, никто не возьмется вам гарантировать, что время визуализации такой сцены не будет превышать разумные пределы терпения. Попробуйте, может у вас и получится добиться вразумительных результатов в обозримом будущем.
В зависимости от температуры земли вы можете наблюдать эффект таяния снега. Чтобы сымитировать его, попробуйте передать определенное количество от общего числа частиц в событие, обеспечивающее обработку процесса таяния снежинок по достижении поверхности земли. Небольшое изменение геометрии или анимация модификатора Melt в исходной геометрии (внимательно изучите раздел «Дальнейшие действия» в предыдущем, занятии) — это все, что вам понадобится для получения желаемого результата. Вы также можете преобразовать исходную геометрию частиц в событии таяния с помощью объекта Blobmesh, назначив впоследствии объекту материал воды.
Попробуйте добавить в сцену несколько специальных объектов, например упавшее дерево или несколько камней, чтобы проверить, будет ли снег оседать на их поверхности. Создав копии исходного отражателя U Deflector, вы можете указать в них все объекты, которые должны становиться препятствием для падающих снежинок. Затем вам нужно добавить эти отражатели в событии Collision. Все гениальное — просто! Полученный эффект не приведет к образованию сугробов, но если вы все же хотите сымитировать и их, добавьте в событие оператор Keep Apart, который обеспечит неподвижность частиц при соприкосновении их между собой. Результат будет весьма убедительным, хотя на его обработку и уйдет много времени.
Снежинки по достижении поверхности земли не обязательно должны становиться неподвижными (см. исходные видеоматериалы), поэтому попробуйте настроить их разделение на несколько частей при ударе (как описано в предыдущем занятии).
Поскольку большие частицы тяжелее, искривление пространства Gravity должно взаимодействовать с ними сильнее, чем с небольшими частицами. С примером такого типа взаимодействия, в котором оператор Force по-разному влияет на частицы разных размеров, ознакомьтесь в справочном пособии MAXScript для 3ds Max версии 7 и выше. Сценарии в нем будут полезными даже для пользователей 3ds Max 6, хотя последние и не смогут применить их в старой версии программы. Справедливости ради также стоит заметить, что зависимость влияния на частицы от их размера характерна и для искривления пространства Wind (в случае снежинок даже в большей степени, чем для остальных!).