{"id":14268,"url":"\/distributions\/14268\/click?bit=1&hash=1e3309842e8b07895e75261917827295839cd5d4d57d48f0ca524f3f535a7946","title":"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f71e1caf-7964-5525-98be-104bb436cb54"}

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

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

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

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

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

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

Минутка истории. Многие в качестве примеров первых 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Текстовый туториал начального уровня от 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 в конце каждого цикла статей.

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

0
14 комментариев
Написать комментарий...
Milana Sso

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

Ответить
Развернуть ветку
Valera Ivanov
Ответить
Развернуть ветку
Сериккали Биктасов

сам незнаю

Ответить
Развернуть ветку
Valera Ivanov

всем Утачи

Ответить
Развернуть ветку
theq theq123
скриншот с кодом.

Это просто п*издец какой-то в Update.

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

GC, CPU Bounds гарантированны. Темболее это еще Unity c его API-Core-API-C# вызовами.

Ответить
Развернуть ветку
Артём Фесуненко

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

Ответить
Развернуть ветку
Yurii

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

Ответить
Развернуть ветку
theq theq123

Если это висит в соседнем потоке и отдано на откуп дизайнерам, то ок.
Я залупаюсь всего на 2 места - гет камеры и объект рейкаста. Оба эти вещи можно вынести в мемберы и вообще не гетать. Мы вам перезвоним. Когда у нас неполачиваемые стажировки будут.

Ответить
Развернуть ветку
Игнат Емельянов

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

Ответить
Развернуть ветку
Ky Vicious

судя по неймспейсу кусок кода из unity standard assets :)

Ответить
Развернуть ветку
Артём Фесуненко

Это из тутора Brackeys. Годнейший материал для новичков на youtube.

Ответить
Развернуть ветку
Залупенко Игорь

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

Ответить
Развернуть ветку
Билл Гейтс

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

Ответить
Развернуть ветку
Дно Кризиса

Тупейшая статья, извините. Ее можно сократить до двух строк, при этом сделав ее в 10 раз полезнее:
https://unity3d.com/ru/learn/tutorials
https://translate.google.com/#

Ответить
Развернуть ветку
11 комментариев
Раскрывать всегда