Объёмный огонь

Любой, кто серьёзно занимался созданием реалистичного огня знает как тяжело создать правильное изображение и в особенности правильную динамику поведения. Проблема может заключаться во многом: обычно аниматоры используют систему частиц для имитации движения и различные техники rendering-а для обработки изображения так что бы оно выглядело как огонь, это решение состоит в использовании возможностей HyperVoxels.

Другой путь, в рассмотрении огня исключительно как плоское явление и попытаться имитировать его с помощью текстур. Это хорошо известная технология состоит в применении текстуры фрактального шума к плоскости и перемещения её по осям Y и Z, для придания вертикальной скорости комбинирование её со случайным модификатором типа motion(движение) (это приводит к движению по оси Z). Это хорошее решение потому что быстрое, но в нём есть несколько очевидных ограничений, например, невозможность пролетать сквозь пламя. Здесь мы предлагаем другой метод, использование объёмного света:

  1. Загрузите Layout.
  2. Передвиньте источник света в позицию 0, -1, 0 и поверните его на следующие углы 0, -90, 0. В окне просмотра вида камеры (Camera View) источник света должен находится в основании экрана обращённый лицом вверх.
  3. Откройте панель Light Properties. Активизируйте Volumetric Light и нажмите на Volumetric Light Options. Сейчас вы должны быть в панели Volumetric Options.
  4. Откройте VIPER, обработайте картинку. Для быстрого просмотра включите метод набросочного чертежа (draft mode).
  5. Щёлкните на редактировании текстур (Edit Texture). В редакторе текстур обозначте тип текстуры как процедурный (Procedural Texture).
  6. Из панели объёмного освещения кликните на "Texture Only". Это значит, что в огне мы увидим только тексткру.
  7. Обычно это лучше всего, когда пытаешься достичь текстурного эффекта с помощью объёмного света.
  8. На этой же панели увеличь Luminosity до 500%:
  1. В текстурном редакторе увеличь Falloff до 25% по оси Z. Ты должен увидеть текстуру сжатую вдоль оси распространения света.
  2. Для получения эффекта огня мы должны сжать текстуру вдоль оси аксцис. Пропорция 1/3 обычно хороша для подобного вида эффектов. Итак, давайте установим в графе Scale X и Y на 0.5 м и Z на 1.5 м.
  1. Мы получили результат который выглядит очень реалистично, хотя цвет не тот. Для установки правильного цвета давайте добавим Gradient Layer, сохраняя параметры для "Previous Layer".
  2. Установите значение Alpha value в первом ключе(key) в 0%. Сейчас добавьте ещё 3 ключа в первом установите значение в графе “Parameter” 0.35, во втором 0.5,а в третьем 0.65.
  3. Увеличьте Alpha value в третьем ключе до 100% и назначьте следующие значения RGB компонентов (244, 139, 023). Сейчас вы должны видеть хорошие пламя. Заметьте, что при передвижении ключей вы можете менять общую форму пламени.

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

С одной стороны мы могли бы экспериментировать с различными параметрами для движения и смотреть как они влияют на огонь, мы можем так же изменить тип процедурной текстуры, например на Crumple и посмотреть на что это будет похоже. Но давайте сохраним Turbulence на данный момент. Что нам сейчас действительно нужно так это анимировать огонь.

Один из путей к осуществлению это добавить E настройки к Z позиции для Turbulence слоя. Для этого выбери слой Turbulence и нажми на графу Position. Активизируй E настройки для Z позиции, кликнув на кнопку E. Добавь ключ к кадру 60 со значением 5 m. Обработай картинку в VIPER. После всего этого вы должны иметь неплохую анимацию огня.

Это хорошее начало, но мы теряем решающий свойство огня: это движение внутри пламени, огонь ведёт себя очень хорошо и это его естественное поведение. Для осуществления этого мы можем использовать "Texture Displacement" технологию, добавив текстуру смещения(displacement texture) за слоем "Turbulence". После анимации это даст реалистичное внутреннее движение пламени:

  1. Добавьте процедурный слой. Передвиньте его в основание списка, это заставит его влиять на остальные слои.
  2. Установите значение параметра frequencies(частота) в 2, это снизит время обработки.
  3. Установите смешивающий режим(Blending Mode) на "Texture Displacement". Сейчас вы должны увидеть искажённое пламя. В активном состоянии включая и выключая параметр вы можете увидеть как это воздействует на общую текстуру. Другая вещь, которую вы можете заметить это значительное увеличение времени обработки, это потому что слой текстурного смещения обрабатывается в 6 раз дольше, чем обычный слой.
  4. Сейчас установите параметр графы Scale оси Z на 3 для сохранения аналогичной пропорции и заставь текстуру двигаться вдоль оси Z используя метод описанный выше. Опыт показывает, что использование параметра скорость(velocity) равного 2-м скоростям базового слоя даёт отличный результат. Итак, увеличьте параметр envelope на Z позиции с ключом на 60-й кадр и значением 10м. Конечно, это общие характеристики с недостатками по многим физическим характеристикам, но огонь, по крайней мере, смотрится отлично.

То, что мы сейчас имеем, прекрасный огонь с движением внутри пламени, всё это без помощи посторонних объектов, систем частиц и последовательностей изображений. Большой плюс в работе с объёмным светом состоит в возможности движения камеры вокруг и сквозь пламени, эти кадры будут правильно обработаны. Здесь представлен вид пламени, когда камера обращена лицом к огню:

В финале мы можем поменять свойства пылающего огня так, что бы он выглядел как сжигание топлива с большей контрастностью пламени. Для этого сделаем большую непрозрачный и свечение, которые увеличат густоту пламени. Установите параметр Luminosity и Opacity до 5000 %:

О времени обработки(Render time):

Время обработки при втором способе анимации возрастает, но мы приобретаем экстра реализм в динамике движения. В зависимости от того какой уровень реализма вы рассчитываете получить вы мозжите настраивать способ визуализации. Одна вещь, которая важна в использовании объёмного света это уверенность в отсутствии карт теней, особенно если вы работаете в большой сцене. Большинство обрабатываемого времени тратится на обработку текстур, поэтому оптимизация текстур это то, что действительно важно. Для оптимизации текстур ниже приведены несколько правил:

  • Для процедурных текстур время рэндэтинга находится в прямой зависимости от количества параметра “частота” (frequencies), или (octaves). Итак, используйте правильное количество параметра “частота” (frequencies). Попробуйте сами посмотреть что случится если вы понизите его значение и если вы установите наиболее приемлемые параметры. Понижение параметра частоты будет ограничивать количество деталей, но обычно высокая частота деталей портит картину.
  • Не используйте текстуру смещения(displacement) если вы действительно не нуждаетесь в этом, она сильно увеличивает время обработки.
  • Ограничьте число слоёв в вашей текстуре, будте уверены все они пригодятся.

Объёмный огонь. Клип.

AVI ~800k

Источник: NEWTEK.com
Перевод: AL


268 0 850 1
1
2007-02-13
Очень полезный и нужный урок понятно написано, спасибо, реально помог!!!!!!!!!
RENDER.RU