четверг, 3 ноября 2011 г.

Выход в свет :)

Решил попытаться создать свой блог, посвященный моим наработках в рамках проекта VBOMesh. В блоге рассматриваются базовые составляющие графического движка а так же различные техники и трюки рендеринга c использованием API OpenGL 2.1+ (с ориентацией на OGL3), реализованные или запланированные в движке. Проводится анализ эффективности некоторых техник, имеется ряд уроков по основополагающим технологиям ну и просто интересная информация или мысли.

Немного о проекте - проект VBOMesh является надстройкой над графическим движком GLScene (glscene.org, glscene.ru), расширяя его возможности за счет использования возможностей VBO и шейдеров.

Проект разрабатывался как коллекция объектов VBO, что существенно упростило его архитектуру, но так же наложило ряд ограничений, с которыми приходится бороться и по сей день.
VBOMesh разрабатывался в первую очередь для личного пользования с целью ознакомления с OpenGL, освоения "новых" технологий, а так же в качестве испытательного полигона для них.
Проект стартовал осенью 2009, за прошедшее время оброс функционалом, обрел поклонников и претерпел несколько архитектурных изменений, поменяв свой статус с "надстройки" на полноценный, самодостаточный графический движок, совместимый с GLScene.

Немного истории, разрабатываясь как часть сцены VBOMesh задействовал все ресурсы сцены, в частности использовал менеджер состояний ОГЛ, текстуры, материалы, шейдеры, загрузчики геометрии, модуль векторной геометрии, модуль построения дерева октри и прочее. Но уже с первых дней стали заметны неудобства такого "сотрудничества", связанные с очень ограниченным доступом к ресурсам сцены, всевозможных конфликтов, скрытых багов и прочего. Последней каплей стали архитектурные изменения в сцене, в частности отказ от прямого использования OpenGL, что требовало существенных изменений в коде моих модулей. Так же увеличилась частота структурных изменений кода сцены, в результате чего приходилось больше времени тратить на поиск причин почему после очередного обновления что-то перестало работать, чем на доработку модуля. После одного из таких обновлений было решено отказаться от поддержки последних версий сцены и проект был "намертво" привязан к июньской версии сцены от 2010 года, это так же послужило отправной точкой к дальнейшему отделению модулей VBO от ресурсов и модулей сцены.

На сегодняшний день VBOMesh использует лишь несколько второстепенных модулей:
VectorTypes, VectorGeometry, VectorLists, GeometryBB,
а так же вьювер сцены, что приводит к необходимости использования еще трех модулей:
GLScene, OpenGL1x,  GLRenderContextInfo.

Из разработанных модулей:
uOctree - Построение октри, загрузка/сохранение и рейкаст
uVBO - работа с буферами VBO + ряд вспомогательных процедур
PFXManager - менеджер частиц

uFBO - работа с объектом буфера кадра
uShaders - работа с шейдерами
MTLLoader - загрузка материалов из *.mtl
uFileObj - загрузка моделей из Obj
uAnimatedMesh - загрузка моделей из 3ds с поддержкой ключевой анимации
uFileSMD - загрузка моделей и скелетной анимации в формате smd
uMaterials - работа со свойствами материалов и освещением
uTextures - работа с текстурами 
uMaterialObjects - работа с объектами материалов (свойства, текстуры, шейдера, смешивание)
OGLStateEmul - модуль для прозрачного кеширования операций со стэйтами ОГЛ

Таким образом модуль имеет практически весь необходимый функционал для разработки графических приложений без использования ресурсов сцены, хотя взаимодействие с ресурсами сцены так же оставлено, но выведено в отдельный модуль-"адаптер".

Более подробно о каждой части проекта будет рассказано в следующих сообщениях.

В настоящее время VBOMesh ориентирован в первую очередь на современные видеокарты с полной поддержкой OpenGL 2.1. В модуле полностью исключена работа с дисплейными списками и командами прямого рисования через glBegin/glEnd, что позволяет с минимальными изменениями использовать модуль совместно с ОГЛ 3.х.

2 комментария: