Новый формат сцен

Оказалось, что нынешний формат, в котором хранятся модели для DGL, крайне неэффективен — меши хранятся в виде списка треугольников, и большие модели (1000 полигонов и более) загружаются движком неприлично долго. Сейчас экспериментирую с новым форматом, в котором данные хранятся в виде традиционных буферов вершин и индексов — как и следовало ожидать, любые модели теперь грузятся практически мгновенно.
Средства для загрузки нового формата в DGL и экспорта из Blender уже доступны в репозитории движка. Правда, я еще не определился с форматом хранения материалов — есть идея хранить вместе с моделью только базовые характеристики материала, которые можно получить из Blender (текстуры, цвета), а расширенные настройки, специфичные для DGL, загружать из отдельных внешних файлов с текстовым описанием.

dlib 0.9.0 beta

Вышла бета-версия коллекции библиотек dlib 0.9.0. Из основных нововведений стоит отметить новый модуль dlib.math.tensor — реализацию тензоров с поддержкой как статического, так и динамического выделения памяти (еще один шаг, приближающий dlib к NumPy и Matlab). Также значительно улучшен пакет dlib.image: появился экспорт в BMP и TGA, двумерный foreach для изображений, диапазоны для окон и произвольных прямоугольных регионов. Новый пакет dlib.network, как планируется, будет содержать независимую от Phobos поддержку сети и веб-функциональность (пока в нем есть только парсер URL).

А еще Atrium был успешно портирован под FreeBSD.

Программный растеризатор на D

Решил выложить свой программный растеризатор, который написал ради развлечения за пару вечеров. Он умеет рисовать только треугольники, есть поддержка текстур (с перспективной коррекцией) и alpha-смешивания. Не старался его особо оптимизировать, однако он уже работает достаточно быстро при небольших разрешениях (тестировал на 400х300).

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

Весь исходный код умещается в одном файле (<600 строк), не считая бибилиотеки dlib и биндинга к SDL для вывода изображения. Можете использовать его для самообразования или как основу для собственного программного рендера. В архиве есть сборка для Windows.

Скачать

Мягкие тени

Реализовал в графическом движке сглаживание теней методом PCF. Сблизи заметны артефакты сэмплинга (самый большой недостаток метода), но издали все выглядит вполне прилично:

В дальнейшем, скорее всего, буду двигаться в сторону VSM.

Новый дизайн карты

Предыдущий вариант носил временный характер и предназначался для обкатки шейдеров. Сейчас работаю над окончательным:

Новая модель гравипушки

Встречайте третий (на этот раз, думаю, окончательный) вариант гравитационного излучателя:

Над текстурой еще работаю, на обшивке корпуса будет больше деталей.

ГГ в Sculptris

Начал моделировать главную героиню Atrium. Принципиально не хочется наделять ее стереотипной красивой внешностью — упор, скорее, на суровость и брутальность.


Для тех, кто забыл, как она должна выглядеть — см. скетчи здесь и здесь.

Игровые движки на D

Ситуация с игровыми движками для D на сегодняшний день, к сожалению, далека от удовлетворительной. Проект Dash, гремевший год-два назад, сегодня практически не развивается, и это подтверждается не только отсутствием значимых коммитов в репозитории, но и словами самих авторов: «Unfortunately we aren’t doing much active development on Dash at this point, but we are still relatively quick at doing PRs and providing support». Попытки портировать на D такие движки, как OGRE и Irrlicht, заглохли еще раньше — так же, как и проект по переписыванию на D2 движка Yage, который был достаточно популярен в эпоху D1.

Вот еще парочка проектов, которые проявляли активность в течение последних лет, но нынешняя актуальность которых вызывает сомнения:

  • EncoXD — кроссплатформенный движок на основе SDL2 и OpenGL 3.2 со скриптингом на Lua и начальной поддержкой сети
  • ZuzuStudio Game Engine — курсовая работа студентов из Минска. Курсачи редко перерастают во что-то более серьезное, так что особых надежд питать не стоит.
А что же актуальные проекты? Тут выбор невелик:
  • Unecht — очень любопытный 3D-фреймворк. Работает на GLFW и OpenGL 3.3, поддерживает физику (ODE), OpenAssimp, FreeImage, FMOD, включает собственный редактор сцен
  • DGL — моя скромная разработка, графический движок под Windows, Linux и OSX. Работает на SDL и OpenGL 1.2 (но большая часть функциональности основана на шейдерах и расширениях OpenGL). Нет встроенного редактора, зато есть экспортер сцен для Blender. DGL все еще находится на стадии рефакторинга: есть стабильная версия и экспериментальная ветка DGL/GC-free с ручным управлением памятью, шейдерной системой материалов и многими другими фичами, но некоторые возможности основной ветки до сих пор в нее не портированы — например, скелетная анимация.

Если вы разрабатываете свой игровой движок на D, сообщите в комментариях, и я дополню список.

Vulkan, SDL и D

Частично переписал пример Vulkan/SDL на D. Исходники доступны в моем репозитории экспериментов с Vulkan:

https://github.com/gecko0307/vulkan-demos

Пример представляет собой минимальное приложение, создающее окно SDL, инициализирующее Vulkan и закрашивающее в цикле экран синим цветом. Больше ничего рисоваться не должно.

Функциональность, относящаяся с Vulkan, отделена от SDL и остальной логики приложения, вынесена в модуль vkctx.d. Используются Derelict 2, SDL 1.2 и модифицированный биндинг VulkanizeD. Линковалось и тестировалось на системе с Windows 8.1 и видеокартой NVIDIA GeForce GT 740 с драйвером версии 356.39.