Временная шкала моих проектов

Приводя в порядок архивы и вспоминая прошлое, решил зафиксировать информацию о моих 3D-движках и других OpenSource-разработках в виде интерактивной временной шкалы при помощи time.graphics — возможно, кому-то будет интересно:

Dagon

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

Те, кто следит за моей активностью на GitHub, могли заметить, что у меня появился новый репозиторий dagon — проект, который позиционируется как новая эволюционная ступень DGL. В процессе работы над Atrium я пришел к выводу, что в движке не хватает средств автоматизации некоторых рутинных задач. Например, управление памятью в типичном игровом приложении может быть почти полностью автоматизировано, поскольку выделение и высвобождение памяти происходит в специально задуманных паузах, таких как переключение между локациями (это не относится к играм с открытым миром с фоновой подгрузкой, но это уже специфический случай). Кроме того, в обсуждении на Reddit звучал вопрос, почему DGL не использует SDL2. Так родилась новая ветка движка, которую я решил сделать отдельным экспериментальным проектом.

На сегодняшний день Dagon включает следующие возможности:

  • Использование SDL2
  • Новая модель памяти на основе концепции владельца (owner), позаимствованной из Delphi
  • Модель образцов и компонентов (entity-component), позволяющая расширять функциональность объектов динамически, без наследования классов
  • Динамическая перезагрузка ресурсов при их модификации сторонним приложением без перезапуска игры
  • Поддержка форматов OBJ и IQM
  • Поддержка текстур PNG, JPG, TGA, BMP
  • Поддержка контейнера Box для ресурсов
  • Новая система материалов с разделением на фронтенд (набор параметров) и бэкенд (передатчик параметров графическому конвейеру — фиксированному или шейдерному, в зависимости от выбранной реализации бэкенда). Система позволяет использовать как стандартные материалы с известным набором параметров, так и создавать свои, специализированные
  • Некоторые компоненты, напрямую портированные из DGL — например, система событий, система освещения, рендеринг текста.
Как только будет дописана система материалов и поддержка формата DGL3, я начну портировать Atrium на новый движок.

Итоги 2016 года

Близится конец года — и, значит, настало время для подведения итогов. К сожалению, в последнее время у меня было мало времени для работы над Atrium, но какой-то прогресс все-таки есть.

  • Графический движок DGL был значительно отрефакторен и улучшен, был создан более эффективный формат для хранения сцен и реализованы различные новые техники рендеринга, самой интересной из которых является PBR. Движок стал работать намного быстрее, а картинка стала заметно современнее.
  • Вышли подряд две новые версии коллекции библиотек dlib — 0.8 и 0.9.
  • Вышло 6 номеров электронного журнала «FPS» (№№ 40, 41, 42, 43, 44, 45). В 2017 году журналу исполняется 9 лет.
  • На сайте LightHouse Software вышли две мои статьи по D — «Стеганография в dlib» и «dlib.image и OpenCL». Также Atrium и сопутствующие проекты привлекли внимание авторов Блога D, где был опубликован соответствующий отчет на английском.
  • Я довел до ума и выложил трассировщик лучей и программный растеризатор, написанные на D, а, кроме того, все-таки доделал свой старый проект — Xtreme3D 3.0.
Чем для меня был интересен прошедший 2016 год? Вот самые, на мой скромный взгляд, значимые события в мире CG, СПО и геймдева:
  • Выход LunarG SDK, комплекта разработки под Vulkan. Одновременно появились и Vulkan-биндинги для разных языков, в числе которых и D. Поддержкой нового API постепенно обрастают и ведущие игровые движки.
  • Открытие исходников CryEngine 5.
  • Выход Krita 3.0 с поддержкой анимации.
  • Переход Blender на OpenGL 2.1 для отрисовки интерфейса. Запускать последние версии Blender на своих старых ноутбуках я теперь не могу — а жаль…
  • Появление Armory3D, альтернативного игрового движка для Blender — очень перспективный проект, картинкой и списком поддерживаемых платформ оставляет BGE далеко позади.
  • Выход Doom 4. Покупать, правда, не стал, скачал на Steam бесплатную демо-версию. Чтобы запустить, пришлось немного пошаманить с настройками, но, в целом, остался доволен. Особенно порадовала пасхалка в виде комнаты с текстурами из классического Дума =)

Heat haze

Сделал эффект «искажения пространства», похожий на марево от жары — думаю применить его где-нибудь в игре:

Хронология развития движка Atrium

Порой интересно оглянуться назад и оценить пройденный путь. Atrium разрабатывается с 2013 года, и графический движок проекта с того времени претерпел серию значительных эволюционных изменений. Одновременно менялся и визуальный стиль игры:

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

PBR. Продолжение

Адаптирую модель гравитационного излучателя к новому физически корректному рендеру:

PBR. Шероховатость

Теперь DGL автоматически генерирует размытые текстуры окружения для материалов с разной степенью шероховатости:

А вот как смотрится в движке пистолет Cerberus, известная PBR-модель Андрея Максимова:

PBR. Карта окружения

Еще несколько скриншотов нового PBR-шейдера:

PBR. Первые шаги

Решил реализовать в DGL модную сейчас технику физически обоснованного рендеринга (physically-based rendering). Уже имеются Cook-Torrance с нормализацией для отраженного света и image-based lighting для непрямого освещения:

Пока не уверен, правда, будет ли это поддерживаться в Atrium. Скорее всего, в DGL будет возможность переключаться между PBR-шейдером и обычным.