Внимание, взрываю!
Внимание, взрываю!
Продолжая тему о создании пиротехнических эффектов в 3D Studio MAX, которая была начата статьей "Сам себе пиротехник", и отвечая на письмо одного из читателей КГ, я хочу рассказать о создании эффекта взрывной волны.
Существует два основных способа создания взрывных волн, так что о них и пойдет речь в моем повествовании.
Первый из этих способов полностью основан на возможностях 3D Studio MAX, так что при его создании побочные программы не понадобятся. И это есть хорошо. Ну а теперь немного пофантазируем...
Представьте следующую сцену:
Вид из космоса. На заднем плане находятся мерцающие звезды, на переднем — планета. Камера делает панорамную съемку в сторону и в поле ее зрения попадает поле астероидов. Один из них на огромной скорости двигается в сторону планеты, входит в атмосферу и взрывается, достигнув поверхности. Взрывная волна уничтожает все на своем пути, планета превращается в океан огня.
Что ж, звучит неплохо. Но в данный момент мы не будем углубляться в моделирование самой космической сцены (я расскажу об этом в другой раз), а займемся непосредственно этой самой взрывной волной. Для простоты будем считать, что нулевой кадр нашего будущего ролика и есть тот самый момент, когда астероид столкнулся с планетой.
С первым способом покончено. При помощи модификаций этого эффекта можно создавать не только взрывные волны от падающих астероидов (эка невидаль!:), но и от таких обыденных вещей, как атомные бомбы. Или, к примеру, смоделировать дорожку из горящего топлива.
Ее-то хоть видели?
А теперь второй способ. Очень хитрый. Честно говоря, в реальности я его не представляю, однако шаблоны, навязанные нам буржуинскими фильмами про космос, говорят, что все так и есть, как в них показано. Нет, ну действительно, какой может быть взрывная волна в вакууме? Совсем никакой. В смысле, в вакууме НЕТ взрывных волн. И звука нет. На то он и вакуум. Но мы-то с вами знаем, что это будет совсем не зрелищно. Немой фильм без взрывов в наше время заранее обречен на провал. Так что необходимо поддерживать сложившиеся убеждения.
Даже если Вы совсем недавно занимаетесь компьютерной графикой, то и в этом случае наверняка слышали такое название, как Pyromania. Pyromania — коллекция пиротехнических эффектов, оцифрованных с 35-миллиметровой пленки. Честно говоря, я уже и не припомню всех компьютерных игр, при создании которых использовалась эта библиотека. Среди самых популярных из них — Blood, Diablo, Carmageddon, Quake 2. К чему это я клоню? А к тому, что среди эффектов Пиромании есть и эффект взрывной волны. Остается только взять его и использовать в работе (в таком случае сразу переходите к той части статьи, где рассказывается о работе в 3D Studio MAX). Но что делать, если зубная щетка Вам не доступна?..
Итак, Пиромании у Вас нет. Но, как известно, голь на выдумки хитра. PhotoShop хоть найдется? Загружаем!
ФотоШопа на сегодня хватит. Честно скажу, что все получилось в лучших традициях жанра. От Пиромании отличается лишь кричащей расцветкой:). Ну а нам пора загружать 3D Studio MAX и создавать новую сцену.
Итак, сцена готова. Если Вас интересует статичное изображение, то на этом урок закончен. Аниматоров же прошу двигаться дальше.
Итак, Вы познакомились с двумя основными способами создания взрывных волн. Практически все другие виды взрывных волн создаются при помощи модификации этих эффектов. Давайте теперь посмотрим, как создать нечто аналогичное взрыву в игре Unreal.
Еще один эффект взрывной волны готов. Дешево и сердито. Вам лишь остается вставить его в сцену взрыва и добавить несколько мелких штрихов, таких как дрожание камеры во время прохождения через нее волны или Blur. Только, пожалуйста, не используйте Lens Flares, так как в реальности они там не появятся:).
Юрий Заяц
y_zaiats@mail.ru
(c) компьютерная газета
Продолжая тему о создании пиротехнических эффектов в 3D Studio MAX, которая была начата статьей "Сам себе пиротехник", и отвечая на письмо одного из читателей КГ, я хочу рассказать о создании эффекта взрывной волны.
Существует два основных способа создания взрывных волн, так что о них и пойдет речь в моем повествовании.
Первый из этих способов полностью основан на возможностях 3D Studio MAX, так что при его создании побочные программы не понадобятся. И это есть хорошо. Ну а теперь немного пофантазируем...
Представьте следующую сцену:
Вид из космоса. На заднем плане находятся мерцающие звезды, на переднем — планета. Камера делает панорамную съемку в сторону и в поле ее зрения попадает поле астероидов. Один из них на огромной скорости двигается в сторону планеты, входит в атмосферу и взрывается, достигнув поверхности. Взрывная волна уничтожает все на своем пути, планета превращается в океан огня.
Что ж, звучит неплохо. Но в данный момент мы не будем углубляться в моделирование самой космической сцены (я расскажу об этом в другой раз), а займемся непосредственно этой самой взрывной волной. Для простоты будем считать, что нулевой кадр нашего будущего ролика и есть тот самый момент, когда астероид столкнулся с планетой.
- Создайте новую сцену, выполнив File -> Reset и ответив Yes в окне 3D Studio Max. При помощи Create -> Geometry -> Standard Primitives -> Sphere создайте в центре видового окна Top сферу радиусом в 100 единиц. Пронормируйте изображение, нажав на кнопку Zoom Extents All (кнопки управления камерой). Эта сфера будет поверхностью планеты, так что на нее можно нанести соответствующую текстуру.
- Откройте диалоговое окно редактора материалов, нажав на клавиатуре кнопку <M>. Активизируйте первый слот (Material #1). Нажмите кнопку Standart рядом с надписью Type. В окне Material/Map Browser переключите селектор Browse From в положение Mlt Library. Если при установке 3D Studio MAX Вы устанавливали примеры текстур, то в списке слева у Вас появятся названия материалов из библиотеки. Найдите среди них Space_Moon (Standard). Выделите его и нажмите кнопку Ok. Убедитесь, что объект Sphere01 выбран, и в редакторе материалов нажмите на кнопку Assign Material to Selection.
- Сверните окно Material Editor (не закрывайте, скоро он нам понадобится). В главном меню выберите пункт Edit -> Clone. Нажмите Ok в окне Clone Options, убедившись, что селектор Object находится в положении Copy. Объект Sphere02 — поверхность, на которой будет гореть огонь. Переименуйте его в Super_Puper_Shockwave.
- Перейдите во вкладку Modify. В разворачивающемся списке Parameters увеличьте параметр Hemisphere до 0,9. Сфера уменьшилась до небольшого диска. Кликните на нем правой кнопкой мыши и, выбрав в выпавшем меню пункт Rotate, разверните его так, чтобы он находился в эпицентре взрыва (ведь астероид всегда попадает в эпицентр, не правда ли?).
- Установите параметр Hemisphere равным 1. Теперь в видовом окне объект Super_Puper_Shockwave будет выглядеть в виде едва заметной точки. Перейдите в режим анимации, нажав на кнопку Anim.
- Отожмите кнопку Anim. для выключения режима анимации. Увеличьте значение радиуса на 1 единицу (в данном случае до 101). Это приподнимет наш объект над поверхностью планеты.
- Получившаяся в результате заготовка для взрывной волны слишком правильная. Немного исказим ее. Примените к объекту Super_Puper_Shockwave модификатор Noise, выполнив Modify -> Modifiers -> Noise. В группе Noise разворачивающейся панели Parameters уменьшите значение Scale до 40, а в группе Strength значение силы по всем координатным осям установите равное 10.
- Разверните окно редактора материалов. Выберите второй слот (Material #2). Кликните на зеленый прямоугольник около надписи Diffuse. В окне Color Selection: Diffuse Color установите оранжевый цвет RGB(255,128,0). Закройте окно выбора цвета. В разворачивающемся списке Shader Basic Parameters установите флажок 2-Sided, а затем в списке Blinn Basic Parameters нажмите на кнопку None около оранжевого прямоугольника (карта Diffuse). В окне Material/Map Browser верните селектор Browse From в положение New и в списке дважды кликните на пункт Noise.
- В разворачивающемся списке Noise parameters нажатием на черный прямоугольник измените значение Color #1 на RGB(210,95,0), а значение Color #2 на RGB(240,165,45) — два оттенка оранжевого. Уменьшите Size до 2. Нажмите кнопку Go to Parent для перемещения на верхний уровень.
- Хорошо. Теперь в свитке Blinn Basic Parameters снимите флажок группы Self-Illumination. Увеличьте значение самоосвещения до 100. Нажмите кнопку Assign Material to Selection. Параметр Size шума мал, поэтому при визуализации сцены с размером 320x240 шум Вы просто не увидите. Попробуйте выполнить тестовый рендеринг с разрешением 640x480, нажав Quick Render (Production).
- Хм, это, конечно, не взрыв, но на визуализированной сцене Вы можете увидеть области, которые будут покрыты огнем. Посмотрели? Продолжим.
- Мысленно представьте прямую, проходящую через центр Sphere01 и Super_Puper_Shockwave. Перейдите во вкладку Create -> Lights -> Standard и на расстоянии, равном радиусу сферы, установите точечный источник света (Omni) так, чтобы он также находился на прямой. Обнулите множитель (Modify -> General Parameters -> Multiplier) источника. Включите режим анимации, предварительно установив счетчик кадров в начальную позицию. Перетащите ползунок на последний кадр. Откройте окно Track View (Track View -> Open Track View). Разверните дерево Objects и найдите объект Omni01. Разверните его. В дереве выделите пункт Multiplier. На панели инструментов найдите кнопку Add Keys и нажмите ее. Кликните на изображении трека напротив надписи Multiplier. Ключ будет установлен в трек, и его изображение появится в пунктах Omni01, Object (Omni Light) и Multiplier. Добавьте аналогичный ключ в начальный кадр.
- Кликните правой кнопкой мыши по ключу начального кадра. В появившемся окне установите линейную интерполяцию для значения Out (картинка с прямой линией) и меандр (ступеньки) для значения In. Второму ключу установите линейную интерполяцию для параметра In. Закройте окно Track View. Установите множитель источника света равным 1 (меняя параметр Value). Выключите режим анимации и закройте окно Track View.
- Вернитесь во вкладку Modify. Для объекта Omni01 в разворачивающемся списке Attenuation Parameters включите флажки Use и Show в группе Far Attenuation. Отрегулируйте значения Start и End так, чтобы источник света освещал около четверти планеты (для начальной границы). В нашем случае это около 130 для Start и 250 для End.
- Во вкладке Create нажмите кнопку Geometry. В выпадающем списке выберите пункт Particle Systems. В видовом окне установите PArray около планеты. В группе Object-Based Emitter свитка Basic Parameters нажмите на кнопку Pick Object. Кликните на Super_Puper_ShockWave в видовом окне. Связали? Тогда займемся настройками.
- Прыгаем на вкладку Create. В разделе Basic Parameters устанавливаем селектор Particle Formation в положение Along Visible Edges. Разверните панель Particle Generation. В группе Particle Quantity установите селектор на Use Total и увеличьте значение до 5000 единиц (значение зависит от быстродействия компьютера, так что лучше уменьшите Percentage of Particles в предыдущей панели до 1%). В группе Particle Motion установите скорость (Speed) частиц равной 1, а Variation увеличьте до 50 процентов. Установите номер начального кадра в Particle Timing -> Emit Start, а в Particle Timing -> Emit Stop установите номер конечного кадра, увеличенный на 10 (в нашем случае это 0 и 110 соответственно). Уменьшите продолжительность жизни частиц (Life) до 10. В группе Particle Size значение Size увеличьте до 10. Измените селектор Particle Type -> Standard Particles на Tetra. В свитке Rotation and Collision переключите селектор группы Spin Axis Controls в положение Direction of Travel/Mblur. Кликните правой кнопкой мыши по объекту PArray01. В меню выберите пункт Properties... Убедившись, что в группе Motion Blur установлен флажок Enabled, выберите тип размытия Image. Увеличьте значение Multiplier до 4.
- Эмиттер частиц готов к применению. Нам остается лишь добавить в сцену эффект свечения. Откройте окно Rendering -> Effects... и на панели Effects нажмите кнопку Add. В появившемся окне Add Effect дважды кликните по надписи Lens Effects. В разворачивающемся списке Lens Effects Parameters выделите пункт Glow и кликните на кнопку со стрелкой вправо. Уменьшите интенсивность свечения (Glow Element -> Parameters -> Intensity) до 45, а Use Source Color увеличьте до 30. Size также должен быть равен 30. Кликните на белый прямоугольник группы Radial Color и установите цвет RGB(160,5,5). Теперь переключитесь на вкладку Options. В группе Image Sources установите флажки Object ID и Effects ID. Проследите, чтобы их значения были равны 1. Вот и все, осталось визуализировать сцену.
Если необходимо до некоторого кадра задержать взрывную волну, то перетащите счетчик кадров (Time Slider) в необходимый кадр и уменьшите значение Hemisphere на небольшую величину, к примеру, до 0,999. Визуально это не даст никакого результата, т.к. размер взрывной волны очень мал.
Перейдите в тот кадр анимации, когда взрывная волна по сценарию достигает своего максимального значения. Если Вам необходимо, чтобы Shockwave распространялась не по всей поверхности планеты, а, скажем, только по 2/3 оной, то увеличьте параметр Hemisphere до 0,35, в противном случае обнулите его.
В редакторе материалов разверните свиток Maps. Кликните на кнопку None напротив надписи Opacity. Опять же, в браузере материалов выберите пункт Noise и нажмите на кнопку Ok. Измените Color #2 на серый — RGB(120,120,120). Размер шума (Noise Parameters -> Size) уменьшите до 2. Верхний порог шума (Noise Threshold -> High) уменьшите до 0,7, а нижний (Low) увеличьте до 0,5. На панели инструментов редактора материалов нажмите кнопку Materials Effect Channel. Выберите первый канал — мы используем его позже для добавления свечения в сцену. Закройте редактор материалов.
Неплохо. Теперь нам необходимо изобразить языки пламени на поверхности планеты. Для этого используем PArray. Particle Array превращает любой объект в эмиттер частиц, а нам это и надо.
С первым способом покончено. При помощи модификаций этого эффекта можно создавать не только взрывные волны от падающих астероидов (эка невидаль!:), но и от таких обыденных вещей, как атомные бомбы. Или, к примеру, смоделировать дорожку из горящего топлива.
Ее-то хоть видели?
А теперь второй способ. Очень хитрый. Честно говоря, в реальности я его не представляю, однако шаблоны, навязанные нам буржуинскими фильмами про космос, говорят, что все так и есть, как в них показано. Нет, ну действительно, какой может быть взрывная волна в вакууме? Совсем никакой. В смысле, в вакууме НЕТ взрывных волн. И звука нет. На то он и вакуум. Но мы-то с вами знаем, что это будет совсем не зрелищно. Немой фильм без взрывов в наше время заранее обречен на провал. Так что необходимо поддерживать сложившиеся убеждения.
Даже если Вы совсем недавно занимаетесь компьютерной графикой, то и в этом случае наверняка слышали такое название, как Pyromania. Pyromania — коллекция пиротехнических эффектов, оцифрованных с 35-миллиметровой пленки. Честно говоря, я уже и не припомню всех компьютерных игр, при создании которых использовалась эта библиотека. Среди самых популярных из них — Blood, Diablo, Carmageddon, Quake 2. К чему это я клоню? А к тому, что среди эффектов Пиромании есть и эффект взрывной волны. Остается только взять его и использовать в работе (в таком случае сразу переходите к той части статьи, где рассказывается о работе в 3D Studio MAX). Но что делать, если зубная щетка Вам не доступна?..
Итак, Пиромании у Вас нет. Но, как известно, голь на выдумки хитра. PhotoShop хоть найдется? Загружаем!
- Создайте новый файл, выполнив "Файл -> Новый". Установите размер картинки 200x200 пикселей. Нажмите на клавиатуре кнопку <D> для установки цветов по умолчанию. На панели инструментов выберите инструмент "Заливка" и залейте картинку черным цветом.
- Выберите инструмент "Область". Не забудьте о том, что форма области по умолчанию прямоугольная — нам именно такая и понадобится. Отступив от левого верхнего края картинки пикселей 20, выделите квадрат со стороной в 160 пикселей. Выполните "Выделение -> Растушевка...". Радиус растушевки границы установите равным 50. Нажмите "Да". Теперь необходимо создать границу для выделенной области. Выберите
"Выделение -> Модификация -> Граница" и установите величину границы в 15 пикселей. "Да". - Какой же цвет нам подобрать? Что-либо поярче, к примеру RGB(0,255,255). Это и будет основной цвет. Вернитесь к инструменту "Заливка" и залейте основным цветом выделенную область. Нажмите комбинацию клавиш Ctrl+A для выделения всей картинки. А теперь нажмите Ctrl+C, изображение в буфере обмена нам еще понадобится.
- Творческая часть:). Выберите инструмент "Палец" и уменьшите нажим до 25 процентов. Двигая кистью (в смысле, пальцем) по радиусам нарисованной окружности, придайте ей слегка волнистую форму. Слишком не увлекайтесь, а если сделали что-то не так, то восстановите картинку из буфера.
- Нарисовали? Теперь нажмите Ctrl+V и в последний раз восстановите картинку. Измените тип наложения плавающей области с нормального на умножение. Установите 50-процентную непрозрачность слоя. Сохраните картинку под именем shockwave1.bmp и закройте PhotoShop.
ФотоШопа на сегодня хватит. Честно скажу, что все получилось в лучших традициях жанра. От Пиромании отличается лишь кричащей расцветкой:). Ну а нам пора загружать 3D Studio MAX и создавать новую сцену.
- Перейдите во вкладку Create и нажмите Shapes. В центре видового окна Top создайте дырку от бублика (Donut) с внешним радиусом в 100 единиц. Внутренний радиус подберите по размерам созданной текстуры. 60 единиц will be enough to everyone.
- Щелкните по вкладке Modify. Примените к объекту модификатор Extrude (Modify -> Modifiers -> Extrude). Нажмите на клавиатуре кнопку <M> для запуска редактора материалов. Выберите свободный слот. Теперь разверните свиток Maps. Нажмите на кнопку None около надписи Diffuse Color. В окне Material/Map Browser дважды кликните по надписи Bitmap и в диалоговом окне Select Bitmap Image File выберите созданную текстуру.
- Нажмите на кнопку Assign Material to Selection. Перейдите на верхний уровень нажатием Go to Parent. Теперь, кликнув на кнопку около параметра Opacity в свитке Maps, выберите в браузере карт пункт Noise. Нажмите Ok для подтверждения. В разворачивающемся списке Noise Parameters уменьшите размер Size до 6. Сверните окно редактора материалов, мы вернемся к нему позже, во время анимации.
Итак, сцена готова. Если Вас интересует статичное изображение, то на этом урок закончен. Аниматоров же прошу двигаться дальше.
- Установите счетчик кадров (Time Slider) в начальный кадр анимации. В свитке Modifier Stack вкладки Modify выберите пункт Donut списка модификаторов (около кнопки с булавкой Pin Stack). Обнулите значение Parameters -> Radius 2. Radius 1 уменьшите настолько, чтобы при визуализации волна выглядела в виде кольца, не превышающего размеры взрыва. Это около 20 единиц в нашем случае.
- Утопите кнопку Anim. и перетащите счетчик кадров на последний кадр. Теперь восстановите старые значения радиусов — 100 и 60 для внешнего и внутреннего радиуса соответственно. Разверните окно Material Editor. В нем все еще включены настройки шума маски прозрачности. Значение Noise Parameters -> Phase установите равным какому-либо числу. Я использовал разность номеров конечного и начального кадров, деленную на 10. Это 10 единиц для стандартной анимации из 100 кадров.
- Закройте редактор материалов и отожмите кнопку Anim. Эффект готов.
Итак, Вы познакомились с двумя основными способами создания взрывных волн. Практически все другие виды взрывных волн создаются при помощи модификации этих эффектов. Давайте теперь посмотрим, как создать нечто аналогичное взрыву в игре Unreal.
- Взрывные волны такого типа распространяются с очень большой скоростью, и это нам необходимо учитывать. Давайте уменьшим длину ролика. Кликните правой кнопкой мыши на кнопке Play Animation для открытия окна Time Configuration. В группе Animation уменьшите параметр Length до 30 единиц. Так как селектор Frame Rate установлен на пункте NTSC (30 кадров/секунду), то длина ролика будет равна 1 секунде. Нажмите Ok.
- В центре видового окна Top создайте геоид (Create -> Geometry -> Standard Primitives -> GeoSphere) с радиусом в 90 единиц. В разворачивающемся списке Parameters увеличьте количество Segments до 8.
- Во вкладке Create нажмите кнопку Cameras. Установите направленную камеру (Target) со значением Parameters -> Stock Lenses 35mm так, чтобы объект Camera01.Target находился в центре геоида, а сама камера также не выходила за пределы GeoSphere. Сделайте активным видовое окно Perspective и нажмите на клавиатуре кнопку C для включения вида из камеры.
- Откройте окно редактора материалов и выберите слот для работы. В разворачивающемся списке Shader Basic Parameters выставьте флажок 2-Sided. В свитке Blinn Basic Parameters, кликнув на цветной прямоугольник, измените значение цвета Diffuse на RGB(255,255,255). В группе Self-Illumination снимите флажок. Значение Color должно быть равно 0. Уменьшите Opacity до 40 единиц. Так как в дальнейшем мы наложим шумовую текстуру на канал непрозрачности, то эта операция необходима только для того, чтобы наш объект был прозрачен в видовых окнах. Для группы Specular Highlights установите следующие значения: Specular Level — 40, Glossiness — 20, Soften — 0,0.
- На данном этапе материал имеет вид матового стекла. Нам же необходимо сделать частично прозрачными некоторые его фрагменты. Разверните свиток Maps. Нажмите кнопку None у надписи Opacity. В появившемся окне браузера материалов дважды кликните на надпись Noise. В свитке Noise Parameters установите селектор Noise Type в положение Turbulence. Увеличьте размер шума (Size) до 90 единиц. Убедитесь, что значение Phase обнулено, нажмите кнопку Assign Material to Selection, а затем сверните редактор материалов.
- Настало время заняться анимацией. Она будет совсем простой. Раскройте вкладку Modify и в разворачивающемся списке Parameters уменьшите радиус геоида до 10. Установите счетчик кадров в начальную позицию и нажмите кнопку Anim. Перетащите Time Slider на последний кадр. Увеличьте радиус до 90 и разверните Material Editor. Для параметров шумовой текстуры в свитке Noise Parameters увеличьте Phase до 3 (помните, это для ролика из 30 кадров). Закройте редактор материалов и выключите режим анимации.
Еще один эффект взрывной волны готов. Дешево и сердито. Вам лишь остается вставить его в сцену взрыва и добавить несколько мелких штрихов, таких как дрожание камеры во время прохождения через нее волны или Blur. Только, пожалуйста, не используйте Lens Flares, так как в реальности они там не появятся:).
Юрий Заяц
y_zaiats@mail.ru
(c) компьютерная газета
Компьютерная газета. Статья была опубликована в номере 43 за 2000 год в рубрике soft :: графика