D.Rider

's homepage
Краткий обзор архитектуры и возможностей нескольких игровых движков. | Печать |
Автор D.Rider   
16.04.2007 г.
Оглавление
Краткий обзор архитектуры и возможностей нескольких игровых движков.
Страница 2
Страница 3
Страница 4
Страница 5

Один мой знакомый сказал: "Раньше каждый программист считал своим долгом написать собственную операционную систему, а теперь каждый пишет свой движок". Действительно, выбор продуктов для создания игр просто огромный и каждый разработчик преподносит свою реализацию как наилучшее решение для создания игр, это делает выбор наиболее подходящего движка довольно-таки трудоемкой задачей. В данной статье я рассмотрю несколько популярных игровых движков, а именно: GLScene, Torque, Irrlicht и Ogre, с точки зрения возможностей и архитектуры. Это не реклама какого-то конкретного продукта и не сравнение конкурирующих решений, а, скорее, взгляд "изнутри" на некоторые предложения.

GLScene

(http://www.glscene.org/).

Только факты:

Рассматриваемая версияSource Snapshot от 10.06.2004
Платформа, OSWindows, Linux
Язык программированияObject Pascal (Delphi, Kylix)
Render APIOpenGL
Поддержка сценариев (scripting)Delphi WEB Script aka DWS (http://www.dwscript.com/)
ФизикаODE (http://www.ode.org/), Newton (http://www.newtondynamics.com/)
СетьНет
Встроенные редакторыРедактор сцены, работающий в design time Delphi IDE.
Лицензия / стоимостьMozilla Public License (http://www.mozilla.org/)

Важно! Вся нижеизложенная информация по этому движку относится к Source Snapshot 10.06.2004 и скорее всего, большая часть ее уже безнадежно устарела.


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

Архитектура GLScene довольно прозрачна, он легко встраивается в готовый проект. Код движка написан в стиле библиотеки VCL и плотно её (VCL) использует, поэтому разработчикам с опытом написания своих Delphi компонент разобраться в архитектуре GLScene труда не составит. Движок не предоставляет готовый набор игровых сущностей (таких как: "юнит", "триггер", "локация"), вместо этого, для конечного пользователя существует множество классов-утилит (элемент сцены, элемент физики, менеджер и пр.). Часть этих классов реализована в виде визуальных компонентов и их создание возможно в design-time, соответственно, поддерживается их загрузка / сохранение в .dfm файлы. Часть классов необходимо создавать в run-time, но процесс инициализации упрощается использованием встроенной в Delphi поддержки RTTI (элементы сцены, например, создаются по имени класса).

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

Граф сцены - обычное дерево, менеджер сцены всего один, он позволяет устанавливать опции рендеринга на уровне сцены (сортировка элементов в очереди рендера, способ отсечения и др.), потом для каждого элемента сцены вызывается метод Render, который принимает решение о том рендерить элемент, или нет. Процесс рендеринга представляет собой вызовов стандартных функций OpenGL, большинство стандартных элементов используют display-lists.

Менеджера ресурсов, как такового, нет, но некоторые типы ресурсов возможно разделить между объектами. Для совместного использования материалов несколькими моделями используются библиотеки материалов. Для разделения вершинных / индексных данных используются так называемые "прокси объекты", которые хранят информацию о положении и ориентации модели, а данные формы берут из "мастер объекта". Для загрузки текстур / спрайтов используется стандартный Delphi класс TImage, для которого GLScene расширяет список поддерживаемых форматов.

Ландшафт - гибридная смесь chunk'ов, ROAM алгоритма и частично brute force рендеринга. Смотрится красиво и показатель FPS тоже весьма и весьма. На момент изучения мной этого движка, у него были проблемы с несколькими материалами на один ландшафт (без пенальти по скорости работал только ландшафт с основной текстурой и detail map'ом), не знаю как сейчас... Кстати, архитектура рендерера ландшафта позволяет организовать подгрузку ландшафта по мере продвижения камеры (stream loading).

Звук поддерживается через прослойки (wrapper'ы) для OpenAL, BASS и fmod.

Математическая библиотека оптимизирована под работу с 3DNow! и содержит много ассемблерного кода для FPU (любители жесткой оптимизации могут посмотреть что, да как, заглянув в Base/VectorGeometry.pas).

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



 
Copyright (c) 2006-2007 Yuriy A. Krasnoshchek
Публикация и / или распространение любых материалов сайта возможна только с разрешения автора.