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

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

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

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

2222
11 комментариев

а какая база нужна, чтобы стать разработчиком сайтов?
чтобы сделать ДТФ работающим без проблем сайтом

8
Ответить

Хотя бы 9 классов общего образования

Ответить

А что насчет специально обученных юристов?

3
Ответить

Нужен просто опыт разработки игр на геймджемах.

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

Игровое программирование пытается соответствовать стандартам, даже принцип MVC в него пытаются пихать (каждый видит под этим принципом совершенно разное, главное выпендриться знакомой аббревеатурой). Но тем не менее, оно очень сильно отличается от веба. Это свой отдельный мир.

В моем представление веб - это древовидная структура программы, в которой есть фронтенд и есть куча сервисов, выводящих в него свои данные.

А игра - это огромное количество действующих отдельно друг от друга сущностей. Каждая из них сама решает, как ей поступать. Всë это должно как-то взаимодействовать (применяем архитектурные приколюхи из ООП), бегать в пространстве (алгебра, геометрия).

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

Это всë требуется для минимального кодинга игр, чтобы хоть что-то сделать и не слиться

Ответить

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

А уже потом можно глянуть видеоуроки, узнать из них полезные лайвхаки и левелапнуться

1
Ответить

Очень надёжная база нужна.

Ответить

Круто!

Ответить