В 2024 году мир разработки компьютерных игр видит конкретные сдвиги, определяющие тренды отрасли. Unreal Engine и Unity 3D остаются ведущими игровыми движками среди разработчиков. По данным GitHub, языки программирования C# и Python находятся в топе популярных языков среди игровых разработчиков, при этом C++ остается неотъемлемым для работы с движками AAA-класса.
В области искусственного интеллекта, растущий интерес к машинному обучению открывает новые горизонты для интеллектуального геймплея и поведения NPC. Технологии виртуальной и дополненной реальности обещают изменить восприятие игрового мира.
В это статье мы приведем подробный roadmap для разработчиков игр, который поможет ориентироваться в современной индустрии. Какого-то строго порядка в изучении нет. Вы можете, например, начать с изучения Unity, а потом уже осваивать C#, математику, физику и другие темы, необходимые для GameDev. В качестве основы для статьи, взята схема с сайта https://roadmap.sh/game-developer.
Математика
- Линейная алгебра: векторы, матрицы, линейные преобразования, системы линейных уравнений.
- Геометрия: Евклидова и аффинная геометрия, теорема Пифагора, углы и трансформации.
- Кривые: Безье, сплайны, кривые Эрмита, интерполяция.
- Проекции: перспективная и ортографическая проекция, преобразования координат.
- Ориентация: кватернионы, углы Эйлера, преобразование между разными системами координат.
Физика игр
Вот основные аспекты физики в играх:
- Динамика: Изучение центра масс, момента инерции, ускорения, силы, а также линейной и угловой скорости важно для корректного моделирования движения объектов.
- Детекция столкновений: Определяет, когда и как объекты в игре соприкасаются или сталкиваются, что критически важно для реалистичного поведения объектов и игровой механики.
- Контрольное распределение столкновений (CCD): Метод, используемый для предотвращения проблем, связанных со столкновениями при высоких скоростях, обеспечивая более гладкие и точные взаимодействия.
Изучение игрового движка
Вот краткий обзор популярных игровых движков:
- Unreal Engine: Широко используется в AAA-играх и проектах с высококачественной графикой. Обучение может быть сложным из-за продвинутых возможностей и сложной архитектуры.
- Unity: Популярен среди инди-разработчиков и для мобильных игр. Относительно легкий в изучении, благодаря обширной документации и поддерживаемому сообществу.
- Godot: Хороший выбор для небольших проектов и начинающих разработчиков. Отличается относительной простотой обучения и гибкостью, подходит для различных типов игр.
- CryEngine: Часто используется для создания игр с впечатляющей визуальной графикой и реалистичной физикой. Обладает высокой степенью детализации, но требует более глубокого понимания технических аспектов, что делает кривую обучения крутой.
- GameMaker Studio: Идеален для 2D-игр и часто используется инди-разработчиками. Отличается удобством для начинающих благодаря простому визуальному интерфейсу и наличию встроенного языка программирования.
- RPG Maker: Специализированный движок для создания ролевых игр (RPG). Предлагает интуитивно понятные инструменты для начинающих, позволяя легко создавать игры без глубоких знаний в программировании.
Изучение языка программирования
Вот основные языки программирования, используемые в разработке игр:
- C/C++: Широко используются в AAA-играх для создания высокопроизводительного кода. Изучение может быть сложным из-за низкоуровневых особенностей и сложности управления памятью.
- C#: Часто используется в играх на Unity. Является относительно простым для изучения благодаря своей четкой структуре и обширной документации.
- Rust: Применяется в некоторых новых игровых движках и проектах, требующих высокой производительности и безопасности памяти. Изучение Rust может быть сложным из-за его уникальной системы управления памятью.
- Python: Часто используется для создания скриптов и инструментов в игровых движках, таких как Godot и Unreal Engine, благодаря своему простому синтаксису и гибкости. Легок для начинающих.
- JavaScript: Широко используется для разработки веб-игр и мобильных игр, особенно в связке с HTML5 и WebGL. JavaScript относительно легок для изучения, обладает гибким синтаксисом и хорошо подходит для начинающих разработчиков. Также популярен в разработке легких и доступных игровых приложений.
- Lua: Часто встречается в качестве встраиваемого языка скриптов для игровых движков, таких как Unity и Unreal Engine, а также в мобильных и инди-играх. Lua выделяется своей простотой, легкостью встраивания и быстротой выполнения, делая его идеальным для создания настраиваемых игровых механик и поведения.
Компьютерная графика
- Трассировка лучей (Ray Tracing): Предлагает высокий уровень реализма за счет моделирования пути света и его взаимодействия с объектами. Хотя требует значительных вычислительных ресурсов, она обеспечивает реалистичное освещение, тени и отражения.
- Растеризация: Преобразует векторную графику в пиксели для отображения на экране. Это эффективный метод для быстрого рендеринга, широко используемый в играх за его производительность.
- Графический конвейер: Серия шагов обработки, через которые проходят 3D модели для преобразования их в двумерные изображения на экране. Включает в себя такие этапы, как вершинные и фрагментные шейдеры, затенение и отсечение.
- Шейдеры: Программы, работающие на графическом процессоре, используются для определения визуального стиля и внешнего вида объектов в игре. Включают в себя вершинные, пиксельные (или фрагментные) и геометрические шейдеры.
- Освещение и тени: Важные аспекты для создания глубины и атмосферы в игровом мире. Включают различные техники, такие как теневые карты и техники освещения, например, фоновое освещение и точечное освещение.
- Визуализация и окклюзия: Процессы, используемые для определения видимости объектов и частей сцены. Окклюзия помогает определять, какие объекты должны быть скрыты другими объектами, улучшая реалистичность и производительность.
- Отображение теней и освещения: Техники для достижения реалистичного взаимодействия света с объектами и поверхностями в игре, включая теневое отображение и бликовое освещение.
API графики
- DirectX: Разработанный Microsoft, особенно популярен в играх для Windows и Xbox. Он предлагает мощные инструменты для рендеринга 2D и 3D графики и обработки аудио и видео.
- OpenGL: Открытый стандарт для кроссплатформенной разработки, который поддерживается многими операционными системами, включая Windows, macOS и Linux. Используется для рендеринга сложной 2D и 3D графики.
- WebGL: Расширение JavaScript API, позволяющее рендерить 3D графику в браузерах без использования дополнительных плагинов. Это делает его идеальным для разработки веб-игр и интерактивных графических приложений.
- Vulkan: Современный графический и вычислительный API, обеспечивающий высокую производительность и более эффективное взаимодействие с аппаратным обеспечением. Разработан как преемник OpenGL с улучшенным контролем над графическими ресурсами.
- SPIR-V: Является промежуточным языком для Vulkan и OpenCL. Это стандарт для описания шейдеров, который позволяет более гибко управлять графическими и вычислительными шейдерами.
- OpenGL ES: Версия OpenGL, оптимизированная для мобильных устройств и встроенных систем. Она предлагает упрощенный набор функций для облегчения разработки на устройствах с ограниченными ресурсами.
- Metal: Разработанный Apple, это API для iOS и macOS, обеспечивающий оптимизированный доступ к графическим возможностям устройств Apple. Он позволяет разработчикам максимально использовать аппаратные ресурсы на устройствах Apple.
ИИ в играх
- Классификатор наивного байеса: Простой, но эффективный алгоритм для прогнозирования и классификации, основанный на вероятностных отношениях между данными.
- Обучение с подкреплением: Фокусируется на обучении ИИ посредством вознаграждений и штрафов, стимулируя нахождение оптимальных стратегий поведения.
- Поведенческие деревья: Представляют собой модели, где решения принимаются на основе различных условий и состояний, используются для моделирования сложного поведения NPC.
- Фаззи-логика: Применяется для создания более гибких и реалистичных систем принятия решений, учитывая неопределенности и нечеткость в данных.
- Марковские системы: Используются для предсказания вероятности различных возможных состояний, основываясь на текущем состоянии, подходят для моделирования случайных и предсказуемых шаблонов поведения.
- Ориентированное на цели поведение: Фокусируется на достижении конкретных целей, где ИИ анализирует окружающую среду и выбирает стратегии для достижения заданных задач.