Ремесло

Что ещё почитать игровому программисту?

15 февраля 20246 мин

Вместо предисловия

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


«Мёртвые души», Гоголь

Начну с неожиданного. Хорошая литература остаётся актуальной спустя столетия, и классику стоит перечитывать хотя бы ради того, чтобы видеть, как мало меняются люди. В романе молодой человек приезжает в провинциальный город с необычным предложением — скупкой «мёртвых душ», чтобы под них получать кредиты и привилегии. Прошло уже двести лет, а схемы Чичикова прекрасно живут и в современном геймдеве, и в IT вообще. Умение замечать такие вещи помогает в работе с людьми не меньше, чем знание паттернов.

Joel on Software

Блог Джоэла Спольски (одного из создателей Stack Overflow) — joelonsoftware.com. Есть и книга, по сути сборник его статей: практичные, временами едкие заметки о разработке софта и управлении проектами. Многое из написанного устарело по технологиям, но не по сути — про людей, оценки сроков и работу команд там всё по-прежнему верно.

«Кровь, пот и пиксели» (Blood, Sweat, and Pixels)

Книга Джейсона Шрайера 2017 года о том, как на самом деле делаются видеоигры и через какой ад иногда проходят команды. Внутри — истории создания The Witcher 3, Destiny, Uncharted 4, Stardew Valley и других проектов. Читается легко, акцент сделан на человеческой стороне разработки, хотя часть событий, конечно, осталась за кадром. Хорошее лекарство от иллюзий, что геймдев — это сплошное веселье.

Исходники третьего Doom

Классический разбор того, почему код Doom 3 считают эталоном красоты. Меня в своё время поразило, как мало там комментариев при том, что код прекрасно читается. Главное правило, которое стоит унести с собой: если метод делает слишком много, чтобы это уместилось во вменяемое имя, надо уменьшать объём кода внутри метода, а не дописывать комментарии.

MISRA C++

Это набор стандартов и рекомендаций для разработки безопасного и надёжного ПО на плюсах. Цель MISRA C++ — улучшить качество, безопасность и надёжность программ за счёт правил, соблюдение которых помогает избегать типичных ошибок. Во время моей работы над софтом для гидроакустики это было основным руководством по разработке. Как вам, например, отсутствие свободного new/delete в программе? Если память можно выделить только на старте (или нельзя вовсе, и работаешь только с выданным объёмом), подход к проектированию становится кардинально другим. Очень многие практики и правила отлично переносятся в игрострой — хуже точно не становится.

«Профилирование, измерение и анализ» от Riot Games

Статья на сайте Riot Games от мастеров мультиплеера и создателей League of Legends. Два мэтра рассказывают основы профилирования и приводят примеры кода на плюсах. Статья ещё с 2018 года, но для старта в методах и принципах профилирования — самое то.

EASTL

github.com/electronicarts/EASTL — одна из трёх альтернатив стандартной библиотеке, которую большинство разработчиков игр (со скрипом) признаёт более-менее рабочей и общей. Появилась ещё тогда, когда стандарт 98/03 был в пропозалах, а о Folly и речи не шло. Развивается и сейчас, отдельные решения не брезгуют затаскивать и в стандарт. Не знаете, чем заняться на выходных? Загляните к этим ребятам в репозиторий — будет много интересного. А начинаются исходники EASTL вот с такого вступления:

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

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

Расширенная и частично переработанная замена (EASTL) для стандартной библиотеки C++ была реализована в Electronic Arts, чтобы устранить эти недостатки переносимым и читаемым образом.

Блог Михаила Кадикова

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

Joel Burgess

blog.joelburgess.com — Джоэл Бёрджесс, ветеран игростроя, работавший над The Elder Scrolls V: Skyrim и Fallout 3/4. Много материалов с рассуждениями о дизайне игр и его эволюции, о программировании и разработке. По его статьям и выступлениям на GDC можно собрать отдельную книгу о разработке игр (на самом деле всего одной игры, конечно, — Fallout 3), столько там интересных моментов и советов.

SPIIIN'S BLOG

spiiin.github.io — недавно познакомился с Сашей Бойко (@spiiin) и жалею, что не нашёл его сайт раньше. Много полезной и интересной информации. Как оказалось, мы какое-то время вместе работали у Gaijin, но по проектам не пересекались. А ещё он сделал классный редактор уровней для игр под Денди и не только — CadEditor, редактор уровней для множества игр под разные платформы (NES, Sega Mega Drive, GBA), лежит тут.

«For the Win», Кевин Вербах и Дэн Хантер

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

Может ли скриптовый язык работать быстрее плюсов?

Лекция Антона Юдинцева (Gaijin) про daScript — скриптовый язык, который быстрее C++. Не верите? Почему верю я — отдельный вопрос: была возможность покопаться изнутри в движке Dagor/War Thunder и тулзах и переносить их на Nintendo Switch и Apple TV. Запихнуть движок от «тундры» на 6 iPhone, коим по сути и являлся Apple TV 4-го поколения, и заставить его работать было очень и очень непросто.

«The Art of Game Design», Jesse Schell

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

ИИ в играх

Постоянно пополняющийся плейлист разборов ИИ в разных играх: за девять лет набралось почти восемь десятков выпусков про реализацию ИИ в известных играх — от F.E.A.R. до Человека-паука.

Ещё ссылки

На этом всё, надеюсь, было интересно и полезно!

← Все статьи