Внимание, взрываю!

Внимание, взрываю!
Продолжая тему о создании пиротехнических эффектов в 3D Studio MAX, которая была начата статьей "Сам себе пиротехник", и отвечая на письмо одного из читателей КГ, я хочу рассказать о создании эффекта взрывной волны.

Существует два основных способа создания взрывных волн, так что о них и пойдет речь в моем повествовании.

Первый из этих способов полностью основан на возможностях 3D Studio MAX, так что при его создании побочные программы не понадобятся. И это есть хорошо. Ну а теперь немного пофантазируем...

Представьте следующую сцену:

Вид из космоса. На заднем плане находятся мерцающие звезды, на переднем — планета. Камера делает панорамную съемку в сторону и в поле ее зрения попадает поле астероидов. Один из них на огромной скорости двигается в сторону планеты, входит в атмосферу и взрывается, достигнув поверхности. Взрывная волна уничтожает все на своем пути, планета превращается в океан огня.

Что ж, звучит неплохо. Но в данный момент мы не будем углубляться в моделирование самой космической сцены (я расскажу об этом в другой раз), а займемся непосредственно этой самой взрывной волной. Для простоты будем считать, что нулевой кадр нашего будущего ролика и есть тот самый момент, когда астероид столкнулся с планетой.

  1. Создайте новую сцену, выполнив File -> Reset и ответив Yes в окне 3D Studio Max. При помощи Create -> Geometry -> Standard Primitives -> Sphere создайте в центре видового окна Top сферу радиусом в 100 единиц. Пронормируйте изображение, нажав на кнопку Zoom Extents All (кнопки управления камерой). Эта сфера будет поверхностью планеты, так что на нее можно нанести соответствующую текстуру.
  2. Откройте диалоговое окно редактора материалов, нажав на клавиатуре кнопку <M>. Активизируйте первый слот (Material #1). Нажмите кнопку Standart рядом с надписью Type. В окне Material/Map Browser переключите селектор Browse From в положение Mlt Library. Если при установке 3D Studio MAX Вы устанавливали примеры текстур, то в списке слева у Вас появятся названия материалов из библиотеки. Найдите среди них Space_Moon (Standard). Выделите его и нажмите кнопку Ok. Убедитесь, что объект Sphere01 выбран, и в редакторе материалов нажмите на кнопку Assign Material to Selection.
  3. Сверните окно Material Editor (не закрывайте, скоро он нам понадобится). В главном меню выберите пункт Edit -> Clone. Нажмите Ok в окне Clone Options, убедившись, что селектор Object находится в положении Copy. Объект Sphere02 — поверхность, на которой будет гореть огонь. Переименуйте его в Super_Puper_Shockwave.
  4. Перейдите во вкладку Modify. В разворачивающемся списке Parameters увеличьте параметр Hemisphere до 0,9. Сфера уменьшилась до небольшого диска. Кликните на нем правой кнопкой мыши и, выбрав в выпавшем меню пункт Rotate, разверните его так, чтобы он находился в эпицентре взрыва (ведь астероид всегда попадает в эпицентр, не правда ли?).
  5. Установите параметр Hemisphere равным 1. Теперь в видовом окне объект Super_Puper_Shockwave будет выглядеть в виде едва заметной точки. Перейдите в режим анимации, нажав на кнопку Anim.

  6. Если необходимо до некоторого кадра задержать взрывную волну, то перетащите счетчик кадров (Time Slider) в необходимый кадр и уменьшите значение Hemisphere на небольшую величину, к примеру, до 0,999. Визуально это не даст никакого результата, т.к. размер взрывной волны очень мал.

    Перейдите в тот кадр анимации, когда взрывная волна по сценарию достигает своего максимального значения. Если Вам необходимо, чтобы Shockwave распространялась не по всей поверхности планеты, а, скажем, только по 2/3 оной, то увеличьте параметр Hemisphere до 0,35, в противном случае обнулите его.

  7. Отожмите кнопку Anim. для выключения режима анимации. Увеличьте значение радиуса на 1 единицу (в данном случае до 101). Это приподнимет наш объект над поверхностью планеты.
  8. Получившаяся в результате заготовка для взрывной волны слишком правильная. Немного исказим ее. Примените к объекту Super_Puper_Shockwave модификатор Noise, выполнив Modify -> Modifiers -> Noise. В группе Noise разворачивающейся панели Parameters уменьшите значение Scale до 40, а в группе Strength значение силы по всем координатным осям установите равное 10.



  9. Разверните окно редактора материалов. Выберите второй слот (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.
  10. В разворачивающемся списке Noise parameters нажатием на черный прямоугольник измените значение Color #1 на RGB(210,95,0), а значение Color #2 на RGB(240,165,45) — два оттенка оранжевого. Уменьшите Size до 2. Нажмите кнопку Go to Parent для перемещения на верхний уровень.
  11. Хорошо. Теперь в свитке Blinn Basic Parameters снимите флажок группы Self-Illumination. Увеличьте значение самоосвещения до 100. Нажмите кнопку Assign Material to Selection. Параметр Size шума мал, поэтому при визуализации сцены с размером 320x240 шум Вы просто не увидите. Попробуйте выполнить тестовый рендеринг с разрешением 640x480, нажав Quick Render (Production).
  12. Хм, это, конечно, не взрыв, но на визуализированной сцене Вы можете увидеть области, которые будут покрыты огнем. Посмотрели? Продолжим.

  13. В редакторе материалов разверните свиток 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. Выберите первый канал — мы используем его позже для добавления свечения в сцену. Закройте редактор материалов.

  14. Мысленно представьте прямую, проходящую через центр 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. Добавьте аналогичный ключ в начальный кадр.



  15. Кликните правой кнопкой мыши по ключу начального кадра. В появившемся окне установите линейную интерполяцию для значения Out (картинка с прямой линией) и меандр (ступеньки) для значения In. Второму ключу установите линейную интерполяцию для параметра In. Закройте окно Track View. Установите множитель источника света равным 1 (меняя параметр Value). Выключите режим анимации и закройте окно Track View.



  16. Вернитесь во вкладку Modify. Для объекта Omni01 в разворачивающемся списке Attenuation Parameters включите флажки Use и Show в группе Far Attenuation. Отрегулируйте значения Start и End так, чтобы источник света освещал около четверти планеты (для начальной границы). В нашем случае это около 130 для Start и 250 для End.

  17. Неплохо. Теперь нам необходимо изобразить языки пламени на поверхности планеты. Для этого используем PArray. Particle Array превращает любой объект в эмиттер частиц, а нам это и надо.

  18. Во вкладке Create нажмите кнопку Geometry. В выпадающем списке выберите пункт Particle Systems. В видовом окне установите PArray около планеты. В группе Object-Based Emitter свитка Basic Parameters нажмите на кнопку Pick Object. Кликните на Super_Puper_ShockWave в видовом окне. Связали? Тогда займемся настройками.
  19. Прыгаем на вкладку 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.
  20. Эмиттер частиц готов к применению. Нам остается лишь добавить в сцену эффект свечения. Откройте окно 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. Вот и все, осталось визуализировать сцену.



С первым способом покончено. При помощи модификаций этого эффекта можно создавать не только взрывные волны от падающих астероидов (эка невидаль!:), но и от таких обыденных вещей, как атомные бомбы. Или, к примеру, смоделировать дорожку из горящего топлива.

Ее-то хоть видели?

А теперь второй способ. Очень хитрый. Честно говоря, в реальности я его не представляю, однако шаблоны, навязанные нам буржуинскими фильмами про космос, говорят, что все так и есть, как в них показано. Нет, ну действительно, какой может быть взрывная волна в вакууме? Совсем никакой. В смысле, в вакууме НЕТ взрывных волн. И звука нет. На то он и вакуум. Но мы-то с вами знаем, что это будет совсем не зрелищно. Немой фильм без взрывов в наше время заранее обречен на провал. Так что необходимо поддерживать сложившиеся убеждения.

Даже если Вы совсем недавно занимаетесь компьютерной графикой, то и в этом случае наверняка слышали такое название, как Pyromania. Pyromania — коллекция пиротехнических эффектов, оцифрованных с 35-миллиметровой пленки. Честно говоря, я уже и не припомню всех компьютерных игр, при создании которых использовалась эта библиотека. Среди самых популярных из них — Blood, Diablo, Carmageddon, Quake 2. К чему это я клоню? А к тому, что среди эффектов Пиромании есть и эффект взрывной волны. Остается только взять его и использовать в работе (в таком случае сразу переходите к той части статьи, где рассказывается о работе в 3D Studio MAX). Но что делать, если зубная щетка Вам не доступна?..

Итак, Пиромании у Вас нет. Но, как известно, голь на выдумки хитра. PhotoShop хоть найдется? Загружаем!

  1. Создайте новый файл, выполнив "Файл -> Новый". Установите размер картинки 200x200 пикселей. Нажмите на клавиатуре кнопку <D> для установки цветов по умолчанию. На панели инструментов выберите инструмент "Заливка" и залейте картинку черным цветом.
  2. Выберите инструмент "Область". Не забудьте о том, что форма области по умолчанию прямоугольная — нам именно такая и понадобится. Отступив от левого верхнего края картинки пикселей 20, выделите квадрат со стороной в 160 пикселей. Выполните "Выделение -> Растушевка...". Радиус растушевки границы установите равным 50. Нажмите "Да". Теперь необходимо создать границу для выделенной области. Выберите
    "Выделение -> Модификация -> Граница" и установите величину границы в 15 пикселей. "Да".
  3. Какой же цвет нам подобрать? Что-либо поярче, к примеру RGB(0,255,255). Это и будет основной цвет. Вернитесь к инструменту "Заливка" и залейте основным цветом выделенную область. Нажмите комбинацию клавиш Ctrl+A для выделения всей картинки. А теперь нажмите Ctrl+C, изображение в буфере обмена нам еще понадобится.
  4. Творческая часть:). Выберите инструмент "Палец" и уменьшите нажим до 25 процентов. Двигая кистью (в смысле, пальцем) по радиусам нарисованной окружности, придайте ей слегка волнистую форму. Слишком не увлекайтесь, а если сделали что-то не так, то восстановите картинку из буфера.
  5. Нарисовали? Теперь нажмите Ctrl+V и в последний раз восстановите картинку. Измените тип наложения плавающей области с нормального на умножение. Установите 50-процентную непрозрачность слоя. Сохраните картинку под именем shockwave1.bmp и закройте PhotoShop.



ФотоШопа на сегодня хватит. Честно скажу, что все получилось в лучших традициях жанра. От Пиромании отличается лишь кричащей расцветкой:). Ну а нам пора загружать 3D Studio MAX и создавать новую сцену.

  1. Перейдите во вкладку Create и нажмите Shapes. В центре видового окна Top создайте дырку от бублика (Donut) с внешним радиусом в 100 единиц. Внутренний радиус подберите по размерам созданной текстуры. 60 единиц will be enough to everyone.
  2. Щелкните по вкладке Modify. Примените к объекту модификатор Extrude (Modify -> Modifiers -> Extrude). Нажмите на клавиатуре кнопку <M> для запуска редактора материалов. Выберите свободный слот. Теперь разверните свиток Maps. Нажмите на кнопку None около надписи Diffuse Color. В окне Material/Map Browser дважды кликните по надписи Bitmap и в диалоговом окне Select Bitmap Image File выберите созданную текстуру.
  3. Нажмите на кнопку Assign Material to Selection. Перейдите на верхний уровень нажатием Go to Parent. Теперь, кликнув на кнопку около параметра Opacity в свитке Maps, выберите в браузере карт пункт Noise. Нажмите Ok для подтверждения. В разворачивающемся списке Noise Parameters уменьшите размер Size до 6. Сверните окно редактора материалов, мы вернемся к нему позже, во время анимации.

Итак, сцена готова. Если Вас интересует статичное изображение, то на этом урок закончен. Аниматоров же прошу двигаться дальше.

  1. Установите счетчик кадров (Time Slider) в начальный кадр анимации. В свитке Modifier Stack вкладки Modify выберите пункт Donut списка модификаторов (около кнопки с булавкой Pin Stack). Обнулите значение Parameters -> Radius 2. Radius 1 уменьшите настолько, чтобы при визуализации волна выглядела в виде кольца, не превышающего размеры взрыва. Это около 20 единиц в нашем случае.
  2. Утопите кнопку Anim. и перетащите счетчик кадров на последний кадр. Теперь восстановите старые значения радиусов — 100 и 60 для внешнего и внутреннего радиуса соответственно. Разверните окно Material Editor. В нем все еще включены настройки шума маски прозрачности. Значение Noise Parameters -> Phase установите равным какому-либо числу. Я использовал разность номеров конечного и начального кадров, деленную на 10. Это 10 единиц для стандартной анимации из 100 кадров.
  3. Закройте редактор материалов и отожмите кнопку Anim. Эффект готов.



Итак, Вы познакомились с двумя основными способами создания взрывных волн. Практически все другие виды взрывных волн создаются при помощи модификации этих эффектов. Давайте теперь посмотрим, как создать нечто аналогичное взрыву в игре Unreal.

  1. Взрывные волны такого типа распространяются с очень большой скоростью, и это нам необходимо учитывать. Давайте уменьшим длину ролика. Кликните правой кнопкой мыши на кнопке Play Animation для открытия окна Time Configuration. В группе Animation уменьшите параметр Length до 30 единиц. Так как селектор Frame Rate установлен на пункте NTSC (30 кадров/секунду), то длина ролика будет равна 1 секунде. Нажмите Ok.
  2. В центре видового окна Top создайте геоид (Create -> Geometry -> Standard Primitives -> GeoSphere) с радиусом в 90 единиц. В разворачивающемся списке Parameters увеличьте количество Segments до 8.
  3. Во вкладке Create нажмите кнопку Cameras. Установите направленную камеру (Target) со значением Parameters -> Stock Lenses 35mm так, чтобы объект Camera01.Target находился в центре геоида, а сама камера также не выходила за пределы GeoSphere. Сделайте активным видовое окно Perspective и нажмите на клавиатуре кнопку C для включения вида из камеры.
  4. Откройте окно редактора материалов и выберите слот для работы. В разворачивающемся списке 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.
  5. На данном этапе материал имеет вид матового стекла. Нам же необходимо сделать частично прозрачными некоторые его фрагменты. Разверните свиток Maps. Нажмите кнопку None у надписи Opacity. В появившемся окне браузера материалов дважды кликните на надпись Noise. В свитке Noise Parameters установите селектор Noise Type в положение Turbulence. Увеличьте размер шума (Size) до 90 единиц. Убедитесь, что значение Phase обнулено, нажмите кнопку Assign Material to Selection, а затем сверните редактор материалов.



  6. Настало время заняться анимацией. Она будет совсем простой. Раскройте вкладку 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 :: графика

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