Pull to refresh

Что такое Ogre 3D и как его едят

Reading time 4 min
Views 27K
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
Tags:
Hubs:
+38
Comments 23
Comments Comments 23

Articles