На каком языке пишут компьютерные игры
Как стать разработчиком игр с нуля, да ещё и востребованным? Универсального рецепта нет, но есть костяк из знаний и навыков, на который можно опереться. О том, что нужно знать, чтобы попасть в сферу геймдева сегодня, рассказывают сами разработчики игр.
Языки программирования для разработки мобильных игр
При создании мобильных игр выбор языка программирования во многом определяется целевой платформой. Android и iOS являются крупнейшими операционными системами для мобильных устройств, поэтому большинство разработчиков пишут приложения на совместимых с ними языках: Java, Kotlin, Objective-C или Swift.
- Java используется для разработки нативных приложений для Android. Программы обычно компилируются в байт-код, который может работать на любой виртуальной машине Java (JVM) независимо от архитектуры процессора. Эта почти универсальная совместимость является причиной того, что Java всегда входит в список лучших языков программирования. Синтаксис Java очень похож на синтаксис C/C++.
- Kotlin – сравнительно новый язык для разработки под Android, который является духовным преемником Java. Он проще, выразительнее и менее многословен по сравнению с предшественником. Программы на Kotlin можно скомпилировать в байт-код и запустить на JVM, что дает нам совместимость с библиотеками и фреймворками для Java. Kotlin стремительно развивается, и эксперты высоко оценивают его перспективы в будущем.
- Objective-C был создан как объектно-ориентированное расширение языка C. Начиная с 90-х он используется для написания программного обеспечения для устройств Apple. Разработчики приложений на Objective-C для мобильных устройств Apple имеют доступ к многочисленным фреймворкам для создания игр.
- Objective-C хорошо служил Apple на протяжении многих лет, но будучи строгим надмножеством C, он унаследовал многие его недостатки. Например, язык не поддерживает механизм пространства имен и перегрузку операторов. Кроме того, он синтаксически многословен и сложен по сравнению с современными языками. Эти проблемы вынудили Apple создать Swift, который используется для разработки приложений под iOS 7 и выше. Несмотря на короткое время существования на рынке, Swift уже обогнал Objective-C по популярности. Он отличается от предшественника безопасностью типов, автоматическим управлением памятью и безопасностью при использовании указателей.
Godot
Здесь самое приятное — это цена. Движок полностью бесплатный безо всякого мелкого шрифта. Трудно поверить, но это один единственный файл размером менее 70 мегабайт, не требующий инсталляции. При этом имеет полный функционал, к которому привык современный разработчик.
В смысле кроссплатформенности самый универсальный: Godot-проекты можно портировать как на ПК или консоли, так и на мобильные или WEB-платформы. «Из коробки» доступна основная физика, как для персонажей так и для автотранспортных средств. Есть встроенные алгоритмы поиска пути с обходом препятствий. В наличии привычный для многих визуальный редактор шейдеров, в полном объеме представлены инструменты скелетной анимации и визуальные эффекты, основанные на частицах. Редактор анимаций в движке устроен таким образом, что можно анимировать практически любой параметр, присутствующий в проекте. Для движка доступно огромное количество шаблонов и готовых примеров, и раскапывать эту сокровищницу не хватит никакого терпения.
Чтобы не перехвалить, следует отметить отсутствие встроенного редактора ландшафта, но зато есть расширенный импорт из Блендера, откуда можно забрать всю сцену со всеми потрохами. В качестве языка программирования предложен GDScript, по синтаксису похожий на Python. Идеологически Godot-проект представляет собой древовидную структуру, каждый узел которой может служить самостоятельной сценой. Объекты могут общаются между собой с помощью так называемых сигналов, которые могут содержать в себе переменные.
Начиная с версии 3.0 появилась возможность использовать Visual Scripting, до боли напоминающий Блюпринты в Unreal Engine.
Foundations of Game Engine Development, Volume 1: Mathematics
The first volume of Foundations of Game Engine Development discusses the mathematics needed by engineers who work on games or other types of virtual simulations. The book begins with conventional treatments of topics such as linear algebra, transforms, and geometry. Then, it introduces Grassmann algebra and geometric algebra to provide a much deeper understanding of the subject matter and highlight the places where traditional arithmetic with vectors, matrices, quaternions, etc., isn’t quite correct. Includes exercises.
By the end of this book, you’ll have developed a complete game and will have built a solid foundation using Unity’s tooling ecosystem to develop game projects of any scale.
Язык Си
Язык Си до сих пор остаётся одним из самых популярных языков программирования из-за своей относительной простоты и чёткой структуры. Компания id Software использовала Си для создания игры Doom, впервые выпущенной в 1993 году.
Doom была названа самой влиятельной FPS-игрой, став прообразом многих других игр от первого лица и 3D-игр в общем. По приблизительным оценкам Doom набрал около 10 миллионов установок в 1995 году.
Язык С++ использовался для создания многих современных операционных систем, софта, игр и игровых движков. Благодаря его гибкости, игры можно относительно несложно портировать с ПК на консоли и в обратном направлении. Одной из самых популярных игр, написанных на С++, является World of Warcraft.
С момента запуска было продано 14 миллионов копий. 48% подписчиков проживают в азиатском регионе, 22% из США. На вики по WoW содержится более 100 000 статей.
Angry Birds находится на третьем месте по популярности среди всех игры для iOS всех времён, сразу за Candy Crush Saga и Fruit Ninja. Стоимость разработки первой версии игры составила порядка $140 000, что является очень скромным числом в своём роде. Четыре человека работали над игрой суммарно порядка восьми месяцев.
Альфа-версия игры была создана всего за 6 дней. Minecraft — вторая самая продаваемая игра в мире. Изначально она называлась «Cave Game».
Хотите найти больше материалов по разработке игр и, может быть, даже разработать одну свою? Загляните в наш раздел по геймдеву.
Игровые движки — особый класс программного обеспечения. Каждая компания использует свой собственный, охраняя все секреты с исключительной ревностью. Чаще всего все знаковые «фишки» какой-то успешной игры обусловлены именно возможностями движка, а не квалификацией программистов. А потому, предоставить лицензию кому-то другому означает получить себе сильного конкурента.
Взять к примеру, автомобильные гонки: как там будут реализованы погодные условия? Просто туман — довольно легко, но надо, чтобы на лобовое стекло падали капли дождя или мокрого снега, причем взаимодействовали с потоком набегающего воздуха в зависимости от скорости. Если вас обогнали на мокрой трассе — значит, должно окатить грязью. Добавьте еще реалистичное отражение в зеркалах, и подумайте, сколько здесь работы для программиста. Если все это будет доступно на уровне движка, значит, с работой вполне справится специалист средней руки во вполне обозримые сроки. В результате, уникальная в своем роде игра рискует быть расклонированной безо всякого стеснения.
Вот почему игровой движок остается главным сокровищем студии. Это и визитная карточка и ударное оружие в маркетинге. Движки самых популярных проектов никто в глаза не видел и не держал в руках, однако все только и делают, что пишут о них глубокомысленные экспертные заключения.
Бывают программисты, способные написать игру без движка, или даже сперва создать собственный движок, а затем игру. Но зачем, если можно сразу игру? А затем, что в каждой компании есть HR-специалист, который не позволит руководству совершить роковую ошибку, и сделать проект зависимым от одного человека. В зарплате таких программистов не обидят и создадут самые комфортные условия, но сделать игру без движка не позволят ни под каким видом.
По сути, каждый проприетарный игровой движок — это уникальный закрытый фреймворк, построенный по собственным стандартам, использующий собственную терминологию. За счет этого, программист, работающий в знаменитой студии, прикован к движку, как к веслу на галере. Весь его опыт и квалификация востребованы только здесь, и нигде более.
Возникает вопрос: зачем изучать игровые движки? А затем, что в последние годы ситуация в гейм-индустрии радикально меняется. Меняются подходы к лицензированию, меняется уровень доступного контента, меняется рынок труда в ИТ.
На самом деле, доступные и бесплатные движки были всегда. Однако, если взглянуть на готовые проекты, становится ясно, почему бесплатно: пользуясь предложенным инструментарием, вы никогда и никому не составите конкуренции. Говоря коротко, при всем богатстве выбора, достойными внимания можно считать от силы четыре движка: CryEngine, Godot, Unity, Unreal Engine.
Каждый имеет свою специфику, но есть и общие свойства, выделяющие их в особую категорию. Будучи доступными индивидуальному разработчику, все они позволяют создавать проекты ААА класса. До недавнего времени такое сочетание считалось невозможным. Как следствие, на рынке труда можно встретить вакансию «Разработчик Godot/UE/Unity» столь же часто, как и «Программист С++».
Языки для программирования на коммерческих движках
Коммерческие движки, вроде Unreal и Unity, упростили процесс разработки и произвели революцию в игровой индустрии. Они позволили потенциальным инди-разработчикам создавать популярные игры. Благодаря независимости от крупных компаний инди-игры отличаются инновационными идеями, экспериментальным игровым процессом и креативными решениями.
Unity – мультиплатформенный игровой движок, который позволяет с легкостью создавать интерактивный контент. Его выбирают небольшие организации и инди-разработчики из-за отличной функциональности, дружелюбного сообщества и возможности использования для написания любых 2D- и 3D-игр.
Unity быстр, гибок, портативен и дружелюбен к новичкам. Персональная лицензия позволяет создавать коммерческие игры бесплатно до тех пор, пока они не принесут более 100000 долларов дохода. Хотя фреймворк Unity построен на языке C++, доступ к его коду не предоставляется. Это означает, что вы не можете изменить движок под свои нужды.
Игра Ori and the Will of Wisps разработанная на Unity
Unreal Engine – игровой движок, разработанный Epic Games. Впервые он был выпущен в 1998 году и с тех пор постоянно совершенствуется. На протяжении более двух десятилетий движок Unreal использовался в сотнях крупных игр, он основан на проверенной структуре AAA-игр и прекрасно подходит для сложных проектов. Пользователь имеет доступ к исходному коду движка и может при необходимости его изменить.
Unreal отличается реалистичными визуальными эффектами, но он сложнее в освоении нежели Unity.
Игра Star Wars Jedi: Fallen Order разработанная на Unreal
Для сценариев в Unreal используется C++, хотя и с некоторыми отличиями от стандартного языка. Например, в нем отсутствует низкоуровневое управление памятью, поскольку об этом заботится сам движок. Также в Unreal-версии C++ отсутствует стандартная библиотека шаблонов (STL).
STL – важная часть стандартных библиотек C++, которая предоставляет контейнеры, строки, алгоритмы и различные полезные функции.
Ссылки на представленные книги вы можете найти в статье 149 лучших книг по геймдеву или как создать свой Skyrim.
С геймдевом связано много областей, и каждый этап обучения основан на этапе предшествующем. Например, не стоит сразу перескакивать на игровые движки. Начните с разработки ПО, изучения математики с заточкой под программирование игр и только после переходите к геймдеву. Каждый из представленных этапов – это пошаговое руководство, включающее в себя книги и другие материалы.
Многие книги ориентированы на работу с легендарной и интуитивно понятной средой разработки для детей Scratch, в том числе ScratchJr. После базиса следует информация о Python Pygame. Есть книга для пятилетних, но большая часть материалов подойдет для детей в возрасте от 8 лет.
Теоретическая подковка – обязательная составляющая, без которой дальнейшее изучение лишено смысла. Эта подборка обучающей литературы включает в себя основы, сведения об алгоритмах и математику в разрезе изучения информатики.
А вот Lua перенял кое-что от C++. Скрипт-язык хорош для игровой логики. Он упростит инициализацию уровня, привязку задач к объектам, смену поведения NPC в интерактивном режиме без необходимости перекомпилировать проект и многое другое.
И если информатика – это базис теоретический, то здесь больше практики. Разработка игр – ухабистая стезя, и начать лучше с приложений. Книги с практическими заданиями, а также информацией о паттернах и UML помогут разобраться, что к чему.
Нет, здесь не будет школьного курса алгебры и геометрии. Подборка разбита на основы математики в сфере геймдева и более продвинутый уровень.
Аппаратные платформы, операционные системы, наборы API, алгоритмы, кроссплатформенность и другие важные аспекты, которые лягут в основу разрабатываемой игры. Книги дополнены рядом геймдев-статей, в которых содержится полезная информация по программированию.
Движок – это сердце игры, которое «закачивает» функциональные возможности и необходимый инструментарий. В первых книгах вы познакомитесь с архитектурой и дизайном. Дальше «игровые движки» разделяются на инструменты, оптимизацию, скрипты и дополнительные материалы в виде статей. В ходе ознакомления затрагиваются паттерны, алгоритмические трюки, оптимизация в Unity и прочие нюансы.
Да, содержимое – это важно, но именно компьютерная графика является аналогом интерфейса приложения, который будут видеть пользователи. Поэтому ей стоит уделить особое внимание.
Недаром этот раздел самый большой. Сюда включены основы программирования с Real-Time 3D, DirectX и OpenGL. Все дополнено информацией о рендеринге и технологиях. Отдельного внимания в подборке удостоились Direct3D и OpenGL.
Разработка игр касается и аудио: это звуки, издаваемые NPC, главным героем, явлениями или предметами, а также музыка. Аудио программирование обошлось всего двумя книгами, но в них доступно изложена необходимая информация.
Один из самых сложных этапов. Кроме программной основы и картинок, должны быть законы, по которым все это взаимодействует. Игровая физика и анимационное программирование раскрыты в 17 книгах. Отдельно затронута имитация жидкости.
Управляемых компьютером персонажей немало: это могут быть мобы, квестгиверы и даже обычные шахматы. Обилие книг позволит понять принципы работы ИИ. Ниже приведен перечень тематических полезных статей.
Разработка игр для одного игрока сильно отличается от многопользовательских вариантов. Здесь нужно учитывать соединение, работу потоков и другие нюансы. Подборка разбилась на статьи и книги о серверном программировании, сетевом программировании и сетевом протоколе.
Компьютерные игры — это большой бизнес. Суммарная выручка индустрии видеоигр в США достигла 23,5 миллиардов долларов в прошлом году, что на 5% больше, чем в 2014. За каждой великой игрой стоят программисты, которые вносят существенный вклад в конечный продукт. Конечно, для создания разных игр используются разные языки программирования. В данной статье мы представим вам несколько самых популярных.
Unreal Engine
Движок был рожден в 1998 году в недрах компании Epic Games и буквально до 2015 года оставался малоизвестным даже в узких кругах. Судя по всему, все эти годы система эволюционировала намного активнее своих конкурентов. Из специфического движка для шутера от первого лица UE превратился в удивительно универсальный кроссплатформенный инструмент, способный удовлетворить самые изысканные запросы. Очевидно, чудо случилось в тот момент, когда были приняты новые условия распространения: бесплатно для некоммерческого использования или роялти 5% от дохода.
Что движок этот приличный, догадаться легко, все помнят игры серии Unreal, Deus Ex, Rune, X-Com, Duke Nukem D-Day, BioShock, Mass Effect, S.T.A.L.K.E.R. 2, и наконец, Fortnite. Другое дело, никто не мог представить, насколько удобным может быть рабочее место разработчика сложных проектов. Едва движок оказался общедоступным, монополизму Unity пришел конец.
С первого взгляда Unreal Engine подкупает широким набором стандартных шаблонов. Кроме трехмерных шутеров от первого или третьего лица предложены и полеты в космосе, и двухмерные пазлы, целых два варианта платформера и два варианта автомобильных гонок с упрощенной и продвинутой подвеской.
Погружаясь в работу вы обнаруживаете, что многие функции, которые в Unity надо непременно описывать в скриптах, встроены в движок заранее, надо лишь найти нужную галочку в свойствах объекта.
И наконец, заглянув в Marketplace находите много бесплатного но качественного контента.
Игровая логика программируется на C++, для опытного программиста — идеальный вариант. Если не делать стратегию реального времени типа StarCraft, и таргетироваться под десктоп, можно вполне обойтись пресловутыми блюпринтами, по готовому проекту ни один сноб об этом не догадается.
Единственная беда —проекты на Unreal Engine получаются достаточно объемными, и для мобильных устройств приходится очень серьезно заниматься оптимизацией. Однако, в свете современных трендов такие недостатки постепенно отходят на второй план.
Языки программирования для разработки веб-игр
Большинство онлайн-игр относительно небольшие и написаны исключительно с использованием языков фронтенда, преимущественно JavaScript . В то время как HTML структурирует содержимое веб-страницы, а CSS описывает ее внешний вид, JavaScript вдыхает жизнь в игру, добавляя интерактивность. Используя специальные фреймворки, мы можем создавать сложные игры прямо в браузере.
Перечислим некоторые из этих библиотек: Phaser, GDevelop, ImpactJS и melonJS. Также можно использовать WebGL для добавления в игру сложной трехмерной графики.
Язык ассемблера
Многие игры для Sega и Dendy были написаны на различных диалектах языка ассемблера, включая Super Mario Brothers.
Игры серии Super Mario были проданы тиражом более 70 миллионов копий. IGN назвала третью часть Super Mario Brothers самой великой игрой всех времён.
А что насчёт книг?
Чтобы стать разработчиком игр, нужно много практики, но это не значит, что её не стоит подкреплять теорией. Стоит отметить, что подавляющее большинство хороших книг по геймдеву можно найти только на английском языке. Держите настоящую дорожную карту по геймдеву от одного из пользователей GitHub:
Каждый из этих блоков включает в себя ряд книг по разработке игр, которые позволят двигаться в нужном направлении.
Особой популярность пользуются ещё такие книги по геймдеву:
Как выстроить план обучения?
Всё обучение должно быть выстроено, в первую очередь, на практике — делайте много небольших и законченных проектов. На старте такие проекты можно найти в различных уроках, курсах, а после уже пытаться придумывать свои мини-игры. Не старайтесь сделать сразу большой проект мечты — без базовых знаний на таких проектах обучаться будет значительно тяжелее и дольше. Пусть у вас будут вместо игроков и врагов разноцветные кубы и шарики, зато вы поначалу не будете отвлекаться на более сложные детали, такие как анимация, эффекты. Постепенно научитесь работать с ресурсами, выстраивать простые сцены, попробуете работу как в 2D, так и в 3D.
Game Engine Architecture, Third Edition
In this new and improved third edition of the highly popular Game Engine Architecture, Jason Gregory draws on his nearly two decades of experience at Midway, Electronic Arts and Naughty Dog to present both the theory and practice of game engine software development. In this book, the broad range of technologies and techniques used by AAA game studios are each explained in detail, and their roles within a real industrial-strength game engine are illustrated.
New to the Third Edition
This third edition offers the same comprehensive coverage of game engine architecture provided by previous editions, along with updated coverage of:
- computer and CPU hardware and memory caches,
- compiler optimizations,
- C++ language standardization,
- the IEEE-754 floating-point representation,
- 2D user interfaces,
- plus an entirely new chapter on hardware parallelism and concurrent programming.
This book is intended to serve as an introductory text, but it also offers the experienced game programmer a useful perspective on aspects of game development technology with which they may not have deep experience. As always, copious references and citations are provided in this edition, making it an excellent jumping off point for those who wish to dig deeper into any particular aspect of the game development process.
У разработчиков игр есть знания, воображение, умелые руки и работающий компьютер, но они не смогут построить виртуальный мир без другого важного инструмента – языка программирования.
Выбор правильного языка программирования, фреймворка или других инструментов имеет важное значение в успешной разработке программного обеспечения. Это решение повлияет на то, как вы будете использовать свои основные ресурсы, такие как время, бюджет, оборудование и т. д. Игровая индустрия очень разнообразна, и выбор языка программирования для игры во многом зависит от ваших целей и задач. Этому выбору также способствуют многие другие факторы – целевая платформа, сложность проекта или жанр игры. Мы разделим игры на категории и подберем соответствующие языки программирования для каждой.
Игровой движок – это среда разработки для создания видеоигр и других интерактивных приложений. Термин может относиться к программному обеспечению с различными уровнями абстракции, однако основные функциональные возможности игрового движка включают рендеринг графики (2D или 3D), моделирование физики, звук, написание сценариев, анимацию, искусственный интеллект, сетевое соединение, управление памятью и потоковую передачу. Несмотря на растущую популярность коммерческих движков, многие компании-разработчики предпочитают создавать собственные, чтобы избежать проблем с лицензированием или добиться большей гибкости.
Unity
Сказать о нем «очень известный» — ничего не сказать. Без преувеличения это один из столпов, на которых держится игровая индустрия. Angry Birds 2, Pokemon Go, Super Mario Run, Escape From Tarkov — ничтожно малая часть проектов, созданных на Unity.
Лицензия Personal бесплатна, при условии, что ваш доход не превышает 100 000 долларов в год. Если вы вдруг разбогатеете сверх меры, придется покупать помесячную или годовую подписку. Причем богатеть есть с чего, поскольку система идеальна для разработки мобильных приложений. В этом сегменте и пиратства поменьше, и издателей побольше, да и покупателей хватает.
От прочих систем Unity отличает сравнительно низкий порог вхождения: визуальный редактор прост, удобен интуитивно понятен. В отличие от Godot имеется встроенный редактор ландшафта.
Есть базовая физика, в том числе симуляция ткани. Можно сделать так, чтобы плащ на плечах героя не торчал, как лист фанеры, а красиво развевался на ветру. Но нельзя сказать, будто вся красота доступна прямо из коробки: любая фенечка начинает работать только после того, как ее описать в соответствующем скрипте и немного посидеть над отладкой.
Языки программирования для разработки движков AAA-игр
Среда разработки игрового движка Godot
Хотя появилось множество новых языков, промышленные движки для 3D-игр по-прежнему пишутся по большой части на C++. Этот язык сочетает принципы объектно-ориентированного программирования с низкоуровневыми функциями языка C. C++ позволяет создавать программы с высоким уровнем абстракции без больших потерь в производительности.
Игровые движки реализуют множество ресурсоемких процедур для моделирования графики и физики. Современные игры могут отображать реалистичные сцены в режиме реального времени с миллионами треугольников и детализированными текстурами с учетом светотени, атмосферы и т.д. Это было бы невозможно без контроля над железом, предоставляемым C и C++.
Сцена из игрового демо движка Unreal Engine 5 содержит миллиарды треугольников.
Программировать высокоуровневую игровою логику на C++ трудно. Для повышения скорости разработки в движок игры часто интегрируют язык сценариев. Сценарии обычно интерпретируются, а не компилируются, что делает процесс сборки быстрым. Их написание легко освоить, что дает новичкам возможность создания игровой логики.
Хотя лучшего языка сценариев не существует, Lua быстро набирает обороты в игровой индустрии. Этот простой и легкий язык используется во многих популярных движках: CryEngine, Defold, Irrlicht и Corona.
Большинство спецэффектов, от реалистичных световых отражений до эффектов постобработки и моделирования жидкости, контролируются специальными программами, известными как шейдеры. Шейдеры могут превратить плоские и унылые сцены в потрясающе красивые виды.
Сцена в Minecraft до и после применения пользовательских шейдеров
Шейдеры – это небольшие программы, которые запускаются непосредственно на видеокарте. OpenGL Shading Language (GLSL) и High-Level Shading Language (HLSL) являются одними из самых распространенных языков для разработки шейдеров.
С чего начать?
CryEngine
Самый экзотический движок из нашего списка. Создан немецкой частной компанией Crytek в 2002 году. В 2006 году движок купила компания Ubisoft. Игры Crysis и Far Cry знают многие, но рабочий инструмент для их создания большой популярности так и не набрал. Условия использования — 5% роялти при доходе более 5 тысяч евро в год вполне демократичные, но главная проблема другая. Движок хорош для тех, кто делает шутер под десктоп или консоль, а о мобильных устройствах лучше не думать.
В свое время Crysis казался революционным благодаря уровню интерактивности с внешней средой. Все предметы были разрушаемыми, их можно было брать и перемещать. Зато на максималках эта игра не работала ни у кого. Сегодня реалистичность взаимодействия с предметами стала привычной, но уровень оптимизации движка до сих пор оставляет желать лучшего. В былые времена реальное попиксельное освещение, объемные эффекты, анимированные текстуры и прозрачные материалы внушали пользователям благоговейное уважение и потому недостаток производительности прощали.
Из достоинств следует также отметить высококачественный звук 5.1 и реалистичную проработку перспективы. К примеру, туман доступен трех типов: объемный, слоистый и дальний. Не забыли разработчики также и об искусственном интеллекте, который настраивается скриптами помимо кода C++.
В версии 5.6.7 присутствуют шаблоны SideCroller, Third Person Shooter, Top Down Shooter, но почему-то никто под мобильные устройства ничего не делает. Также следует помнить, что все продукты Crytek были однопользовательскими, следовательно мультиплейер тоже под большим вопросом. Южнокорейский разработчик NCsoft использовал CryEngine для MMORPG The Tower of Eternity, но все сетевое взаимодействие переписывали самостоятельно с нуля.
Читайте также: