Что такое Ogre 3D и как его едят из песочницы

Ogre 3D – это кросс-платформенное SDK для создания графических приложений. Она имеет довольно обширные возможности, такие как полная поддержка OpenGL и Direct3D, полная совместимость с платформами Windows, Linux, Mac OS X и iOS, поддержка широкого выбора файловых форматов, продвинутая система частиц, программирования GPU и всех шейдерных языков высокого уровня и многое другое.

Если стало интересно, то прошу под кат.

Вы спросите, почему именно Ogre 3D? Я не буду утверждать, что это самая лучшая фришная библиотека для работы с графикой, но могу привести явные ее достоинства:
  1. Огромное комьюнити (это форум, это вики, неофициальные локализации сайта и т.п.);
  2. Библиотека довольно легкая в управлении при этом по возможностям не уступает дорогим графическим движкам;
  3. Лицензия MIT;
  4. Поддержка большого кол-ва платформ;
  5. Есть «порты» и «враперы» для языков C#, Java, Python, Ruby, и т.д.

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

image

Ogre представляет собой объектно-ориентированный фреймворк, который включает все части процесса рендеринга в объектной модели. С объектно-ориентированным подходом к рендерингу геометрии, необходимость во взаимодействии с ней напрямую совершенно отпадает. Также Ogre не требует знаний полной своей архитектуры. Вы можете написать приложение зная Ogre очень поверхностно, а можете изучить его вдоль и поперек, все зависит от того что вам нужно и насколько сложный проект Вы хотите написать. Для манипуляции объектами в библиотеке используются интуитивно понятные методы, в отличие от обычного 3D API, в котором, например, для вращения объекта вам нужно добиться правильной трансформации матрицы, вместо просто вызова метода с указанием оси вращения и градусов (радиан). Традиционно, для рендеринга своих сцен и объектов, вы устанавливали состояние рендера с помощью различных API-вызовов, отправляли геометрическую информацию с помощью ещё нескольких API-вызовов, и ещё одним API-вызовом указывали API и GPU отрисовать геометрию. Короче говоря — «Lather, rinse, repeat».

Давайте рассмотрим отношение между структурой графа сцены и её содержимым:

image

Объекты Entity, содержат один или более объектов SubEntity. Эти subentity как раз и являются отрисовываемыми объектами. Сами узлы сцены могут существовать без каких-либо прикрепленных к ним отрисовываемых объектов (если Вам, конечно, это нужно). MovableObject просто прикрепляется к узлу, то есть движимые объекты не являются созданными подклассами от узла, что конечно же дает некие преимущества.

Еще одна особенность Ogre – система плагинов. Дело в том, что библиотека проектировалась расширяемой, то есть, спроектирована как набор связных компонентов, которые взаимодействуют друг с другом через определенные интерфейсы. К примеру Ogre взаимодействует с графом сцены на уровне интерфейса, и вы наверняка уже догадались что реализация графа сцены может быть «подключена» к библиотеке Ogre (в случае необходимости). Плагины не требуют пересборки самой библиотеки, так как Ogre предоставляет простые средства загрузки библиотек-плагинов.

Также Ogre имеет очень мощную систему материалов. Система скриптинга материалов Ogre — одна из самых гибких и мощных, доступных в данном классе ПО. Самая впечатляющая особенность системы материалов Ogre — это дизайн автоматического фоллбека; Ogre может автоматически применить «лучшую» технику, доступную материалу, и продолжить искать далее вниз по списку техник, пока не найдёт ту, которая совместима с используемым графическим аппаратным обеспечением. Ogre также сделает всё возможное для реорганизации пассов в технике, если графическая карта не поддерживает даже наименее зависящую технику в материале. Например, если данное аппаратное обеспечение поддерживает только одну единицу текстуры в своем конвейере, а ваша самая простая техника требует как минимум двух текстурных единиц, Ogre разобьёт проход на два отдельных и совместит два результата для получения такого же эффекта. Вы не ограничены одним только скриптингом в управлении материалами. Все классы и методы, которые Ogre использует для создания материалов из скрипта, полностью доступны вашему приложению; вы можете создавать материалы полностью в коде, процедурно, и, фактически, так делается весьма часто.

Ogre поддерживает три типа анимации: скелетную, морфинг-анимацию и анимацию поз. Все виды анимации могут рассчитываться как программно, так и аппаратно, с использованием вертексных программ.

Относительно новое дополнение в багаже возможностей Ogre — это Композиционный фреймворк, дающий пользователю возможность создавать сложные, двухмерные, полноэкранные эффекты пост-обработки на вьюпорте. Например, вьюпорту можно добавить полноэкранный эффект свечения, или фильтры чёрно-белого тонирования или сепии, или изображение можно сделать «рисованным», штрихованным, с резкими краями, и т.д. Всё, что вы ни задумаете, может быть сделано при помощи фреймворка.

Литература: Pro Ogre 3D Programming

P. S.
Это краткий обзор Ogre 3D, и если вам интересно, и вы бы хотели, то в будущем могу написать продолжение об основных системах и о том, как ими управлять.


UPD Пример Работы Ogre3d в связке с PhysX
+38
5 июня 2011, 19:21
63
Jere 5,0

комментарии (23)

+2
vadim2 #
Наверное, было бы лучше перенести в Game Development
0
kekekeks #
Биндинги вменяемые для CLI/.NET/Mono или под Java есть?
0
kekekeks #
А, вижу, есть. Посмотрим, что за фрукт.
0
jeston #
Да, интересно, пишите продолжение. И примеры на C# или (и) Java (вообщем, на чем вам удобно) были бы тоже весьма уместны.
0
xanep #
Ogre замечателен. Отличная архитектура, всё красиво и просто. Пробовал его, когда выбирали движок для одной игры. И да, это исключительно графический движок, а не игровой. В нем нет физики, звука, сети и прочих штук, необходимых для игры.
+2
oYASo #
В этом-то, собственно, и прелесть — далеко не всегда в 3D надо делать именно игру. Я, например, занимался трехмерным ландшафтом, звук и сеть там были совсем не к месту.
Но стоит заметить, что к Огру прикручиваются практически все популярные пакеты физики (PhysX, Newton, Ballet и т.д.), звук (OpenAL как, имхо, самое популярное), сеть (raknet и т.д.) и прочее.
0
gcc #
Правда, иногда доходит до того, что приходится вручную исправлять ошибки компиляции, чтобы собрать ту или иную библиотеку привязки. Около года назад то ли с OgreNewt, то ли с OgreBullet маялся подобным образом. В целом нету ощущения, что все компоненты этой здоровой системы, надстроенной поверх OGRE, тщательно тестируются и быстро обновляются. Но сам движок, безусловно, хороший.
0
moadib #
Достаточно большое время изучал его, сейчас использую, если нужно быстро сделать прототип 3d-приложения.

С утилитами беда только, было бы здорово, если бы были в официальном репозитории.

В принципе, с его помощью можно сделать всё :) Единственное, что не получилось — эффективный рендер ландшафта Starcraft 2.
0
oYASo #
В смысле, огр не захавал карты старика-2?
0
moadib #
Нет, в смысле, что нужно делать «рендер-в-текстуру» сплаттинга кусков ландшафтра. И по-хорошему, делать это в рантайме иначе видеопамяти не хватит.

Отрендерить в текстуру — отобразить геометрию с полученной текстурой и перейти к отрисовке следующего блока.

Вот с огровской идеологией rendertarget'ов — это сделать не получается.
0
oYASo #
Ээээ… так вроде начиная с версии огра 1.7 все так и работает.
0
moadib #
Читаю свой комментарий, не понимаю зачем поставил тире. Должно быть
«Отрендерить в текстуру, затем отобразить геометрию с полученной текстурой и так повторять для каждого блока ландшафта».

Нет, не работает. Вы, наверное, меня не понимаете :) Попробуйте нарисовать сцену с двумя «зеркалами», но так, чтобы использовалась одна rt-текстура.
–11
naryl #
> фришная

Вы же FreeBSD в списке платформ не перечислили и нигде не указали что это основная тема статьи. Или что вы имели ввиду?
+8
kekekeks #
Обычно люди под «фришный» имеют ввиду Freeware, а не то, что Вы подумали.
0
GreyCat #
Обычно люди под «фришный» имеют в виду free.
+1
Lerg #
Жаль поддержка iOS достаточно мутная и с android не всё хорошо. Радует возможность написания приложений на питоне и даже враппер не старый.
+1
mono2k #
нормальная там поддержка iOS. Ну если чуть-чуть напильником пройтись. А так — нормальная.
0
nobr #
Какие посоветуете книги жанра «Пишем первую игру с Ogre за пять минут»?
+2
Jere #
Тут много полезных статей на русском и даже есть краткий курс по созданию маленькой игры
+2
kogemrka #
Felix Kerger — OGRE 3D 1.7 Beginner's Guide
Книга на английском, но там всё ООООЧЕНЬ просто и с картинками)
0
tronix286 #
Я думаю, было бы неплохо всунуть в пост пару демок движка. Нагляднее так сказать было бы…
0
gcc #
Надеюсь, дело действительно дойдет до следующих статей. Подобные топики по ORGE (и не только) для новичков периодически тут появляются, в них авторы обещают целые циклы уроков, но после пары топиков энтузиазм обычно куда-то исчезает.
+3
Saska #
>>UPD Пример Работы Ogre3d в связке с PhysX

вот пример уже готовой игры на этой же связке, при чем коммерческой:
www.youtube.com/watch?v=GH9VSfCBd2M

очень впечатляет.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.