Хочу разрабатывать игры. С чего начать и удастся ли справиться самостоятельно

Всем привет. Меня зовут Евгений Ратушный, я Lead Unity Developer в студии AB Games. Почти два месяца — именно столько времени прошло от первой надписи Hello, world! на моем экране до первого оффера. Сейчас я работаю в компании, создавшей Hidden City — игру, в которую ежедневно играет 500 000 человек. В этой статье хочу рассказать о том, как попасть в GameDev, с чего начать и что нужно знать начинающему разработчику.

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

Необходимые знания и личностные качества будущего разработчика

Итак, у вас есть жгучее желание разрабатывать игры, но вы не знаете, с чего начать. Ответ простой: с себя. А именно с личных качеств, которые помогут вам быстро и эффективно осваивать необходимые для работы навыки.

Желание. Желание творить и учиться.
Дисциплина. Будет много нового и много непонятного. Без дисциплины и самоконтроля можно легко бросить начатое.
Энергия. Придется потратить много сил и энергии для получения знаний.

Теперь о знаниях. В сфере разработки игр практически нет разделения на «фронт» и «бэк», все разработчики игр — это максимально разносторонне развитые программисты. По специфике отрасли нужно все делать быстро, и задачи сформулированы не всегда понятно, а то и не всегда сформулированы — но это должно выглядеть красиво, играться увлекательно и приносить бизнесу много денег.

Кроме умения хорошо программировать и разбираться в архитектурах, нужно иметь комплексные знания в разных отраслях.

Хорошим плюсом будут знания:

  • 3D-моделирования;
  • растровых и векторных графических редакторов;
  • анимирования;
  • других смежных направлений, не связанных напрямую с профессией разработчика.

Нужно разбираться в графике и эффектах, понимать, что именно жрет ресурсы и как оптимизировать игру, чтобы она могла запускаться на целевых устройствах с высоким фреймрейтом, при этом еще и обладать графикой «лучше, чем у конкурентов». Надо часто решать задачи геймдизайна и игровой логики, которые появились в процессе разработки. В общем, «и швец, и жнец, и на дуде игрец».

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

С чего начать

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

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

Рекомендую сразу отбросить проприетарные игровые движки, которыми пользуются большие студии и к которым мы не сможем получить доступ, не устроившись туда работать. Тогда выбор сужается до всего нескольких привлекательных игровых движков: Unity, Unreal Engine, Game Maker, Godot, Cry Engine. Также есть производный от него Amazon Lumberyard и парочка менее известных. Но из них я бы хотел выделить два действительно достойных внимания: это Unity и Unreal Engine. Оба очень хороши, но каждый по-своему. Оба движка имеют большое и развитое комьюнити, поэтому в их изучении у вас не будет больших проблем. Давайте поговорим о них поподробнее.

Unity — невероятно популярный игровой движок, очень простой в понимании, удобный, приятный в использовании. Лучше всего на нем получается делать мобильные игры. Больше половины игр, которые вы найдете у себя в мобильном телефоне (если не все!), скорее всего, разработаны именно на нем. Компьютерные игры на нем тоже делают: Subnautica, Wastelend 2, Rust, Hearthstone, Pillars of Eternity, Escape from Tarkov, Humankind и другие.

Unreal Engine — авангард технологий, открытый игровой движок, обладающий одной из лучших в наше время систем рендеринга, отличным физическим движком и множеством разных крутых штук, таких как realtime-мультиплеер, который работает «из коробки». Хорошо оптимизирован, отлично подходит для AAA-графики, особенно для шутеров. На нем были сделаны многие легендарные игры, такие как Borderlands 3, Bioshock 2, Gears of War 5, Fortnite, Mass Effect 2, PUBG, Mortal Kombat 11.

Выбирать между движками нужно исходя из того, какой проект вы задумали. Если не планируете тратить все деньги мира на графику или собираетесь разрабатывать мобильные игры, вам больше подойдет Unity, в противном случае вам нужен Unreal.

Теперь язык. Если с движком вы уже определились, то тут должно быть все просто: для Unity подойдет C#, а для Unreal — C++.

C# немного легче в изучении, и вам будет проще начать. Но C++ более распространен в других игровых движках, поэтому в будущем вам будет проще найти работу с другим движком.

Поделюсь собственным опытом: освоив в совершенстве один язык, вы с легкостью перейдете на любой другой. Язык — всего лишь инструмент, намного важнее умение им пользоваться, то есть знания фреймворков, в том числе и самого движка.

Также, если ваш выбор падет на Unreal, важно отметить, что он обладает собственным визуальным языком программирования Blueprint, который очень прост в освоении и подойдет для создания простых механик, например для прототипирования. К слову, у Unity есть свой аналог, который называется Bolt. Это решение отлично подойдет для геймдизайнеров, которые хотят попробовать прототипировать самостоятельно игровые механики без необходимости изучать язык программирования.

Как работают игры

Если представить, что игра — это позвоночное существо, каждая из составляющих которого жизненно необходима, то: архитектура — это скелет и нервная система игры, геймплей — его мясо, окружение — его каналы коммуникации, игровой движок — утроба, в которой игра рождается и формируется. Я постараюсь рассказать о каждой сущности поподробнее. И начнем, пожалуй, с движка и окружения, поскольку это все же сущности второго порядка, а позднее перейдем к архитектуре и геймплею.

Движок — это совокупность решений для удобной разработки игры: среди них вы найдете менеджер файлов, окон, всевозможные редакторы и инструменты, с помощью которых настраивается графика, связи игровой логики, верстается UI. Сюда включаются различные решения, позволяющие рендерить картинку, воспроизводить различные эффекты и звуки, в конце концов решения, позволяющие компилировать данные в необходимый устройству формат, и другие штуки для создания игры.

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

Окружение — это различные сервисы и модули, которые не могут являться частью игры по определению, но необходимы ей для функционирования. Например, аналитические сервисы, маркетинг, live ops и прочее. Окружение помогает нашей игре нормально развиваться и находиться на плаву долгое время.

Архитектура — как и в любом приложении, это скелет, на котором все держится. Она описывает связи между модулями, принципы того, как приложение будет обрастать мясом. А также сильно влияет на то, как быстро приложение будет разрабатываться и насколько большим и сложным оно может быть.

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

Приложения, которые планируется поддерживать и наращивать фичи длительное время, традиционно пишутся на более громоздких и неудобных, зато консервативных и прочных архитектурах.

Архитектура приложения может быть похожа на скелет человека, когда все кости связаны между собой суставами, или быть словно привидение, легкое и невесомое, когда никто наверняка не знает, какого оно роста и что у него за спиной. К сожалению, мне приходилось встречать и скрюченных уродцев-мутантов, таких в игровой индустрии большое множество. Всему виной изменчивость рынка, трендов и необходимость сильно менять функционал приложения и добавлять фичи, которые не вписывались в изначальную концепцию разработки. Но эти приложения тоже имеют право на жизнь, просто их сложнее поддерживать, отлавливать в них баги и добавлять новые фичи.

Геймплей — это, по сути, то, с чем взаимодействует игрок, то, что создает игровой процесс. Он описывает игровую механику, все то, что должно по задумке геймдизайнера приносить удовольствие игроку. Его принято разделять на «кор-геймплей» и «мета-геймплей».

  • Кор-геймплей — это основной цикл действий, позволяющих игроку двигаться по игровому прогрессу. В шутерах вроде Counter-Strike кор-геймплеем являются перемещение по карте, стрельба и другие способы убийства противников. В игре вроде Hidden City кор-геймплей — это поиск предметов на локациях.
  • Мета-геймплей — это все необязательные игровые активности, все, что окружает игрока во время игрового процесса. И если эти сущности исключить из игры, она не потеряет своего смысла, но может утратить блеск. Например, мета-геймплей в Counter-Strike, в частности CS:GO — это покупка скинов и рейтинговая система, а в Hidden City — раскрытие тайн города теней. Если убрать эти вещи, игроки все еще смогут играть и получать удовольствие от кор-механики, но игра быстро потеряет смысл, так как не будет иметь «высшей цели».

Мобильные игры и игры для ПК — есть ли разница и в чем

В разговоре о движках я упомянул, что на одних лучше писать игры для мобильных, на других — для ПК. Есть куча нюансов, о которых можно рассуждать вечно. Я постараюсь сконцентрироваться на самых важных, на мой взгляд, вещах.

Билд

Вообще, процесс сборки мобильных и десктопных игр с использованием таких современных игровых движков, как Unity и Unreal, мало чем отличается. Мы просто работаем над проектом и при билде выбираем платформу, на которой хотим запускать его. Игра одинаково просто компилируется на разные платформы, будь то игровая консоль, мобильный телефон или ПК.

Инпут

Важный нюанс — система ввода. Для мобильных платформ это тачскрин, для компьютеров — мышь и клавиатура, для консолей — геймпад, для VR хедсетов — акселерометр и триггеры. Все системы категорически разные, и в процессе разработки обязательно нужно помнить, как именно пользователь будет взаимодействовать с игрой. От этого строится геймплей, основополагающий аспект игры. Поэтому для того, чтобы в игру можно было играть с различных платформ, нужно помнить об этом на всех этапах разработки.

Производительность

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

В разработке игр под мобильные телефоны есть куча сложностей с тем, чтобы оптимизировать все, в том числе и самые примитивные операции, которые на любом, даже очень слабом ПК были бы просто незаметны.

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

Размер проекта и детализация

Мобильные игры — чаще всего небольшие проекты. Редко мобильная игра по количеству механик и детализации мира дотягивает до компьютерной. Естественно, я говорю о средних значениях. Понятно, что это далеко не всегда так. Но не лишним будет заметить закономерность, что компьютерные игры часто намного более объемные и проработанные, чем среднестатистическая мобильная игра. Это же наблюдение можно отнести и к размеру команды, бюджету игры, длительности разработки.

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

Замечу также, что программисты так или иначе пишут программы, отлавливают баги, настраивают различные эффекты и часто не обращают внимание на платформу, под которую они создают игру. Да что там на платформу, часто не обращаешь внимание на геймплей и жанр игры, будь то HOPA или шутер. Ты сосредотачиваешься на мелочах, погрузившись в свои мысли, и движешься по выработанному пути, не обращая внимание на общую картину. Как шутят разработчики: «То, какую игру ты разрабатываешь, больше всего влияет на то, как ты можешь хвастаться результатами своей работы перед друзьями. И если это РПГ, у тебя точно меньше шансов быть высмеянным».

Самостоятельно или в команде

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

Но, как показывает практика, разрабатывать игры самому вполне реально. Много крутейших продуктов вышло с подачи одного разработчика: для примера, перескажу очень кратко историю разработки Stardew Valley. Один парень, Эрик Барон, делал эту игру целых пять лет. Все начиналось с того, что это был его pet-project, который должен был ему помочь устроиться на работу. Но все затянулось, и игра очень разрослась, позднее он принял решение довести ее до конца. Это легендарная история самопожертвования ради дела всей жизни, ведь не было никаких гарантий, что его авантюра удастся. После выхода игры он стал очень успешен, и это оправдало все силы и средства, вложенные в разработку проекта.

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

Так что на вопрос «Реально ли разрабатывать игры самому?» ответ существует, и он положительный. Но чем меньше и проще этот проект, тем реальнее.

Мой личный совет: важно постоянно находиться в геймдев-движухе. Участвовать в games-джемах, посещать различные конференции (как игровые, так и технические), делать свои pet-projects и делиться ими с друзьями и коллегами, собирать фидбэки и анализировать свои результаты. Стоит хотя бы раз почувствовать драйв индустрии, когда вы научитесь «серфить» по волнам трендов и новых технологий ― начнете получать от этого огромное удовольствие. А еще это заряжает эмоциями и энергией, которая дает огромный буст в работе и саморазвитии.

Путь разработчика-одиночки сложный. И для того, чтобы отправиться туда самостоятельно, нужно быть либо отчаявшимся авантюристом, либо уверенным в себе специалистом с большим багажом знаний. К слову, знания можно почерпнуть из специальной литературы, онлайн-курсов и YouTube.

Где черпать знания

Я не соврал, когда написал, что между погружением в тему и своей первой работой в геймдеве прошло всего два месяца. Однако это было непростое время — и я никогда прежде не поглощал знания в таких объемах, как за этот период: в ущерб сну, социальным контактам и даже еде. Это был большой стресс, я ощущал последствия этого периода еще несколько месяцев после того, как попал на свою первую работу.

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

Блоги и полезные сайты

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

Советую начать с канала Гоши Дударя. Я смотрел видеоуроки по языку С# для Unity, а также несколько курсов о движке Unity. Рекомендую обратить внимание на разнообразные видео на его канале из серии «Делаю игру на Unity за час». Их много, и они крайне полезны для новичка. Именно для новичка: я не считаю его экспертом в разработке игр, но как учитель он хорош тем, что объясняет все простым языком, на пальцах. Дружеский совет: стоит не просто просматривать видео, а параллельно отрабатывать каждое действие на компьютере.

Есть также канал Emerald Powder с туториалами по созданию игр, реализации конкретных механик и обзорами новых инструментов, или Lex Darlog, где показана работа с шейдерами в Unity.

Еще один чрезвычайно полезный канал для начинающего разработчика — Simple code и, в частности, видеокурс на нем «С# от новичка до профессионала». Авторский подход к изучению языка намного серьезнее и качественнее. Максимально понятно разъясняются все нюансы. Когда я просматривал этот курс впервые, там было около 20 видеоуроков. Сейчас их больше 100, и, похоже, это еще не финиш. Крайне рекомендую!

Просмотрев оба вышеупомянутых видеокурса, я начал искать нечто более глубокое о Unity — и решил приобрести запись курса на Udemy. Так я первый и последний (во всяком случае, на сегодня) раз потратил целых $11 на свою учебу. Это был курс «Unity 2017 для начинающих — полный практический набор» от Романа Сакутина. Не жалею о потраченных деньгах: тут я отыскал много полезной информации, которую не встречал в видекурсах на YouTube. Также информация была хорошо структурирована по темам и удобна для изучения.

Когда изучение материалов на Udemy перевалило за ⅔, я уже получил работу. Далее на протяжении всего обучения я активно пользовался Google и просматривал многочисленные видео разных авторов на темы, которые были мне непонятны. А еще много общался в Telegram-канале о разработке игр на движке Unity. Впоследствии, кстати, я и сам стал помогать таким же новичкам, каким когда-то был сам.

Кроме того, рекомендую посещать интересные подсайты на Reddit, к примеру, такие как Gamedev, Blender, Gaming, IndieDev, IndieDev, Unreal Engine, VFX и Unity3D.

Книги

Если же у вас есть время и вдохновение на чтение книг, делюсь собственной экспертизой, с чего начинать изучать Unity и C#.

«C# х.0. Справочник. Полное описание языка», Бен Албахари, Джозеф Албахари

Вместо «х» подставьте актуальную версию языка, который вам нужно освоить. Книга будет отличаться лишь последними главами: основы же остаются без изменений. В свое время я читал о C# 7.0 — и, признаюсь честно, это моя любимая книга о программировании. Даже некоторое время спустя, когда я ее перечитывал, сразу открывал для себя нечто новое. Благодаря хорошо структурированным текстам, написанным понятно и лаконично, книга подойдет для читателя с любым уровнем владения языком и программирования в целом.

«Unity и C#. Геймдев от идеи до реализации», Джереми Гибсон Бонд

Идеальна для легкого старта в карьере разработчика игр на Unity благодаря детальным описаниям всех процессов, с самых азов. Прототипирование игры, основные этапы ее разработки, введение в программирование на С#, описание движка и его функционала вместе с чудесными примерами несложных игр и детальными гайдами по их созданию, со скриншотами и объяснениями, как это работает — легко и интересно, читается на одном дыхании.

Если желаете сосредоточиться на изучении Unreal Engine, рекомендую книги, которые в свое время «зашли» мне.

«Об’єктно-орієнтоване програмування», В. В. Бублик

Эту книгу мне дал один знакомый с комментарием: «Лучшая книга для начинающего программиста». Она рассказывает о программировании в целом и о современном подходе к написанию программ согласно одноименной парадигме программирования ООП, а также основы языка С++. Книга пригодится вне зависимости от языка, который вы выбрали — если, конечно, с его помощью можно реализовать программы, написанные согласно ООП. И, разумеется, она будет абсолютно уместна, если вы решили изучать С++.

«Разработка RPG в Unreal», Стив Сантелло, Алан Стегнер

Книга весьма напоминает вышеупомянутую «Unity и C#. Геймдев от идеи до реализации» за исключением того, что языку разработки уделено не так уж много внимания. А вот рассказы о том, как вообще писать игры, прорабатывать концепцию и примеры их создания с детальным описанием и скриншотами — радуют не на шутку.

Если вы уже не новичок, но испытываете необходимость в актуализации знаний, вот мой персональный топ-3 лучших книг для глубокого изучения программирования. Их можно перечитывать вечно и каждый раз находить там для себя новые открытия. Воистину легендарные книги, и это далеко не только мое мнение.

«CLR via C#», Джеффри Рихтер

Книга о языке C#, но в этот раз она не ставит перед собой задачу методично перечислить все особенности языка, хотя по факту это так или иначе описывается. Задача книги: объяснить читателю, как вообще происходит выполнение кода в исполняемой среде, что такое компиляция, управление памятью и другие важные аспекты, о которых большинство программистов не задумываются или даже могут не подозревать. Эта книга поменяет ваше мнение о том, как нужно писать программы. Но подчеркну: я не советую ее к прочтению новичкам, вы уже должны уметь уверенно программировать, прежде чем возьмете ее в руки.

«Совершенный код», Стив Макконнелл

Еще одна книга из серии не для новичков. Миллион советов, как лучше писать ПО, куча нюансов разработки и проектирования программ. Она включает в себя примеры на «псевдокоде» и на различных языках программирования, таких как Visual Basic, C, C++, C#, Java. Языки для примеров используются в зависимости от контекста и от того, на каком из них автору показалось более удачным решением продемонстрировать проблему. Подойдет для глубокого изучения программирования в целом.

Game programming patterns, Robert Nystrom

Невероятно полезная книга для опытных программистов: новички, к сожалению, вообще не поймут то, о чем в ней написано. Как, собственно, случилось в свое время и со мной: никогда не забуду, как взял ее в руки в первые месяцы изучения программирования, открыл и спустя полчаса закрыл с разочарованием. Я был в шоке от того, что не понял ничего: то ли оттого, что недостаточно еще опытен, то ли оттого, что внутри написана какая-то бессмыслица.

Спойлер: далеко не бессмыслица, это одна из важнейших книг для того, чтобы писать хорошие архитектуры и пользоваться программированием так же искусно и эффектно, как боевые монахи Шаолиня применяют кунг-фу. Она написана на примерах языка С++, но это не мешает понять суть, если вы пишете на другом. В ней рассказывается о паттернах программирования, начиная от первых задокументированных «бандой четырех» и заканчивая собственными паттернами автора с историей о том, что привело его к тому, чтобы сформировать определенные закономерности.

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

«Кровь, пот и пиксели. Обратная сторона индустрии видеоигр», Джейсон Шрейер

Из этой книги вы узнаете, как разрабатывались такие игры, как The Witcher 3, Stardew Valley, Diablo 3, Uncharted 4, Dragon Age: Inquisition и другие. Она поведает вам о внутренней стороне индустрии геймдева, о работе в больших компаниях и инди-разработчиках. Настоятельно рекомендую!

Как вы уже, наверное, поняли, путь в GameDev непрост. И чтобы попасть сюда, нужно многому учиться, прикладывать максимум усилий и любить свое дело. Поэтому заведите себе список полезных ресурсов, чтобы следить за индустрией и постоянно совершенствовать свои навыки.

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини.

👍НравитсяПонравилось28
В избранноеВ избранном12
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Супер!!! Дякую за корисну інформацію

Подписаться на комментарии