Какая база нужна чтобы стать разработчиком игр?
Привет! Меня зовут Роман Сакутин и сейчас расскажу о том, какой фундамент нужен чтобы успешно вкатиться в GameDev по направлению программирование.
Несколько вводных:
- Рассматриваем человека без технического образования и специальных навыков;
- Цель работа в студии разработки игр как обычный геймплейный разработчик;
- Здесь обсуждается именно "База" общего характера. То что нужно и Unreal и Unity и любому другому разработчику.
Золотая триада
В базу я вношу такую простую триаду: Геометрия, Computer Science и Рендеринг. О каждой грани этого наконечника копья мы здесь и поговорим подробно.
К этому всему ещё обязательно нужна компетенция в конкретном стеке, например Unity + C#. Но это уже отдельный разговор в зависимости от вашего выбора. Если интересно с вас лайк а с меня отдельная статья про конкретную технологию.
Геометрия
Я к сожалению еле-еле доучился до 8-го класса в школе что не помешало мне работать профессиональным программистом. Я так называемый самоучка.
Математическую базу я получал уже отдельно с репетитором, что не помешало мне почти 10 лет отработать разработчиком в том числе на компанию из США.
Список выше очень ультимативный и закопаться в нём можно очень надолго. Вам в работе в основном пригодится часть линейной алгебры и геометрии.
Вот что проходим и практикуем точно:
- Вектора, матрицы и системы координат. Часто для удобства приходится перемещаться в расчётах из декартововой системы в радиальную например.
- Углы, градусы и радианы. Хоть и все движки умеют спокойно поворачивать объекты но обычно это работает не так, как вы ожидали.
- Гиперкомплексные числа. Мы часто используем кватернионы, они сильно функциональней и удобней при сложных расчётах чем углы Эйлера. Эта тема наверное главный стопер. И честно говорят я редко встречаю даже людей Middle уровня которые свободно обращаются с кватернионами.
Если вы можете взять два объекта в пространстве и спокойно на листке посчитать: расстояние между ними, угол между ними, угол отражения если один столкнётся с другим, найти направление от одного к другому то вы уже неплохи.
А если ещё можете повернуть один вектор в сторону другого или спроецировать трёхмерное облако точек на плоскость - то для Junior уровня вы уже очень горячи.
Умение решать систему линейных уравнений и навык работы с интегралами тоже полезен.
Computer Science
Здесь подразумевается общий уровень владения алгоритмизацией и разными штуками из информатики. С чем точно плотно придётся работать:
- Алгоритмы и оценка их сложности (асимптотическая сложность). Сортировки, поиски и можно даже немного коснуться динамического программирования.
- Структуры данных: списки, очередь, стеки, деревья (взвешенные и не очень).
- Графы и умения работать с ними: алгоритмы поисков и принципы построения. Тот же поиск пути - это в базе поиск по графу, тот же A* - это обычный поиск в графе с эвристической функцией (предсказание что путь получше чем другие).
- Языки и компиляторы - общую структуру компьютера отдельно изучать смысла не много, а вот как работают языки программирования и во что превращаются очень полезно. Все современные движки прогоняют ваш код через несколько этапов трансляции. Например у Unity абсолютно нормальное преобразование C# -> C++ -> JavaScript и проблема может выскочить на любом из них.
- Кодировки - и просто про кодирование текста в условном UTF-16 и в целом про биты.
- Базы данных - данные будут поступать от всюду. Понимание реляционных баз данных (MySQL например) и решений по типу MongoDB. Очень много времени вы будете гонять данные через какой-нибудь PlayFab.
- Сетевой обмен - даже игры однопользовательские вы будете работать с внешними ресурсами: рекламные платформы, аналитика, облачные сохранения. Понимание топологии сетей, сокетов и самое главное HTTP\S протокола must have. Почти все сервисы будут работать по HTTP протоколу, даже если есть готовая интеграция ошибки вы будете искать в запросах и ответах.
Рендеринг
Здесь у нас встречается математика и Computer Science, тут компьютер превращает ваши математические объекты в картинку для пользователя. Есть хорошая книга "Математические основы компьютерной графики" которая даст базовый стек по алгоритмам.
Что тут вам стоит изучить:
- Как у нас набор вершим и текстур превращается в картинку для пользователя;
- Как эта картинка выводится;
- Какие бывают шейдеры и как они работают;
- UV развёртки и как накладываются текстуры, какие текстуры бывают;
- Как просчитываются тени для объектов;
- Алгоритмы освещения в том числе на основе RayTracing'а;
- Абстракция "камера" и как происходит отсечение вершин и Occlussion Culling.
- Алгоритмы работы эффектов пост-обработки: DOF, Motion Blur, Ambient Occlusion и т.д
Движки рендеринга вам писать не придётся, а вот взаимодействия с отдельными вещами - да. И хоть добавить источник света в движках по типу Unreal Engine проще простого, но в сложных сценах это скорей всего развалится и полезут различные артефакты а имея теоретическую базу вы быстро найдёте откуда лезут проблемы.
Это всё?
К каждому разделу можно дать ещё с сотню пунктов но если мы говорим про Junior уровень то в общем-то да. Запредельных требований к вам не будет, хороший Senior это всё знает на отлично, некоторые мидлы уже подзабыли некоторые вещи, а вот от Junior требует хотя бы представление об этом всё.
Надеюсь ничего не забыл друзья, если что дополняйте в комментариях.
Также напомню что на выходных проведу бесплатный двух дневный тренинг для новичков где мы это всё и ряд других тем пройдём в интерактивном формате. Приходите, будет интересно - записаться