Об этом проекте

Permafrost Engine — это игровой движок для стратегий в реальном времени (RTS) на OpenGL 3.3, написанный на C. Он создан для воспроизведения классических RTS с добавлением современных идей. Движок является основой для EVERGLORY — флагманской RTS, доступной в Steam с бесплатным демо, которое включает доступ ко всем игровым скриптам для изучения и модификации. Ключевые особенности: - Программируемый конвейер OpenGL 3.3 с современными расширениями, где они доступны - Собственный текстовый формат моделей для совместимости с инструментами и бинарный формат для быстрой загрузки во время выполнения - Скелетная анимация с GPU-скиннингом, пакетная передача данных поз анимации в текстуру для эффективного рендеринга большого числа анимированных сущностей - Модель отражения по Фонгу с материалами, картами теней от направленного света, bump/normal/parallax-маппингом - Сплаттинг текстур ландшафта, скайбокс, LOD-рендеринг мешей на основе расстояния, пакетный рендеринг с динамическими пакетами, потоковая передача на GPU на основе кольцевого буфера - Камеры RTS и FPS, тайловый рендеринг карты с собственным форматом файлов - Рендеринг воды с отражением, преломлением и эффектами мягких краёв - Программный синтез текстур с помощью Image Quilting, апериодическая тайлинговая укладка с помощью Wang Tiling - Внутренние компоненты движка, доступные для скриптов на Python 2.7, встроенная интерактивная консоль Python, система событий, UI-фреймворк на основе Nuklear - Эффективный raycasting, редактор карт/сцен, система паузы/возобновления, быстрый рендеринг огромных карт - Генерация графа/сетки навигации по карте, управление боидами (steering/flocking), иерархический поиск пути на основе потоковых полей, обработка динамических препятствий - Динамическое избегание столкновений с использованием Hybrid Reciprocal Velocity Obstacles и алгоритма ClearPath, движение юнитов в формациях, оптимальная перестройка формаций с помощью венгерского алгоритма - Поиск пути для разных типов/размеров юнитов с использованием навигационных слоёв, наземных/водных/воздушных юнитов, параллелизованные вычисления движения и поиска пути - GPU-симуляция толпы с вычислительными шейдерами, SIMD-ускоренная пространственная индексация растровой сетки, отслеживание принадлежности сущностей к динамическим пространственным областям в реальном времени - Аудиосистема с позиционными эффектами и несколькими глобальными каналами эффектов - Возможности RTS: миникарта, выбор юнитов, бой, туман войны, строительство базы, автоматизация рабочих/производства, сбор/транспортировка ресурсов, механики гарнизона/транспорта, дальний бой с физической симуляцией снарядов - Поддержка различных разрешений и соотношений сторон, настраиваемые параметры графики - Сериализация/десериализация всего состояния интерпретатора Python, сохранение/восстановление любой сессии движка, включая состояние, определённое в Python - Многопоточная симуляция и рендеринг в двухступенчатом конвейере, продвинутые отладочные визуализации и инструменты профилирования, лёгкий учёт памяти - Система файберов для лёгких задач, планируемых в пространстве пользователя, задачи Python на файберах для кооперативной многозадачности, форкинг без копирования с использованием семантики Copy-on-Write на уровне страниц - Кроссплатформенность (Linux и Windows), лаунчер для Windows с автоматическим сбором минидампов и логов при ошибках Зависимости включают SDL2, GLEW, Python 2.7, OpenAL Soft, mi-malloc, stb_image, khash и nuklear. Все они могут быть собраны из исходников и распространяться вместе с бинарным файлом игры. Инструкции по сборке приведены для Linux и Windows (с использованием mingw-w64 или MSYS2, также доступно решение для Visual Studio 2022). Движок лицензирован под GPLv3 со специальным исключением для линковки; альтернативное лицензирование может быть предоставлено в индивидуальном порядке. Разработка документируется серией видеодневников на YouTube, охватывающих такие темы, как сохранение интерпретатора Python, групповой поиск пути, туман войны, оптимизация производительности, файберы, строительство базы и многое другое. У проекта есть активное сообщество в Discord для обсуждений.