| 02.08.2009 13:00 | |
Введение
Демонстрационная программа Smoke (Дым) создана для демонстрации возможностей масштабируемой многопоточной архитектуры игровых движков. Приложение Smoke использует новую концепцию программной генерации огня. Сцена игры представляет собой ферму, на которой расположены деревья, сельхозтехника, сараи, а также управляемые искусственным интеллектом животные - лошади, цыплята и ласточки. Пламя, возникающее от метеоритного дождя, реалистично распространяется по кронам деревьев, перекидываясь с дерево на дерево и с ветки на ветку. Задача игрока - быстро потушить огонь.
Рассмотрим механизмы создания реалистичного пламени, его взаимодействия с объектами игровой сцены и водой. Вы можете скачать исходный код Smoke. Инструкции по сборке приложения находятся в подкаталоге smoke\docs архива с исходным кодом.
Моделирование пламени
Специалисты компьютерной графики обратили внимание на тот факт, что рендеринг пламени в 3D как правило обходится без моделирования физических свойств огня. Природная случайность и турбулентность пламени часто моделируется с помощью систем частиц на основе хорошо известных шума Перлина и распределения Гаусса. Это позволяет достигнуть адекватного эффекта без учета физических свойств пламени, особенно если в сцене присутствует более одного источника огня.
«Smoke» также использует традиционную систему частиц, но при этом используется дополнительная система, в которой огонь рассматривается как источник тепла. Этот тепловой излучатель учитывает такие аспекты как распространение огня по горючим материалам, его интенсивность в конкретной точке, взаимодействие источников тепла с соседними источниками горючего.
Реализация
Объекты в Smoke
Архитектура Smoke [2] использует различные компоненты, которые мы будем называть «системы», которые выполняют типичные функции игрового движка, такие как физика, графика, звук, искусственный интеллект и т.д. Типичный игровой объект в Smoke является абстрактным объектом, привязанным к нескольким системам. Например, лошадь на «Дымной» ферме привязана к следующим системам:
- Графика скелетной анимации и анимации модели
- Геометрия позиционирования и ориентации в пространстве
- Физика обнаружений и контроля столкновений
- Звуковые эффекты
Подобная структурная логика применима ко всем объектам сцены, например, к падающим с неба метеорам, которые также используют системы графики, физики, звука, плюс систему огня. Система огня отвечает за физические свойства огня в программе и его графическое представление.
Система огня
«Умные» частицы
Система огня состоит из двух частей: эмиттер частиц на основе системы частиц, описанной в [1], которая включает плоские текстуры пламени (частицы огня) и систему источника тепла, которая моделирует тепловые свойства огня (тепловые частицы).
| Частицы огня | Тепловые частицы |
Источник топлива, такой как дерево, как правило, является достаточно сложным объектом, состоящим из множества ветвей и розеток листьев. Хотя каждый геометрический объект может служить источником топлива, в том числе метеоры. Таким образом, каждая ветка и розетка дерева может служить носителем для системы частиц огня. Система использует выровненный по осям ограничивающий блок (ВООБ, AABB = axis-aligned bounding box) носителя не только для того, чтобы определять, где должны располагаться видимые частицы огня, но и для проверки на столкновение частиц в источнике тепла. Как и при настоящем пожаре, тепло распространяется вверх и в стороны от источника, перемещаясь к вершине дерева с ветки на ветку, достигает вершины и затем спускается вниз по кроне, как показано на рис. 1.
Рис. 1. Система умных частиц – определение источника топлива
Распространяющийся огонь.
Метеоры – единственные объекты в сцене, которые горят изначально, падая с неба и проходя через деревья или рядом с ними. Деревья состоят из веток и розеток листьев, каждая из которых представляет индивидуальный геометрический объект. Метеоры являются носителями для системы огня, и, пролетая через сцену, некоторые из них проходят рядом с элементами, также ассоциированными с системой огня. Если такой объект пока не горит, алгоритм отслеживания столкновений системы огня зажжет его, распространяя огонь по всему дереву и, возможно, на другие деревья сцены.
Обнаружение столкновений источников тепла является ресурсоемким вычислительным процессом, который хорошо вписывается в параллельную архитектуру, ориентированную на задачи и специально разработанную с учетом многоядерных процессоров. Каждый горящий объект содержит несколько отдельных языков пламени, которые входят в видимую систему частиц и физическую частицу источника тепла. В терминах обнаружения столкновений, частица огня представляет собой луч, который и проверяется на пересечение с соседним ВООБом источника топлива. Длина этого луча определяет температуру пламени. Объекты вне радиуса действия этого луча исключаются из расчетов.
Рис. 2. Система умных частиц – обнаружение столкновений
На рис. 2 показано, как столкновение источника тепла с веткой «помечает» ее как горящую. Это активирует излучатель видимых частиц и тепла этого объекта, позволяя огню распространяться. Процесс продолжается до тех пор, пока огнем не будут охвачены все источники топлива в пределах радиуса действия.
Каждый горящий объект проверяется на соприкосновение с соседними источниками топлива и тепла. Рассмотрим алгоритм этой проверки в псевдо-коде:
For each Fire Object (each tree)
For each Fire in all Fire Objects (each branch)
For each Heat Emitter in each fire
Check for collision against the list of fuel sources
If collision, mark object as burning
Внутренняя часть кода выполняет тест на пересечение тепловых лучей источника тепла в дереве А и ветки дерева Б. Поскольку тепловые частицы принадлежат источникам тепла в разных объектах, эти горячие частицы переносятся в локальное пространство других геометрических объектов, как показано на рис. 3.
Рис. 3. Перенос и тест столкновения
Параметры системы огня
Система огня использует набор входных параметров для визуальной и теплоизлучающей систем частиц, которые определяют специфичное поведение частиц:
- Тип (сферическое пламя метеоров, линейное пламя веток, пламя неправильной формы для листьев)
- Плотность огня
- Размер (плоский)
- Импульс
- Сдвиг/импульс (изменение позиции для определения направления пламени)
- Время жизни
Рендеринг огня, дыма и углей
Видимая система частиц, используемая для рендеринга фрагментов огня, использует набор текстур, которые сменяют друг друга пока частица существует, имитируя переход пламени в дым и искры. Искры вздымаются над деревьями в виде факелов, реализованных в коде шейдера Ogre3D [3].
Рис 4. Огонь, дым и искры над горящим деревом
Вода
В приложении Smoke имеется пожарный шланг, изображенный на рис. 5, который пользователь может «перетаскивать» по сцене, чтобы потушить огонь.
Как было отмечено в предыдущих параграфах, каждый объект, в нашем случае – объект, привязанный к геометрическому объекту дерева, проверяется, на столкновение (соприкосновение) с каким-нибудь из источников тепла, в том числе с соседними негорящими ветвями. Вода является естественным расширением системы огня, использующим дополнительные проверки в коде обнаружения столкновений для тушения горящих элементов и предотвращения распространения огня на соседние объекты.
Рис. 5. Система огня – Вода
Так же как метеоры используют привязанную к ним систему огня, настроенную в качестве источника тепла на поджог огня, невидимые холодные объекты используют систему огня как источник холода, которые вступают в соприкосновения с другими объектами системы огня. В Smoke используется плагин ParticleFX из пакета Ogre3D [3] для скриптовой системы частиц. Контроль столкновений происходит посредством системы огня, привязанной к невидимым объектам, выпускаемым с позиции камеры как скорострельные снаряды. Когда водяной объект проходит мимо или сталкивается с горящим объектом, присоединенная система огня определяет, не пересекает ли этот горящий объект какой-либо холодный луч, гася огонь.
Дополнительный плюс этого эффекта в том, что невидимый объект воды также привязан к физической системе Havok [4], что позволяет воде взаимодействовать с разрушаемыми элементами сцены, например строениями.
Заключение
Демонстрационное приложение Smoke реализует оригинальный подход к программному моделированию распространяющегося пламени, включая графические и физические системы частиц, которые могут взаимодействовать со сценой. Такая концепция прекрасно подходит для произвольных объектов сцены, особенно в сочетании с параллельной архитектурой игрового движка, который позволяет распределить трудоемкие расчеты столкновений объектов между имеющимися в потоками.
Исходный код
Исходные коды Smoke доступны для загрузки. Инструкции по сборке находятся в zip архиве с исходным кодом в директории Smoke\docs.
Планы на будущее
Текущая версия системы огня не содержит несколько эффектов, которые могут быть добавлены в будущем:
- Разрушение горящих объектов с течением времени
- Повторное возгорание потушенных объектов
- Добавление наложений или изменение текстур горящих и сгоревших объектов.
Ссылки
[1] [Luna06] Frank Luna. Introduction to 3D Game Programming with DirectX 9.0c: A Shader
Approach. Wordware Publishing Inc.
[2] [Smoke08] Ryan Shrout. “A Smoke Screen from Intel: Implementing multi-threaded
gaming”. Intel 2008.
[3] [Ogre3D08] Ogre3D Open Source Object-Oriented Graphics Rendering Engine
http://www.ogre3d.org.
[4] [Havok08] Havok Physics http://www.havok.com.
Об авторах
Хью Смит (Hugh Smith) старший программист в группе Software Services Group, работает с независимыми производителями игровых программ по внедрению оптимизации для графических и многоядерных систем Интел в ведущие игровые продукты. Его электронный адресhugh.a.smith в домене intel.com.
Джефф Фримен (Jeff Freeman) программист в группе Software Solutions Group, где он работает с графическими решениями Интел в отделе Visual Computing Software Division. Имеет степень бакалавра компьютерных наук от Rensselaer Polytechnic Institute. Его электронный адрес
jeffrey.m.freeman в домене intel.com.
Дополнительные изображения
Пожалуйста, обратитесь к странице Уведомление об оптимизации для более подробной информации относительно производительности и оптимизации в программных продуктах компании Intel.
Комментарии (0) 
Обратная ссылка (1)
- температура горения дерева | Фффотки
26.11.2011 03:01
Оставить комментарий 
Hugh Smith (Intel)
| ||
Jeff Freeman (Intel)
|

