Всем привет. Это мой первый пост в клубе, так что строго не судите. Хочу рассказать про свой опыт перехода из вэба в геймдев. Все точно субъективно и часто обоснованно только моим текущим опытом и знаниями. Весь путь перехода занял у меня 9 месяцев.
Intro
Несколько лет назад сидя на работе у меня сломался один из барьер в голове и пришло осознание, что можно купить не только сладости в магазине, но еще и Playstation. До этого момента, такая покупка была из ряда того, чего у тебя нет, но вот есть у условного Пети, к которому ты можешь сходить в гости и там поиграть. От осознания до покупки прошло меньше часа и вечером привезли родимую вместе с God of War. Сказать, что я кайфанул, это ничего не сказать.
За следующие пол года были пройдены еще 5-6 AAA игр. (AAA значит блокбастеры с огромными бюджетами)
И тогда то и было посеяно зерно, что кто-то точно так же как и ты ходит на работу, открывает условную Jira, смотрит свои таски, делает их на протяжение 4-5 лет и на выходе получается такие проекты. Появилось желание узнать как оно все под капотом устроено и как бы сделать так, чтобы это стало моей жизнью. Но не хватало внутренних сил решиться начать что-то делать для реализации. Сам я из Минска, и после небезызвестный событий в Беларуси, мы с девушкой решили поехать в Киев на пару недель. В Киеве, поняли, что не хотим там жить и тогда нам очень повезло, что появились визы для айти специалистов в Польшу, чем и воспользовались. Все эти события привели к переосмыслению того, чем бы мне хотелось заниматься в жизни, и я понял, что это точно не веб, тогда то и было принято решение, что надо попробовать себя в геймдеве, тем более, что где если не Польше)
План
С самого начала решил, что не хочу заниматься Unity, поэтому выбор языка привел меня к C++. И тут стало прямо больно. С порога.
Учить C++ после JS занятие не из приятных, но приходит осознание, как работают вещи под капотом, самым неожиданным из таких откровений стало замыкание, когда учил про лямбды и пришлось прямо ручками прописывать, какие же из переменных из внешнего блока, будут видны внутри функции.
На этом этапе сильно помог learncpp Очень крутой ресурс для начинающих, где все расписано, пережевано и подается маленько ложечкой.
Работа фронта не подразумевала хороших знаний алгоритмов и структур данных, достаточно было начальных знаний и здравого смысла, чтобы хорошо делать свою работу. Работа в геймдеве, как мне тогда казалось, предполагает более глубоких знаний основ computer science, поэтому я записался на курсы Яндекс.Практикума по алгоритмам. Не буду тут расписывать, про достоинства и недостатки этих курсов, скажу лишь, что мне они понравились и было весело. Нас начинало очень много, но до финала дошли единицы. Как мне кажется многие ожидали, что их под ручку проведут по всем темам, а там их ждала дорога, которую тебе надо самому пройти, тебе лишь указывают правильное направление. Это и привело к большому число отвалившихся ребят. Знаний по С++ хватило, для выбора этого языка для прохождения курсов, но лучших другом стал cppreference.com
После завершения алгоритмов захотелось закрепить знания по С++. Решение задач на курсах показало, что можно читать про язык сколько хочешь, но надо решать очень много задач, чтобы ты понимал, что когда использовать и не тратил время при работе на вспоминание семантики. Для этого записался на Coursera на курс по С++ с поясами. И прошел первые три них (от белого до красного). Это дало уверенность, которой очень сильно не хватало.
Ну и вот наконец-то я и подошел к мякотке, к тому ради чего все и затевалось -- к написанию игр. Прочитав какие существуют профессии в геймдеве, понял, что хочется разбираться в графике. Главным ресурсом на этом шаге стал learnopengl.com. Так же сильно помогла вот эта статья.
Сделав примитивный проект, с рендерингом разных геометрических фигур и возможностью передвижения между ними, я начал рассылать резюме по разным компания, в которых находил вакансию на позицию junior и надеяться, что меня позовут на собеседование, а вот там то я всем покажу. И тут произошло болезненное столкновение с реальностью. Вместо радушных приглашений на интервью, стали приходить письма с абсолютно одинаковой формулировкой: К сожалению, мы не видим вас в этой позиции и продолжим с другими претендентами. Было больно, но тут главное не останавливаться. Продолжать откликаться на вакансии и надеяться, что тебя позовут на собеседование.
В конечном итоге, у меня было только одно собеседование, оно то и стало успешным. Компания называется People Can Fly и уже рекрутер на скрининге сказала, что вот есть департамент Animation Programming, в который ищут людей и не могут найти уже достаточно долго. Департамент оказался очень маленьким и состоял на тот момент из лида и одной разработчицы. Тестовое задание оказалось не таким сложным после курсов по алгоритмам, и заключалось в построение SceneTree.
Спектр задач очень большой и, как не сложно догадаться, все они связаны с анимациями. Со стороны программирования любая анимация является массивом из ключевых кадров. Каждый кадр хранит в себе дерево, которое описывает скелет нашей модели, и в каждой ноде (кости) задана структура данных, состоящая из трех параметров:
- Координаты кости
- Поворот кости
- Скейл
В целом, все задачи возникают из простой истины: у нас конечное количество памяти, которое может занимать игра и конечное количество аниматоров. Поэтому делается лишь определенный набор анимаций, а дальше в дело вступают разработчики, которые процедурно из того, что есть делают все остальное.
Пример 1: Допустим у вас есть анимация, как главный герой бежит и пробивает стену плечом. У нее есть определенная продолжительность, и следовательно персонаж до стены пробегает определенное расстояние. Но навык этот мы можем прожать в любой точке до стены (может быть и ближе чем расстояние из анимации, а может быть и дальше), а надо, чтобы закончилась она у стены. В этом то и заключается моя задача, сделать так, чтобы анимация, как бы сжалась, или разжалась, в зависимости от изначального расстояния.
Пример 2: Аниматор нарисовал как наш персонаж стоит на плоской поверхности. Но по игре он может остановиться на любой наклонной поверхности, и нам нужно, чтобы положение ног было правильным и ни одна нога не висела в воздухе
Как не сломаться
Тут самое главное не геройствовать. На мотивации далеко не уедешь, и здоровье при длительных стахановских подвигах заканчивается достаточно быстро. То, что сработало со мной, так это режим и наработка привычки заниматься до работы и после работы. Все, что я могу рассказать, описано в книге Атомные Привычки, лучше и интереснее у меня точно не получится.
Чем еще пользовался
Мне очень повезло, и во время моих подготовок на русском языка вышла одна из главных книг про разработку игр, толстющая и страшенная, но, зараза, полезная. Очень помог раздел с математикой, получилось за пару вечером освежить знания. Из математики стоит разобраться в азах линейной алгебры и аналитической геометрии. Из нового пришлось выучить про кватернионы. Они используются для описания поворотов, и представляют собой комплексные числа с еще двумя мнимыми осями. Это связано с тем, что описание поворотов при помощи обычных углов Эйлера, рано или поздно приводит к одной проблеме
Так же Прочитал Tour of C++ и про Паттерны в Геймдеве (книга очень крутая, интересная и легко читается)
Больше ничего из учебного не могу вспомнить.
В чем отличия от веба
Отличий не так уж и много. Все ты уже видел, только в профиль.
Например, как говорится, любой фронт хочет написать свой фреймворк, так и многие разрабы думают о написание своего нового инструмента/части движка, или же своего мини движка, который вот уж точно найдет свою нишу и принесет признание.
Продюсер -- это проджект менеджер.
Гейм дизайнер -- продакт менеджер, но со звездочкой. Если продакт придумывает бизнес логику, а разработчик потом переводит ее в код, то гейм дизайнер работает как над логикой, так и после ее реализовывает на верхнеуровневых инструметах(на Unreal Engine это Blueprints), и цель разработчика предоставить блоки для этого верхнеуровневого инструмента. По сути, гейм дизайнер может реализовать все и сам, но это будет не оптимизировано и быстро скатиться в кучу спагетти, которой просто выпустят и никогда больше не откроют.
Расскажу, что было очень больно. Переход от git к perforce, который используется, как мне объяснили потому, что он очень удобен для людей, который не пишут код (гейм дизайнеры, моделеры и т.д). Настоящей причины я не знаю. Просто смирился, что теперь живем с ним.
В целом документация для библиотек на фронте намного лучше, чем для C++. Все время есть ощущения, что ты просто не видел какой-то гайд, где рассказывают как читать эти доки. Например посмотрите на доки к Cmake и Webpack. Второй читать как-то приятнее и понятнее. Документация для Unreal просто ужасна. Как мне рассказали работе, это сильно отфильтровывает людей.
Так же сильно бросается в глаза, что много людей работают в компании уже очень длительное время (по 10-15 лет), это было большим шоком. Скорее всего это справедливо лишь для конкретной компании.
Очень необычно слушать, как люди рассказывают про работу над другими известными проектами: Fortnite, RDR2, Cyberpunk 2077, Gears of War, InJustice.
Outro
После получения офера произошел откат организма и следующие месяца четыре не прикасался после работы ни к чему, что было связано с программированием. Сейчас снова начинаю вливаться и по часу в день трачу на учебу.
Надеюсь мой опыт поможет кому-нибудь. С удовольствием отвечу на любые вопросы в комментариях.
История супер, ты прям молодец что столько базы на перспективу изучил, плз передай коллегам что Bulletstorm 2 все еще многие ждут
Поздравляю с успешным вкатыванием!
У меня самого сложилась похожая ситуация: после 5 лет работы с Unity решил, что это все не то, надо пойти в НАСТОЯЩИЙ геймдев. Освоил C++ (в основном по тем же ресурсам, что ты накидал в статье), обновил резюме и пошел по собесам, но как-то не сложилось: ААА-бояре свысока смотрели на юнити-холопа, да и мне совсем не понравилось то, что они предлагали по условиям. Зато в итоге устроился пилить на плюсах CAD-систему и ни о чем не жалею: задачи про 3D примерно как в геймдеве, а то и интереснее, инструментарий удобнее, многогигабайтных билдов часами ждать не надо.
Вот еще несколько ресурсов по геймдеву и C++:
Видео
Книги
😱 Комментарий удален его автором...
А какой был уровень до перехода в gamedev? Не больно ли было переходить из Senior/Middle позиции на Junior роль? Вопрос в том числе и про деньги?
Хорошая история! Желаю тебе удачи в продвижении по карьере, если нравится)
Т.к. я проходил похожий путь, но в обратном направлении (скриптинг геймдев -> игровой бэкенд -> веб-бэкенд), назову на мой взгляд несколько специфических отличий в работе программиста в геймдеве и в вебе (на мой взгляд):
А можешь рассказать подробнее, почему вначале решил выбрал unreal и c++, а не unity и c#? И доволен ли выбором по итогу?
Ты молодец! Не каждый может решиться на радикальную смену стека и выполняемых задач. Желаю, чтобы первоначальный запал, энтузиазм не угас.
Клевая история. Добро пожаловать в геймдев, huh.
Очень радостно, что коммьюнити растет.
Что касается preforce - мы у себя худо-бедно научили не-технических ребят гиту. Правда, я теперь только из закрытой тары пью, все боюсь, что отравят в отместку :)
Крутая история, рад за тебя! Я года полтора назад прошел вебинарчик по юнити, а юнити - оно на сишарпе, который после JS заходит как родное, и тоже задумался о смене. Но беглый ресеч показал, что уровень ЗП в геймдеве шибко меньше чем у фронтов. Если говорить про мск, то потолок сеньора фронта ~400к рублей по ТК РФ. Если самому на заграницу через ИП, то это где-то 8000$ (крипту не трогае, там еще процентов 20-30 можно накинуть). А какие ЗП по гемйдеву?
Спасибо что поделился. Очень интересно) Я тоже фронтом работаю и планирую разрабатывать игры, но С++ после JS/TS выглядит крипово, имел с ним дело.
Тебе удалось постичь, чем поинтеры от референсов отличаются? И в каких ситуациях Struct лучше Class?)
И главную тему то не раскрыл - что там в геймдев по деньгам? Сильно ли доход просел? Игры для PS5 все ещё можно покупать? Какие перспективы роста? Все в геймдеве говорят, что там денег меньше, чем в других айти сферах. Особенно по сравнению с фронтом, спрос на который продолжает расти.
большое спасибо за историю! Очень захватывающе почитать про такие масштабные перемены - на такое далеко не запросто решишься!
Мне это ценно и близко на фоне того, что по очень похожей схеме, правда меньшей кровью, сейчас в процессе перехода из php в java.
Кстати, рад, что благополучно выехали, и что выбрали Польшу! :)
Спасибо за пост, бро! Добавил в закладки.
Мечтал вкатиться в геймдев ещё лет 15 назад, но всегда думал, что это прям нереально и я слишком тупой. А недавно перекатился из сисадминов в веб и тут до меня дошло, что это не так уж и нереально. Сейчас вот устаканится текущая работа во фронте и тоже буду заниматься С++ и UE. Решил начать с пары курсов на udemy :)
Классный опыт! Над какими играми сейчас работаешь и хочешь ли перейти в студию побольше, чтобы создавать ААА блокбастеры?
Спасибо за пост! Очень интересно.
Скажи, а была ли идея начать делать свою игру, а не работать в компании?
Интересный опыт. Я тоже потихоньку изучаю геймдев. Выбрал немного другой путь. Изучаю Game maker studio и Java Script. Хочу начать делать html5 игры для порталов.
Ооо, добро пожаловать в Варшаву и в геймдев :)
Как у вас там с языковым барьером? Все ли общаются на английском? Или ты знаешь польский?
Спасибо за пост! Было очень интересно узнать, а как оно – менять стек не уходя из профессии (при этом смена произошла кардинальная).
Сколько времени уделял плюсам до/после работы?
Правильно ли я понял, что во время переездов в Киев / Польшу ты продолжал работать на основной работе как frontend dev? Если да, то когда ты уволился с работы - перед прохождением собеседований или раньше?
Друг, теперь ты можешь обновить интро!
Поздравляю! Сам хочу в геймдев, поэтому понимаю кайф!
Одна из немногих позиций, c которой можно вертеть интересным видео-портфолио :)
P.S: Там еще Петр Сикачев работает, очень крутой чувак по графике.
Update:
Закинул на Engine Programmer :D
Спасибо! Твой пост напомнил мне об еще одной студии, куда можно податься :)
Ну, и насущный вопрос:
Houdini? :D
😱 Комментарий удален его автором...