Итоги 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 (хотя я не думаю, что нейросети в обозримом будущем кого-то заменят).

Освещение интерьера в Dagon

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

Некорректные отражения на стенах внутри комнаты + в целом, слишком яркий интерьер
Световой зонд заменяет освещение среды в комнате на более тусклое

По сути, это простейшая аппроксимация GI. Зонд может освещать интерьер однородным излучением заданного цвета, либо использовать собственную HDR-карту окружения. Единственная нерешенная на данный момент проблема – видимая граница двух сред освещения в тех местах, где отсутствует геометрия здания (т.е. в дверных проемах). Поэтому при использовании данной фичи необходимо как-то маскировать эту границу – например, сделать в этом месте порог или переход текстуры пола.

Новые примеры

Добавил в коллекцию примеров Dagon свою старую демку с планетой – она показывает, как создавать пользовательские шейдеры. Каждый объект сцены использует специализированный шейдер: звездное небо, газовый гигант с эффектом рассеивания света в атмосфере, кольца с тенью.

Также добавлен пример создания ландшафта и многослойного материала для него.

Subsurface Scattering в Dagon

В Dagon наконец-то появилась качественная аппроксимация подповерхностного рассеивания – фича, которую я в том или ином виде пытаюсь реализовать уже не первый год. Идею позаимствовал из Disney BRDF.

(далее…)

Inform 7

Исследуя свободные игровые движки, случайно наткнулся на настоящий бриллиант – платформу для создания текстовых квестов Inform 7. Это штука, не имеющая аналогов – декларативный язык программирования, использующий естественный синтаксис английского (NLP-система). То есть, программы на нем пишутся в форме обычного текста, состоящего из определений и утверждений. Система позволяет вводить любые новые понятия и абстракции, сущности и их свойства. Получившееся в результате семантическое содержание и составляет логику игры, которая затем транслируется в стандартный код для Z-машины. Таким образом, исходник квеста представляет собой своего рода книгу, которая описывает мир игры, ее сценарий, возможности игрока, отношения и взаимодействия между игровыми сущностями и т.д.

До этого я еще не встречал NLP-системы с такой “человеческой” онтологией, ведь обычно взаимодействие с компьютером строится на математико-логическом аппарате, на классах, структурах и алгоритмах, а не на бытовом способе мыслить и разговаривать. В Inform 7 нет никаких структур и даже типов данных – есть лишь языковые инструменты, позволяющие вам выстроить ваш собственный понятийный аппарат, на основе которого будет работать игра.

Жанр классических текстовых квестов, уходящий корнями в культовый Zork, обычно предполагает перемещение игрока по карте воображаемого мира, как в ролевых играх – Inform включает в себя стандартные понятия для описания карты и соответствующий рантайм с готовым интерпретатором команд перемещения. Вы описываете мир как совокупность абстрактных “комнат”, указывая их расположение относительно друг друга (“К востоку от дома расположено озеро”). Потенциально так можно создать все, что угодно – хватило бы фантазии.

Например, впервые сев за Inform, я залип на целый вечер и написал набор определений, описывающий автомат с конфетами и напитками – игрок имеет некоторое количество денег и может делать покупки в автомате. Что такое “деньги”, и что означает “покупать” – это тоже определяет программист. Для этого приходится подключать какие-то особые мозговые доли: Inform заставляет вас думать по-новому, с изрядной долей креативности! Я бы назвал эту платформу философской машиной – в ней нужно мыслить как философ от инженерии, выстраивать в голове сложные абстракции, придумывать свои собственные системы категорий. И мне почему-то кажется, что на одних только текстовых квестах свет клином не сошелся – Inform потенциально можно использовать для каких-то инновационных способов взаимодействия с информацией, в качестве компонента базы знаний, как мощный инструмент прототипирования и описания различных моделей. Обязательно продолжу экспериментировать.

https://ganelson.github.io/inform-website/