| Дата последнего изменения : | 03.08.2009 03:37 |
Рейтинг |
|
Демонстрационная программа Smoke (Дым) создана для демонстрации возможностей масштабируемой многопоточной архитектуры игровых движков. Приложение Smoke использует новую концепцию программной генерации огня. Сцена игры представляет собой ферму, на которой расположены деревья, сельхозтехника, сараи, а также управляемые искусственным интеллектом животные - лошади, цыплята и ласточки. Пламя, возникающее от метеоритного дождя, реалистично распространяется по кронам деревьев, перекидываясь с дерево на дерево и с ветки на ветку. Задача игрока - быстро потушить огонь.
Рассмотрим механизмы создания реалистичного пламени, его взаимодействия с объектами игровой сцены и водой. Вы можете скачать исходный код Smoke. Инструкции по сборке приложения находятся в подкаталоге smoke\docs архива с исходным кодом.
Специалисты компьютерной графики обратили внимание на тот факт, что рендеринг пламени в 3D как правило обходится без моделирования физических свойств огня. Природная случайность и турбулентность пламени часто моделируется с помощью систем частиц на основе хорошо известных шума Перлина и распределения Гаусса. Это позволяет достигнуть адекватного эффекта без учета физических свойств пламени, особенно если в сцене присутствует более одного источника огня.
«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.
Джефф Фримен (Jeff Freeman) программист в группе Software Solutions Group, где он работает с графическими решениями Интел в отделе Visual Computing Software Division. Имеет степень бакалавра компьютерных наук от Rensselaer Polytechnic Institute. Его электронный адрес
jeffrey.m.freeman в домене intel.com.

English | 中文 | Русский | Français
Hugh Smith (Intel)
| ||
Jeff Freeman (Intel)
|