Skip to content

NemkovYaroslav/MesoscaleWildfire

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Распространение лесных пожаров на мезомасштабном уровне с учётом физики растительности в режиме реального времени

Данная работа представляет собой моделирование распространения лесных пожаров в трёхмерном пространстве. Основной особенностью является возможность моделирования физики растительности в реальном времени для множества детализированных деревьев в масштабе леса. Достигнуто это было благодаря модификации мезомасштабного представления растительности за счёт введения физического представления модулей и связей между ними.

Проект является частью магистерской выпускной квалификационной работы образовательной программы "Технологии разработки компьютерных игр" школы разработки видеоигр Университета ИТМО. Для реализации разработанной модели был выбран инструментарий игрового движка Unity.

Обзор

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

Wildfire result screenshot

На изображении ниже представлен один из возможных сценариев распространения лесного пожара. В качестве инициатора пожара выступает факел. Точкой старта пожара является правый нижний угол сцены. Скорость и направление ветра принимаются 5 метров в секунду и южное соответственно. Сцена имеет размеры 40 x 16 x 40 метров. Разрешение сетки 80 x 32 x 80 метров. В сцене присутствует 80 деревьев, каждое из которых состоит из 44 модулей. Каждый модуль находится под постоянным воздействием силы ветра и смещается по его направлению.

Wildfire result screenshot

Запуск и использование

Работа является проектом, разработанным в Unity. Для запуска необходимо скачать репозиторий и открыть его через Unity Hub. Собранные тестовые сцены находятся по пути Assets/Scenes/TreeScene.unity и Assets/Scenes/ForestScene.unity и содержат настройки из обзора.

Генерация экземпляров модели растительности

Для того, чтобы приступить к создаю экземпляра модели дерева необходимо создать пустой игровой объект (GameObject) и прикрепить к нему компонент (Component) Path Creator. Данный компонент предназначен для формирования графа дерева с помощью кривых Безье.

У данного компонента есть следующие настройки:

  • Control Mode - как точки на кривой Безье будут переходить друг в друга
  • Enable Transforms - включить/выключить отображение Gizmo
  • Reset Path - сбросить траекторию кривой Безье к заводскому положению

Для управления кривой Безье нужно знать:

  • Shift + LMB - добавить точку в конец или внутрь кривой Безье
  • Alt + LMB - удалить точки с кривой Безье

Wildfire result screenshot

Для того, чтобы начать создавать модули по траектории пути Безье нужно к объекту с компонентом Path Creator добавить компонент Module Prototypes Generator. Данный компонент предназначен для формирования геометрии дерева на основе многомодульного подхода.

У данного компонента есть следующие настройки:

  • Enable Preview Mode - включить/выключить режим предварительного просмотра геометрии
  • Auto Calculate Radii - включить/выключить автоматический просчет радиусов модулей на прямой Безье
  • Start Spawn Radius - величина радиуса модулей в начале кривой Безье
  • Final Spawn Radius - величина радиуса модулей в конце кривой Безье
  • Recalculate Prototypes Radii - обновить величину радиусов под заданные началой и конец радиусов
  • Add Module Prototype - добавить прототип модуля на кривуюБезье
  • Clear Module Prototypes - удалить все существующих прототипы модулей на кривой Безье

Wildfire result screenshot

Для того, чтобы изменить положении конктретного модуля на кривой Безье нужно обратиться к компоненту Module Prototype Data, который прикрепляется к только созданному на кривой Безье прототипу модуля. Данный компонент предназначен для позиционирования модуля на кривой Безье, а также для настройки толщины ветве в заданной позиции, которую ароксимирует модуль.

У данного компонента есть следующие настройки:

  • Step - шаг интерполяции на кривой Безье
  • Radius - радиус модуля в заданной точке кривой Безье

Wildfire result screenshot

Для того, чтобы окончательно сгенерировать модифицированное многомодульное представление дерева нужно в корень полученного представления вложить компонент Modules Generator. Данный компонент предназначен для добавления всех необходимых физических компонентов и удаления лишних.

У данного компонента есть следующие настройки:

  • Wood Density - плотность генерируемой породы дерева
  • Preset - сохраненный шаблон настроек для системы частиц

Wildfire result screenshot

Моделирование распространения лесных пожаров

Для того, чтобы сгенерировать лесной массив нужно обратиться к компоненту Forest Filler.

У данного компонента есть следующие настройки:

  • Tree Prefab - экземпляр дерева, который заполнить лесной массив
  • Distance Between Tress - дистанция отступа экземпляров деревьев друг от друга
  • Positive Position - положительная диагональная позиция заполнения
  • Negative Position - отрицательная диагональная позиция заполнения

Wildfire result screenshot

Для того, чтобы отобразить модули экземпляров деревьев нужно братиться к компоненту Module Renderer.

У данного компонента есть следующие настройки:

  • Render Material - материал для отображения модулей через Instanced Rendering
  • Render Mesh - примитив для отображения модулей (предполагается цилиндр)

Wildfire result screenshot

Для того, чтобы управлять процессом распространения пожара нужно обратиться к компоненту Widlfire.

У данного компонента есть следующие настройки:

  • Compute Shader - вычислительный шейдер, содержащий жидкостный решатель
  • Texture Resolution - разрешение сетки
  • Render Material - материал для отображения сетки через Ray Marching
  • Diffusion Intensity - коэффициент диффузии поля температуры
  • Viscosity Intensity - коэффициент вязкости поля скорости
  • Solver Interations - параметр, определяющий величину итераций жидкостного решателя
  • Wind Intensity/Direction - скорость и направление ветра
  • Module Diffusion Factor - коэффициент внутренней диффузии модулей
  • Release Temperature Factor - коэффициент выделяемого при сгорании древесины тепла
  • Air Transfer Factor - коэффициент теплопередачи воздуха
  • Module Transfer Factor - коэффициент теплопередачи модуля

Wildfire result screenshot

ВАЖНО: для нагрева окружения используйте факел (Torch) и удерживайте ЛКМ

Дополнительно

Автор: Немков Ярослав Алексеевич
Полный текст работы можно найти на GitHub

About

Master's thesis of ITMO university

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published