Итоги 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 бесплатную демо-версию. Чтобы запустить, пришлось немного пошаманить с настройками, но, в целом, остался доволен. Особенно порадовала пасхалка в виде комнаты с текстурами из классического Дума =)

Игровые движки на 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, сообщите в комментариях, и я дополню список.

Итоги 2015 года

Наступают новогодние праздники – а значит, настало время традиционного подведения итогов по проделанной за год работе:

  • Вышло 6 номеров электронного журнала “FPS” (№№ 34, 35, 36, 37, 38, 39). В 2016 году журналу исполняется 8 лет, не за горами и юбилейный 40-й номер.
  • Открылся ресурс CG World – новостной блог, посвященный компьютерной графике
  • Значительно улучшен графический движок DGL, на котором создается Atrium. Реализовано динамическое освещение, шейдерные эффекты, тени, пост-процессинг и т.д.
  • Игра “засветилась” в PC Magazine, на IndieDB, а также в официальной группе новостей и русскоязычных сообществах по языку D.
  • Обновился сайт Atrium.
  • Состоялся выход dlib 0.7.0 со множеством улучшений во всех модулях библиотеки и поддержкой Travis-CI.
  • Физический движок dmech обновился до версии 0.2.6, обзавелся C-интерфейсом, компиляцией в динамическую библиотеку и поддержкой Mac OS X. Появились новые демки и уроки по движку.
  • Система сборки Cook обновилась до версии 2.1.x. Основные нововведения: поддержка response-файлов, кросс-компиляции и поддиректорий во внешних зависимостях.

Чем для меня был интересен прошедший 2015 год? Вот самые, на мой скромный взгляд, значимые события в мире CG, СПО и любительского геймдева:

  • Появление Vulkan, графического API нового поколения, который должен преодолеть недостатки OpenGL и Direct3D, сократив прослойку между пользовательским кодом и видеодрайвером, что позволит более глубоко оптимизировать приложения.
  • Выход нового короткометражного открытого фильма от Blender Institute – “Космическая прачечная” (проект Gooseberry). 
  • Релиз Krum: Edge of Darkness – игры, созданной на Blender Game Engine, которая создавалась несколько лет.
  • “Выстрел” Krita, которую я бы смело назвал программой года. Разработка этого малоизвестного ранее пакета сейчас идет семимильными шагами, по популярности Krita догоняет GIMP, а по функциональности превосходит уже многие коммерческие продукты.
  • GIMP 2.9 с поддержкой новых цветовых режимов и OpenEXR.
  • Открытие исходников Unreal Engine 4 и PhysX.

Тени

Наконец-то осилил shadow mapping (пока без шейдеров, поэтому не VSM). Надеюсь, что вскоре поддержка теней появится в DGL и, как следствие, в Atrium.

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

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

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