Итоги 2024 года

Декабрь — время традиционного подведения итогов за прошедший год:

  • Выпустил три версии Dagon — 0.16, 0.17 и 0.18. В движке появились подповерхностное рассеивание, зонды локального освещения среды, тональная компрессия AgX, улучшен встроенный контроллер персонажа. Добавлена поддержка Wayland под Linux и поддержка экранов с высокой частотой обновления. Наконец-то появились меш-группы в загрузчике OBJ, что позволяет рендерить загруженную модель по частям с различными материалами и настройками. Появился новый встроенный шейдер звездного неба для ночных сцен и игр с космической тематикой. Доступны новые примеры: веревка на основе интегрирования Верле и механика игры от третьего лица.
  • Dagon, в числе других примечательных проектов на языке D, был упомянут на конференции FOSDEM 2024 в Брюсселе, а позже на эту тему вышло интервью со мной в онлайн-издании «Вечерняя Казань».
  • Выпустил dlib 1.3.0, где был проделан ряд улучшений в математическом пакете и добавлен новый модуль dlib.math.random. Спасибо Александру Перфильеву aka aperfilev за багфиксы и поддержку GNU D Compiler в dlib.math.sse. В марте этого года библиотека побила все рекорды по скачиваниям за все время существования проекта — 14000 в месяц!

Ну и, конечно, небольшой список интересных событий в мире D и графического СПО:

  • Функция тональной компрессии AgX стала новым де-факто стандартом индустрии;
  • В языке Slang добавлена поддержка WGSL, что позволяет с большим удобством писать шейдеры для WebGPU-приложений;
  • На FOSDEM ’24 был представлен ознакомительный доклад о языке D и его преимуществах для разработки приложений компьютерной графики.
  • Upd: у GitHub Copilot появился бесплатный ограниченный доступ!

Dagon 0.18

Выпустил новую версию Dagon. В загрузчике OBJ наконец-то появилась поддержка групп — если в файле присутствуют группы, они будут доступны через свойство OBJAsset.groupMesh, так что вы можете использовать их в качестве отдельных мешей вместо единого OBJAsset.mesh. Также загрузчик теперь не падает на моделях с N-гонами, а выводит предупреждение, что они не поддерживаются.

Добавлен новый экстра-шейдер dagon.extra.starfieldsky — ночное небо со звездами. Он представляет собой улучшенную версию шейдера звездного неба из демки с планетой. Основное нововведение — поддержка мерцания звезд.

Слегка переделан NewtonCharacterComponent: появился новый параметр радиуса. Логика теперь следующая: контроллер персонажа, как и прежде, представлен двумя Newton-сферами, но их радиус теперь задается пользователем, а не вычисляется автоматически. Сферы располагаются сверху и снизу от барицентра на расстояниях, которые вычисляются исходя из радиуса и роста персонажа.

В dagon:iqm появились новые свойства для анимированных моделей: Actor.looping (зацикленность), Actor.state.finished (индикатор завершения текущей анимации). Исправлен баг с фейсгруппами при загрузке некоторых IQM.

Пример игры от третьего лица

Добавил в папку примеров Dagon демонстрацию управления от третьего лица. Персонаж работает на Newton-контроллере, поэтому будет реагировать со всеми телами, которые вы создадите через Newton. Можно вращать камеру вокруг персонажа, двигаться (WASD) и прыгать (пробел). Пример также показывает, как загружать модели формата IQM и воспроизводить анимацию.

Скачать

Upd (15.08.24): улучшил управление и контроллер камеры — теперь все работает как в популярных играх: направление движения задается направлением камеры, которая управляется мышью, но, в то же время, игрок может стрейфиться — персонаж может ходить во все четыре стороны. Также добавил атаку (левая кнопка мыши) и звуки движений, в будущем планирую сделать врагов и простенькую демонстрационную боевую систему.

Интервью в «Вечерней Казани»

После упоминания на брюссельской конференции Dagon привлек внимание казанских журналистов: в «Вечерней Казани» сегодня вышло небольшое интервью, где я вкратце рассказал о проекте и о том, где и как он используется. По интересному совпадению, статью опубликовали в мой день рождения — получился своего рода подарок)

https://www.evening-kazan.ru/obshhestvo/articles/graficheskim-dvizhkom-kazanskogo-hudozhnika-polzuyutsya-geym-razrabotchiki-vsego-mira

Dagon на FOSDEM 2024

Классная новость: на прошедшей в феврале в Брюсселе FOSDEM ’24, европейской конференции по свободному программному обеспечению, американский профессор компьютерных наук Майк Шах (Mike Shah) представил доклад по языку D. В числе прочего, доклад включает информацию по Dagon. Отмечается, что это «существенный проект, который представляет интерес для графических разработчиков». Также упоминаются Dash, Hipreme Engine, BindBC и некоторые коммерческие игры, созданные с использованием D.

Ссылка на презентацию

Доклад представляет собой общее ознакомление с языком, обзор основных его особенностей и преимуществ в плане разработки СПО, а также некоторых библиотек и примечательных проектов, написанных на D.

Майк Шах — ученый в области компьютерной графики и визуализации, Ph.D. компьютерных наук, преподаватель Колледжа компьютерных наук Хури Северо-Восточного университета (Массачусетс).

Dagon 0.17 и другие обновления

Выпустил новую версию движка Dagon. Релиз включает поддержку экранов с высокой частотой обновления, поддержку Wayland под Linux, новые методы класса Application для управления окном приложения и методы класса Game для управления сценами. Шейдер HUD-объектов теперь поддерживает прозрачность материала. Исправлен баг с неправильным удалением из памяти сцен GLTF, также исправлен прыжок в контроллере персонажей Newton. Движок и расширения теперь используют самые свежие версии всех BindBC-биндингов.

bindbc-soloud обновлен до версии 0.2 — биндинг теперь поддерживает SoLoud 20200207.

Обновлена демка механики игры Electronvolt: добавил главное меню, опции, паузу и множество других мелких улучшений.

Обновления

Вышли небольшие обновления моих биндингов: bindbc-wgpu 0.19.1, bindbc-newton 0.3.1, bindbc-soloud 0.1.4. Все биндинги теперь используют bindbc-loader 1.1.

dlib достиг очередной рекордной отметки в 6000 скачиваний в месяц — это уже 4 место в каталоге DUB.

В Dagon добавлена базовая функциональность для переключения сцен: к выходу следующей версии опубликую пример, реализующий главное меню на ImGui с возможностью задавать настройки игры. Также Dagon теперь использует актуальные версии bindbc-opengl и bindbc-sdl.

Физика Верле

Попытка написать для Dagon физику веревки на основе интегрирования Верле увенчалась успехом! Добавил даже поддержку столкновений с боксами. В скором времени выложу эту демку в публичный доступ. Не исключено и добавление веревки в качестве встроенного объекта в движок.

Upd 06.03.2024: исходник демки можно скачать тут.

Обновления

Обновил битые ссылки на статьи по dlib в блоге LHS — у блога сменился домен на blog.lhs.su. Также решил постепенно выложить здесь все свои гостевые статьи оттуда.

Обновил сайты Dagon и dlib: https://gecko0307.github.io/dagon/, https://gecko0307.github.io/dlib/. Также все примеры Dagon теперь используют версию 0.16.0.

dlib бьет очередной рекорд по скачиваниям — 3400 в месяц, что выводит библиотеку на 6 место в каталоге DUB с рейтингом 5.0.

В Dagon появилась функция для управления кадровой частотой — Cadencer.setFrequency, а также хелперы для автоматической адаптации кадровой частоты к частоте обновления экрана: Application.displayRefreshRate, Application.frequencyToRefreshRate.

Dagon 0.16.0

Выпустил новую версию Dagon. Главная особенность релиза — поддержка подповерхностного рассеивания (subsurface scattering) методом, аналогичным тому, который используется в Disney BRDF. Добавлено новое свойство материала subsurfaceScattering — это значение от 0 до 1, обозначающее долю излучения, которое рассеивается в толще материала: чем больше это значение, тем больше света проникает вглубь и меньше отражается от поверхности.

Также появилась поддержка зондов локального освещения среды (environment light probes). Это отложенный эффект наподобие точечных источников света, но для освещения среды: параллелепипед, внутри которого все объекты используют индивидуально заданную карту окружения вместо глобальной. Это позволяет, например, отделить освещение интерьера комнаты от уличного.

Добавлена ноддержка тональной компрессии AgX — и, соответственно, новые константы Tonemapper.AgX_Base и Tonemapper.AgX_Punchy.

Добавлена функция снятия скриншотов игры — метод Application.takeScreenshot.

Исправлен баг с некорректной передачей параметров в шейдер цветокоррекции (LUT). Исправлен прыжок в контроллере персонажа в расширении dagon:newton — прыжок плохо срабатывал на плоских поверхностях.

Dagon теперь использует dlib 1.3.0. Расширение dagon:imgui теперь использует bindbc-imgui 0.7.0.