Сразу скажу, что я разработчик веб-приложений, а не игр, однако, я полагаю, я прочитал достаточно специальной литературы по теме и попробовал достаточно упражнений, чтобы перечислить то, что вам понадобится. С точки зрения, где "игра" — это хотя бы
Touhou,
Braid и
Highfleet, в разработке которых участвовали "студии" размером в одного программиста. Если вы согласны делать мини-игры на флеше или визуальные новеллы, то можно не вдаваться в эти подробности, а уже сразу начинать и всё.
Учтите, что два списка ниже — это не то, что вам нужно для того, чтобы начать. Начать можно откуда угодно. Это просто то, что вы будете использовать в работе каждый день.
Фундаментальные знания:
- Линейная алгебра и геометрия (матрицы, вектора, СЛАУ, координатные системы). Можно жалеть об этом сколько угодно, но в геймдеве вы даже прыжок не сможете запрограммировать в платформере, не понимая основы линейной алгебры.
- Компьютерные науки (алгоритмы и структуры данных, понятие алгоритмической сложности, языки программирования). Это фундамент для любого разработчика в любой области.
- Инженерия ПО (рефакторинг, ООП, автоматическое тестирование, архитектура приложений, паттерны проектирования, вони, принципы) Компьютерные игры это программное обеспечение, и очень сложное при этом. Конечно же, вам понадобится знать общие принципы разработки сложного ПО.
- Английский язык (чтение технической литературы, элементарные навыки переписки) Вам, возможно, не понадобится говорить по-английски, но вот читать тонны англоязычной документации вам придётся. Кроме того, подавляющее большинство игр выходит на английском языке, и если вы его не понимаете, то лишаете себя большинства референсов. Вряд ли вы собираетесь работать на китайский рынок, а российский достаточно мал и специализирован.
- Аппаратное обеспечение компьютера (конвейер процессора, архитектура компьютеров, организация памяти, суперскалярность, аппаратура мобильных устройств) Вы можете избежать углубления в эти подробности в других областях разработки ПО. Вы не можете избежать этого в разработке компьютерных игр, если вы хотите нормальную производительность вашей игры.
- Операционные системы и компьютерные сети (виртуализация, параллельность, управление памятью, файловые системы, драйвера, API, сетевой стек…) То же самое, что с аппаратным обеспечением — если вы делаете экшен и хотите стабильные 144 кадра в секунду — вам придётся узнать, как работают операционные системы.
- Математическая статистика (вероятности событий, распределения, перцентили, закон больших чисел). В серьёзной разработке, когда вы захотите заняться анализом событий, которые у вас происходят в игре, или, скажем, балансом характеристик.
Специальные знания:
- Игровой ИИ (принятие решений, компьютерное зрение, организация поведения акторов) Не вся сфера ИИ, а только те области, которые нужны для организации геймплея, если они вообще нужны. Кроме того, у игрового ИИ есть свои уникальные требования к поведению.
- Игровая физика (симуляция кинематики, динамика жидкостей, симуляция оптики) Не вся полностью механика, хотя чем больше вы знаете, тем лучше, а только те области, которые нужны для симуляции конкретно вашего геймплея.
- Анимация (скелетная анимация, покадровая анимация, интерполяция поз, спрайты, lipsync). Вам не обязательно уметь анимировать самому, но вам нужно понимать, как анимации организовываются в конечной игре, как их запрограммировать.
- 3D-моделирование (понятие полигональной графики, low-poly vs high-poly, риггинг, анимирование, текстурирование, настройка коллизий, специальные эффекты типа тканей и шерсти). Вам не обязательно уметь создавать модели. Вам обязательно знать, как эти модели вставляются в игру. А вставляются они по частям.
- Игровые движки (понятие движка как такового, организация компонентов, API). Даже если вы не будете использовать готовый, вы в процессе разработки фактически, соберёте свой.
- Геймдизайн (игровые механики, сторителлинг, баланс, геймплей). То, что превращает soft-realtime симуляцию, собственно, в игру.
- Компьютерная графика (шейдеры, конвейер рендера, raytracing, разбиения пространства). По большому счёту, 90% времени вы будете заниматься компьютерной графикой при разработке игры.
- Звуковой дизайн (динамические контекстно-зависимые саундтреки, симуляция акустики, психология звука, lipsync). Без озвучки ваша игра не нужна.
Рекомендую почитать:
По графике, к сожалению, литературу не дам, эта область, во-первых, для меня была всегда самой неинтересной, а во-вторых, пока автор пишет книгу, графика уже ушла далеко вперёд. Ищите материалы в Сети.
Готовые движки:
Ссылки на очевидные движки типа Unity, Unreal Engine и CryEngine я не даю, потому что после 2022 года в России ставить себя в зависимость от фирмы, расположенной в США — опасное безумие, а китайских/корейских движков я не знаю, да и знать там надо отнюдь не английский.
Подытожу ответом на ваш вопрос "
как это изучить при создании игры". Изучать разработку любого ПО нужно на практике. Возьмите, например, из документации движка Godot
первый туториал про создание простейшей 2D игры и пройдите его от начала до конца. Посмотрите, что вы не поняли, найдите литературу на эту тему и изучите её. В ней будут упражнения —
выполните их.
Вообще, если вы вообще в разработке программного обеспечения полный ноль, рекомендую попробовать сервисы, которые обучают программированию в игровой форме, например,
WarriorJS или
CodeCombat. Это не программирование игр как таковых, но это обучение какому-никакому программированию, в виде собственно игры. Это будет держать вас в атмосфере компьютерных игр и в целом, вы привыкнете к скриптингу искусственного интеллекта в качестве бонуса.
Каждый заголовок, который я выше перечислил — это название области знаний, которую вы просто вводите в строку поиска, получаете список материалов и изучаете их последовательно. Выполняете все упражнения. Постепенно вы освоите достаточное количество инструментов, чтобы у вас в голове "щёлкнуло" и вы сообразили, как из них составить вашу первую по-настоящему свою игру. С этого момента обучение заканчивается и начинается отработка навыков. Удачи.