Редактор уровней для DGL и Atrium

Решил продолжить работу над редактором уровней, который ранее делал на основе GTK. Сейчас связываться с GTK для этой задачи уже как-то не хочется, поэтому решил написать для него собственный графический тулкит с использованием OpenGL. На данный момент готова оконная система, навигация по сцене и манипулятор для перемещения объектов.

Обновление всех проектов

На днях обновились библиотеки dlib, dmech, DGL и игра Atrium.

  • В коллекции библиотек dlib 0.6.0 значительно улучшен декодер JPEG, добавлена поддержка новых типов прореживания и APP-маркеров. Улучшено управление памятью (удалять теперь объекты можно через интерфейсы и родительские классы), добавлены независимые от сборщика мусора реализации классов изображений и файловых потоков. В пакете dlib.math появилась реализация некоторых идиом комбинаторики (dlib.math.combinatorics).
  • Физический движок dmech 0.2.0 включает необходимые изменения для поддержки dlib 0.6.x. Также к движку теперь прилагается небольшая документация в виде уроков.
  • DGL/GC-free, независимая от сборщика мусора ветка проекта, теперь тоже переведена на dlib 0.6.x.
  • Вышла первая альфа-версия Atrium (0.0.1a). Релиз, главным образом, обозначил перевод игры на последние версии вышеперечисленных библиотек. Есть готовые сборки для Windows и Linux.

DGL без сборки мусора

На данный момент на D, к сожалению, нет полноценных игровых движков с ручным управлением памятью. И, если в общем случае с производительностью мы ничего сделать не можем (Benjamin Thaut, чтобы оптимизировать производительность игровых приложений, использовал модифицированный рантайм языка), то пусть хотя бы управление ресурсами будет детерминированным.
Новая ветка проекта DGLgc-free — является попыткой достичь этого путем полного отказа от выделения динамической памяти через сборщик мусора. Вместо этого все классы  используют dlib.core.memory и dlib.container.array вместо оператора new и встроенных динамических массивов D.
В данный момент переписана примерно половина функциональности DGL, добавлено и много нового: например, новая система событий, поддержка многоязыкового ввода с клавиатуры и т.д.

Система освещения в DGL

В графическом движке DGL реализована новая система освещения, поддерживающая неограниченное количество динамических источников света. При этом она работает даже на старых видеокартах, не поддерживающих программируемый конвейер.
Метод основан на рендеринге каждого объекта с учетом лишь нескольких ближайших источников света (в связи с ограничениями OpenGL — не более 8 штук на объект; на практике редко бывает нужно более 3-5). Движок сортирует источники света в порядке убывания яркости относительно текущего объекта, выбирает наиболее яркие и обновляет соответствующим образом контекст OpenGL.

На скриншоте показан пример использования этой системы в сцене со 100 источниками света и >100 объектами.

Итоги года

Вот и пролетел еще один год — самое время подводить итоги по проделанной работе!

  • Вышли подряд нескольно новых версий dlib (0.3 и 0.4). Появилась поддержка абстрактных потоков ввода/вывода, а также платформонезависимый интерфейс файловой системы и его реализации для Windows и POSIX. Пакет обработки изображений теперь поддерживает JPEG, TGA и BMP, распараллеливание, HDRI. В пакете линейной алгебры состоялся серьезный рефакторинг матриц, появилась поддержка инверсии через LU-разложение.
  • Было выпущено 6 номеров электронно-познавательного журнала «FPS» (№№ 28, 29, 30, 31, 32, 33). Появился новый сайт проекта (http://fps-magazine.cf). Также «FPS» теперь доступен в качестве мобильного приложения для Android и iOS. Кстати, в феврале 2015 года журналу исполняется уже 7 лет!
  • Вышла игра 2048х2 — клон 2048 для двух игроков.
  • Улучшен физический движок dmech: реализован новый кэш контактов, добавлена поддержка составных тел, улучшена поддержка ограничений, добавлены статические тримеши, поддержка raycast и игровой кинематики.
  • Графический движок Atrium теперь развивается как самостоятельный проект — DGL. Это объектно-ориентированная надстройка над OpenGL, SDL и Freetype с собственной системой событий, виртуальной файловой системой с поддержкой ZIP-архивов, своим форматом хранения сцен, поддержкой шейдеров, мультитекстурирования, скелетной анимации, выводом текста в UTF-8, а также встроенными средствами интернационализации.
  • Разработан скриптовый язык GScript — минималистичный императивный язык с динамической типизацией, идейно близкий к D, JavaScript и Python. GScript можно будет использовать в качестве скриптовой системы в игровых движках.
  • Вышла новая версия системы сборки проектов Cook 2.0.1 — с новой системой аргументов командной строки, обновленным парсером импортов, поддержкой внешних зависимостей (в том числе из Git-репозиториев), улучшенной системой конфигурации.
  • Обновилась страница проекта Atrium.

Поддержка IQM в DGL

Графический движок DGL обзавелся поддержкой Inter-Quake Model (IQM) — свободного формата для хранения 3D-моделей со скелетной анимацией.

IQM спроектирован в качестве замены MD5 известным разработчиком Ли Сальцманом, лидером проектов Sauerbraten, Tesseract и ENet. В настоящее время формат используется многими свободными играми и движками, в том числе Sauerbraten, DarkPlaces, Alien Arena, Xonotic и Warsow.

Формат бинарный, не привязан к какому-либо движку или графической технологии, легко читается и записывается. Существует полнофункциональный экспортер в IQM для Blender, что делает этот формат идеальным выбором для открытых игровых проектов.