Какая база нужна чтобы стать разработчиком игр?

Привет! Меня зовут Роман Сакутин и сейчас расскажу о том, какой фундамент нужен чтобы успешно вкатиться в 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 требует хотя бы представление об этом всё.

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

Также напомню что на выходных проведу бесплатный двух дневный тренинг для новичков где мы это всё и ряд других тем пройдём в интерактивном формате. Приходите, будет интересно - записаться

1.9K1.9K показов
3.8K3.8K открытий
11 комментариев