Стриминг уровней

Пост на правах идеи – реализации пока нет даже в черновом виде, поэтому пока сложно сказать, появится ли эта фича в следующей версии Dagon.

Стриминг уровней – это способ реализации игр с большим миром, который не может быть загружен в память целиком. Система стриминга загружает и выгружает фрагменты игрового мира по мере того, как игрок путешествует по нему.

Я планирую написать систему, предназначенную для перемещений преимущественно на плоскости – как правило, по поверхности планеты. Мир разбивается на 2D сетку с каким-то заданным шагом – например, 100×100 метров. Каждая ячейка сетки представляет собой отдельный ресурс, который можно создать и загрузить независимо от остальных. По умолчанию игра загружает только “домашнюю” ячейку, в которой находится игрок в начале пути, а также 8 соседних ячеек. Таким образом, видимыми и интерактивными для игрока одновременно являются 9 ячеек. В зависимости от размера ячейки и особенностей игры этот параметр, скорее всего, можно будет настраивать – также, возможно, для далеких ячеек можно будет отображать LOD’ы. Когда игрок перемещается в соседнюю ячейку, игра подгружает необходимые отсутствующие в памяти ячейки, если они существуют, и выгружает ячейки, ставшие слишком далекими. Загрузка будет происходить в фоновом потоке, по возможности без прерывания геймплея.

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

Хобби-проекты как интеллектуальный капитал

Задумываясь над тем, какая польза от такого неординарного увлечения, как графическая разработка, я пришел к следующему выводу. Почти все, что я написал в своей жизни “для души”, так или иначе оправдало вложенные усилия – не всегда напрямую и не всегда в материальном выражении, но тем не менее: я получил опыт, который профессионально пригождается буквально каждый день, в каждом проекте. Например:

  • Что возможно и что невозможно. Область применимости машинной логики, вычислений и алгоритмов. Что можно решить за конечное время, а что нет. Какие задачи можно решить точно, какие – приближенно. Где можно положиться на строгую математику, а где лучше работает эвристика.
  • Какие математические модели оптимальны для изображения на компьютере тех или иных явлений реального мира. Под изображением я имею в виду не только реалистичное 3D, но и абстрактную графику, которая используется в анимационном дизайне – вплоть до того, как эффективнее всего рисовать геометрические фигуры. Как лучше всего хранить ту или иную информацию, какая точность чисел для нее оптимальна. Каков минимум параметров, которыми можно выразить ту или иную моделируемую сущность.
  • Как перевести концепцию, выраженную на человеческом языке, на машинный или математический уровень абстракции. Например, говоря о движении, люди любят оперировать такими неформальными понятиями, как “плавно”, “мягко”, “летает”, “парит”, “выскакивает” и т. д. Эти слова не имеют однозначного определения на языке математики, поэтому их приходится трактовать интуитивно, с пониманием контекста и общей картины, заранее воображая в голове, как должен выглядеть результат – и уже исходя из этого представления выводить матмодель: функции движения, изинги, тайминги и т.д.
  • Сколько времени требуется на реализацию тех или иных моделей, механик, алгоритмов и т.д. Какие существуют готовые решения для стандартных задач, и как выбрать оптимальное из нескольких вариантов.

С Новым годом!

Поздравляю всех читателей блога с наступившим 2020 годом! Желаю творческих успехов всем авторам и долгих лет жизни всем интересным проектам!

В качестве небольшого подарка – обновленная версия демки dagon-sandbox, которую теперь можно скомпилировать в “зимнем” режиме (version = Winter)

Переезд блога

Спустя 7 лет со дня открытия блога https://dlanggamedev.blogspot.com я наконец-то переезжаю на коммерческий хостинг и личный WordPress. Я только начал изучать эту CMS, но первые впечатления самые положительные: удобный редактор, админка, огромный выбор готовых тем, плагинов и виджетов. Абсолютно все можно настроить и кастомизировать. Еще один немаловажный плюс – нормальная работа WP-сайтов на мобильных платформах.

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

Инкрементальная сборка в LDC

Любопытная статья по компилятору LDC от Johan Engelen – подробно разбирается инкрементальная сборка и кэширование объектных файлов в LDC 1.1.0.

https://johanengelen.github.io/ldc/2016/09/17/LDC-object-file-caching.html