Обновления

dlib 1.3.0

Вышла новая версия dlib. В библиотеке появился новый пакет dlib.math.random с реализацией генератора псевдослучайных чисел на основе C-функции rand. Проделан ряд улучшений в математическом пакете: добавлена поддержка компилятора GDC в модуль dlib.math.sse, появилась новая функция интерполяции bezierQuadratic.

Количество скачиваний dlib в реестре DUB достигло 1400 в месяц – рекордный показатель за все время существования проекта!

Подготовка к релизу Dagon 0.16

Новая версия Dagon планируется к выпуску совсем скоро – на днях внес ряд багфиксов и улучшений в физику Newton (в частности, исправлен прыжок контроллера персонажа на плоских поверхностях), а также добавил встроенную функцию создания скриншотов – Application.takeScreenshot.

Обновления

bindbc-wgpu 0.19.0, соответствующий wgpu-native 0.19.x. Каких-то существенных изменений в этой версии нет, кроме того, что структуры и функции опроса статистики конвейера вынесены в платформоспецифичную часть API (bindbc.wgpu.types2).

Также рад сообщить, что bindbc-wgpu теперь успешно собирается и работает под Linux – как и демо-приложение с моделью Cerberus. Тестировал на Mint 21.2 с wgpu-native 0.19.1.1.

Работа над новым релизом Dagon продолжается: на днях внес множество исправлений, связанных с поддержкой Linux. В частности, теперь расширения dagon:newton и dagon:imgui загружают библиотеки из папки проекта, если не находят их в /usr/lib. При сборке под 64-битный Linux нужные библиотеки теперь копируются в папку с проектом – это должно упростить работу с расширениями, пользователи неоднократно жаловались на неинтуитивность подключения Newton. Также обновлен биндинг ImGui.

Итоги 2023 года

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

  • Можно считать, что я достиг своей цели – стать профессиональным разработчиком игр. На сегодняшний день солидную долю моих доходов составляют фрилансерские проекты по разработке рекламных мини-игр и интерактивных баннеров. И, хотя все они пишутся на JavaScript, я стал чаще по работе использовать D для создания различных утилит, что не может не радовать.
  • Выпустил Dagon 0.15, в котором появилась поддержка Hald CLUT, 1D и 3D-текстуры, новые параметры постобработки для ручного управления эффектом Depth of Field, новые методы для текстур, обновлен биндинг Newton.
  • В репозиторий с примерами Dagon добавлены примеры создания ландшафта и работы с пользовательскими шейдерами.
  • Выпустил dlib 1.2.0 и 1.2.1. Добавлены функции гомотетии (масштабирования относительно точки), функции конвертации радианов в обороты и обратно, медианный фильтр, а также функция отрисовки прямоугольника. Спасибо Олегу Бахареву aka aquaratixc, Aaron Nédélec aka ReactiveAlkali, Razvan Nitu aka RazvanN7, Nick Treleaven aka ntrel за багфиксы и новые фичи.
  • Я наконец-то дописал вводную статью о PBR для начинающих, она доступна на сайте журнала “FPS”. Кстати в уходящем году журналу исполнилось уже 15 лет.
  • Начал изучать микроконтроллеры – Arduino и ESP32. Полным ходом иду к своей детской мечте – сделать своими руками радиоуправляемую машинку (как-нибудь напишу пост об этом проекте).

Ну и, конечно, не могу не назвать самые значимые для меня события в мире IT:

  • Выход Blender 4.0
  • Выход Godot 4
  • Смена ценовой политики Unity
  • Появление ChatGPT (хотя я не думаю, что нейросети в обозримом будущем кого-то заменят).

Обновления

Лето подошло к концу – это печально 🙁 Но при этом спешу порадовать читателей хорошими новостями: одновременно вышли новые версии dlib и Dagon.

dlib 1.2.1 – в основном, исправляющий релиз. Исправлены ошибки в dlib.filesystem.posix.common, предупреждения о депрекациях в dlib.core.thread и dlib.math.utils. В dlib.image добавлен медианный фильтр (модуль dlib.image.filters.median).

Dagon 0.15.0 – первый релиз за последний год. Добавлена поддержка 1D и 3D-текстур и новые методы для класса Texture (setFaceImage, setFaceBit, createFromImage3D). Шейдер цветовых таблиц (LUT) теперь поддерживает таблицы в формате Hald CLUT – нужно создать 3D-текстуру из изображения Hald CLUT и просто передать в game.postProcessingRenderer.colorLookupTable. Появились новые параметры шейдера глубины резкости (DoF) для ручного управления эффектом: dofManual, dofNearStart, dofNearDistance, dofFarStart, dofFarDistance. Загрузчик glTF теперь декодирует встроенные в JSON-файл текстуры. Менеджер событий обзавелся поддержкой относительного режима мыши (EventManager.setRelativeMouseMode) для более надежной реализации управления мышью в играх. Соответственно, компонент управления FirstPersonViewComponent теперь использует по умолчанию относительный режим.
Обновился биндинг Newton Dynamics до свежей версии библиотеки: функция NewtonUserJointSetRowSpringDamperAcceleration удалена в пользу NewtonUserJointSetRowMassDependentSpringDamperAcceleration и NewtonUserJointSetRowMassIndependentSpringDamperAcceleration. Добавлен новый метод для ньютоновских твердых тел: NewtonRigidBody.localPointVelocity.

Реализация движка Sacrifice на D

Недавно узнал, что Dagon использовался для разработки свободной реализации игры Sacrifice (2000 г.) на D – sacengine. Только сейчас дошли руки собрать и протестировать. Сама игра мне не знакома, но проект очень интересный. Dagon используется в нем в качестве графического бэкенда. Как следствие, картинка sacengine имеет ряд существенных улучшений по сравнению с оригиналом – поддерживаются мягкие тени, SSAO, постэффект свечения, антиалиасинг.

Я рекомендую собирать игру компилятором LDC и обязательно в релизном режиме, в противном случае она будет заметно притормаживать:

dub build --compiler=ldc2 --build=release-nobounds

Для запуска нужно скопировать скомпилированный 3d.exe в папку с игрой, также нужны библиотеки freetype.dll, libmpg123-0.dll, OpenAl32.dll, SDL2.dll.

Исходники движка доступны под GNU GPL v3.