Учимся делать 3D-игры с нуля

Курсы и туториалы по созданию трёхмерных игр — третья статья из цикла «Разработка».

Автор: Артём Клиновицкий. По диплому — специалист по защите информации, но в основном занимался AR, VR и интерактивными инсталляциями в разных странах мира. В Pixonic пришёл на должность ведущего VR-разработчика, а сейчас — Senior R&D Software Engineer. Работает над прототипами и другими экспериментальными проектами компании.

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

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

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

Учимся делать 3D-игры с нуля

Минутка истории. Многие в качестве примеров первых 3D-игр обычно вспоминают Doom или Wolfenstein 3D, но настоящим прародителем трёхмерных шутеров (ещё и с мультиплеером) была игра, выпущенная в стенах NASA в 1973 году — называлась она Maze War.

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

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

3D-модели и анимации

Если вкратце, все 3D-движки создают изображение по одному сценарию.

  1. Модели и виртуальная камера располагаются в трёхмерном пространстве, с учетом положения, вращения и масштаба. К анимированным моделям применяются соответствующая анимации, например, изгибается часть модели, которая привязана к суставу скелета.
  2. Все модели покрываются текстурами. Одни текстуры сообщают о цвете определенных частей модели, другие — о том, насколько сильно эти части отражают свет, третьи содержат информацию о рельефе поверхности и так далее. По сути, текстуры — это обычные картинки. За то, как именно они будут накладываться и отображаться отвечают шейдеры — своего рода инструкции для видеокарты.
  3. Рассчитывается освещение с учётом источников света, расположения моделей относительно друг друга, заранее подготовленных световых карт (специальных текстур, содержащих информацию об освещённости 3D-моделей).
  4. Применяются пост-эффекты для финальной обработки картинки. Например, стилизация под нуар или эффект миниатюры.

Сами модели для игр создаются в отдельных редакторах вроде 3ds Max или Maya. Ещё есть бесплатный Blender с кучей туториалов на YouTube. Как именно это делается — слишком большая тема для нашего цикла, тем более, что в прототипах можно обойтись готовыми моделями из онлайн-библиотек и каталогов самих игровых движков.

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

Звук и музыка

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

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

Логика и код

В этом разделе речь пойдёт о том, что делает статичный набор моделей, картинок и звуков собственно игрой.

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

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

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

Второй: воспользоваться средствами визуального или «нодового» программирования. Например, для Unity нужно будет установить специальный плагин (самый известный — Playmaker). С его помощью можно «собрать» логику игры из логических блоков, соединяя их линиями, как в блок-схеме. У Unreal Engine аналогичный инструмент встроен в базовую версию и называется Blueprints.

Учимся делать 3D-игры с нуля

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

Советы для начинающих

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

Следовать туториалам несложно, но я очень советую избегать слепого копирования. Экспериментируйте: что будет, если задать другое значение параметра в скрипте; а если сделать совсем другую форму коллайдера; и так далее.

Один из официальных уроков Unity по коллайдерам

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

Главное — выйти за рамки простого повторения. Только тогда можно по-настоящему усвоить материал и приобрести устойчивые навыки.

Несколько слов о программном обеспечении

Движок Unity со всем необходимым можно получить совершенно бесплатно. Более того, сделанные в нём игры можно официально публиковать и продавать, пока они не начнут приносить прибыль больше $100 тысяч в год. Функции бесплатной версии фактически не ограничены — разве что придётся мириться с логотипом Unity на старте игры и светлой темой интерфейса редактора.

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

Важное исключение: если урок затрагивает создание интерфейса игры (UI) и он предназначен для Unity версии 4.5 или раньше — он устарел целиком и полностью. Потому что в версии 4.6 UI был полностью переработан — изучать устаревшую версию не имеет смысла.

Ещё в комплекте с Unity поставляется бесплатная некоммерческая версия редактора кода Visual Studio. Советую сразу его установить и привыкать работать в профессиональной среде.

Учимся делать 3D-игры с нуля

Уроки для начинающих

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

  • Текстовый туториал начального уровня от Unity по созданию адвенчуры про Элен, которая потерпела крушение на неизвестной планете. Весь урок можно выполнить без написания и строчки кода, на основе бесплатного 3D Game Kit. А после него можно изучить и весь раздел Tutorials на сайте Unity — там много полезных уроков.
  • Целый курс, официально рекомендуемый Unity. Он охватывает множество аспектов этого движка: программирование, физика, шейдеры, искусственный интеллект, звуки, частицы и так далее. Курс рассчитан примерно на 50 часов, и на него иногда действуют большие скидки.
  • Серия туториалов от YouTube-канала Brackeys по созданию игры в жанре Survival. Инди-игры в этом жанре довольно популярны, и многие наверняка хотели бы сделать что-то подобное. Этот туториал поможет начать.
  • Плейлист с отдельными роликами от того же автора. В нём могут быть уроки, которые пригодятся именно вам.
  • Четыре серии видеоуроков от разработчиков Unity. Я советую первые две: прототипирование на UFPS и работа с Playmaker.
  • Серия видеоуроков от N3K по созданию мобильного раннера, по сути — клона Subway Surfer, но про пингвинов. Однозначно стоит взглянуть всем, кто интересуется разработкой мобильных игр.
  • Двухчасовой видеоурок по созданию профессионально выглядящей лесной сцены в Unity из готовых ассетов (ссылки на них есть в описании к роликам). Подойдет тем, кто хочет самостоятельно собрать крутой уровень, не хуже, чем в коммерческих проектах.

Домашнее задание

Кто-то мечтает сделать классический ПК-шутер, кто-то мобильный раннер, кто-то возродить жанр стратегий в реальном времени. Поэтому задание будет общим.

  • Выберите серию уроков, которая лучше всего вам подходит, — из списка выше или самостоятельно.
  • Скачайте и установите Unity или любой другой движок. Начните следовать выбранным урокам, повторяя за автором. Но не забывайте экспериментировать, чтобы понять, как всё устроено.
  • Закончив туториал или курс, попробуйте самостоятельно улучшить результат. Добавьте то, без чего прототип игры в выбранном жанре будет неполным. Это не обязательно должно быть чем-то сложным, главное — выйти за рамки обучающих материалов.

В следующий раз мы немного отойдем от Unity и более подробно разберем создание логики для прототипа без навыков программирования. Для этого мы используем Blueprints, о которых мы уже говорили, и которые входят в базовый комплект движка Unreal Engine.

Это статья из нашего большого проекта с vc.ru. Если выполнять все задания, можно — ни много ни мало — научиться делать видеоигры. И выиграть лимитированное издание PS4 Pro в конце каждого цикла статей.

Цикл «Разработка»:

1919
15 комментариев

как тут начать делать игры?

1
Ответить

сам незнаю

1
Ответить

всем Утачи

1
Ответить

скриншот с кодом.Это просто п*издец какой-то в Update.
гетать инпут каждый кадр гетать камеру кажды кадр создавать рейкаст каждый кадрGC, CPU Bounds гарантированны. Темболее это еще Unity c его API-Core-API-C# вызовами.

Ответить

А что не так с гетом инпута и рейкастом каждый кадр? Сейчас бы залупаться на код, не зная кейса.

1
Ответить

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

Ответить