Log of Alprog
1.19K subscribers
98 photos
91 links
加入频道
Ещё раз про сериализацию
#кодище
Наконец-то выложили видео с моего выступления на минском DevGamm. Доклад был сделан на основе постов в этом канале (1, 2, 3), но немного переработанных и дополненных.

Почему-то организаторы вырезали почти половину моей речи в начале. Там было довольно длинное вступление о том, зачем вообще нужна сериализация на подобных проектах; а также несколько слайдов, где я кидался помидорами во встроенную сериализацию Unity. Недостающие слайды можно глянуть на slideshare (из России нужен VPN).

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

обсудить
The Last of Us Part II как искусство. Почему это прорыв.
#без_спойлеров

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

Сегодняшний повод — это релиз The Last of Us Part II. Если коротко, то это одна из самых значимых и знаковых игр за последние лет двадцать. А если мысль разворачивать, то устраивайтесь поудобнее, потому что разговор будет долгий и начать мне придётся издалека.

Начнём с того, что вернёмся к извечному спору о том, являются ли игры искусством. Я думаю, большинство из вас согласится с этим тезисом в той части, где под искусством понимается любое творчество. Но так ли это, если мы говорим об искусстве, как о высокой эстетической категории? Может ли игра быть шедевром в том смысле, в котором им является Ника Самофракийская или Звёздная ночь Ван Гога?

Несмотря на то, что игры моя главная страсть в жизни, по этому вопросу мне близка позиция Джонатана Блоу. В своём интервью Time он отмечает, что когда люди говорят о том, что в игре хорошая история, они, как правило, сравнивают эту историю только с другими играми. Но эта же история не выдерживает критики, если сравнить её с хорошими историями из литературы или кино. Даже лучшие образцы игровой индустрии — это не «Моби Дик» и не «Гордость и Предубеждение». В лучшем случае это сюжет уровня «Воздушный волк» или «Рыцарь дорог».

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

Разумеется, из-за молодости индустрии. Шедевры просто ещё не появились. Но это лишь часть ответа. Дело в том, что шедевры не появляются на пустом месте, для этого должна сложиться определённая почва.

Когда министр культуры (уже бывший) говорит «пусть расцветают все цветы, но поливать мы будем те, что нам нравятся», то ничего у вас не вырастет, кроме псевдопатриотического кино. Если вы хотите получить в стране настоящее искусство, то вы должны поливать всю грядку, лелеять каждый росток, каким бы странным он ни казался. И тогда, быть может, в условиях творческой свободы через много лет и вырастет что-то выдающееся.

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

Вы можете возразить, что в литературе и кино потребитель тоже голосует рублём, но нигде это не влияет на сюжеты с такой силой, как в играх. Вы когда-нибудь слышали о том, что читатели устраивают кампанию по обрушению рейтинга книги или фильма, если им не понравилась концовка? Может быть один или пару раз. Но там всегда речь идёт о серии книг или телесериалах. Никто не обрушивается на одиночную книгу или двухчасовой фильм. Наоборот, эксперименты там даже приветствуются.
Но особенность игровой индустрии в том, что здесь практически нет двухчасовых игр. Когда игроки тратят 50 часов на игру (а на это порой уходит не одна неделя), они приходят в бешенство от концовки не хуже, чем после просмотра сериала. И даже сильнее. Ведь в играх ты отождествляешь себя с персонажем. К концу у игроков появляется ощущение, что они потратили много сил и они, то есть их герой, должны быть вознаграждены. Ни о какой художественной ценности игроки в большинстве в этот момент думать не способны, они готовы лишь бежать в интернет, ругать разработчиков и обрушивать им рейтинг. Вспомните Mass Effect. Ни в одной другой индустрии сценарист не испытывает такого давления на творческую свободу от игроков, которые уверены, что им должны определённый сюжет.

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

А в целом мы видим нерешительность и самоцензуру. Я наблюдаю это во многих проектах. Я уверен, что в GTA V при всей его драматургии, при всём нагнетании ситуации и явно намечающихся параллелях предательства, мог сложиться великолепный философский финал, но он был заменён на «безопасный» хеппи-энд. Да, там есть альтернативные концовки, но для галочки — это ещё одна дань предпочтениям игрокам (выбор концовки ничего не даёт истории, если мы рассматриваем её как художественное произведение). Я наблюдаю это же по реакциям стримеров, проходящих SOMA. Уверен, её рейтинг сложился бы совсем иначе, не добавь разработчики сцену после титров. Всем разработчикам приходится оглядываться на этот фактор.

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

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

The Last of Us Part 2 — наш ледокол.

Разумеется, я говорю не только и не столько о концовке, сколько о сюжете в целом. Концовка — это лишь яркий пример, когда сценарист идёт на поводу у игроков, чтобы вы поняли, о чём я говорю. Но The Last of Us 2 нарушает «сюжетные табу» и в других местах. Без спойлеров рассказать об этих местах нельзя, но если вы играли, то понимаете, о чём речь.
Более того, в одном эпизоде я вижу почти гениальный приём. Это своеобразный слом четвёртой стены, но в обратном направлении, если можно так выразиться: что-то проникает не с экранов в реальность, а, наоборот, наши эмоции от игры в реальности аккуратно берутся, упаковываются, и отправляются прямиком внутрь сюжета, усиливая его. Впрочем, тут мне может мерещиться то, что изначально в игру не закладывалось. Я не настаиваю.

Интересно другое. Дала ли вся эта сюжетная смелость что-нибудь для истории? Мой ответ: безусловно. Получили мы своего «Моби Дика»? Вряд ли. Но абсолютно точно сделали шаг в этом направлении. Когда я думаю об истории Last of Us Part II критериями Джонатана Блоу, я могу представить этот сюжет в виде классической книги или трагедийной пьесы. Я могу представить школьное сочинение по этому сюжету в старших классах средней школы. Целесообразность сочинений на уроках литературы это, конечно, отдельный вопрос; но главное, что я могу представить сюжет Last of Us 2 в одном ряду с произведениями школьной программы. Я не помню, чтобы я мог сказать нечто подобное про какую-либо другую игру. Я далеко не со всеми игровыми вселенными знаком, так что не берусь утверждать, что ничего подобного в плане сюжета не было до этого, но тем не менее.

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

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

Но главное, конечно, это не сама игра, а тот прецедент, которая она создаёт. Naughty Dog показывает всему миру, что так можно. Проект помельче был бы похоронен, но своим качеством и масштабом The Last of Us 2 таранит всё на своём пути. Конечно, она сталкивается с сопротивлением: userscore на metacritic сейчас составляет 5.1. Но особенности пользовательских оценок по скандальным играм таковы, что подобная оценка отнюдь не означает, что в основном все ставят 5 или 6. Такая оценка скорее означает, что около половины оценок составляют единицы и двойки и около же половины оценки типа 9 и 10.

Я полагаю, что в реальности хейтеров гораздо меньше, чем 50%, особенно среди тех, кто играл в игру, просто они особенно активны в интернете, но так или иначе, такое падение рейтинга убило бы менее громкий релиз. И только Last of Us 2 справляется. Я верю, что продажи игры останутся высокими, широкая аудитория познакомится с игрой не смотря ни на что и сделает свои выводы. Я верю, что история расставит всё на свои места, и через пару лет Last Of Us 2 окажется на одной из верхних строчек бестселлеров платформы, показывая пример другим ААА-компаниям. А массовый игрок будет уже чуть больше готов к неоднозначным и сложным сюжетам в играх. Last of Us 2 один из первопроходцев, но он открывает дорогу будущим шедеврам.
Part II

Уверен, что вы уже утомились читать и сейчас недоумеваете: какой ещё Part II? Я, признаться, и сам уже задолбался набирать этот текст, но это важно. Есть ещё одна революция, которую совершает The Last of Us II, но упоминание о которой довольно тяжело было вплести в основной текст. Эта революция — тема насилия.

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

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

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

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

Подумайте, какие на самом деле это открывает художественные возможности? Мы можем поговорить о моральной стороне вопроса, о чувстве вины, о милосердии. Дать прочувствовать это всё от первого лица. И The Last of Us Part II делает это. Это тяжёлый, неприятный разговор, но он очень важный, если мы хотим повзрослеть, как индустрия.

Конечно, уже были даже более жестокие игры, вроде симуляторов маньяка, такие как Manhunt или Hatred. Но это довольно нишевые игры, в которые играли, пожалуй, лишь любители пощекотать нервы. В массовом сознании же они след не оставили, а игроки привыкли, что эмпатия к врагам в играх обязательно должна искусственно снижаться. Но Last of Us 2 проносится по этим представлениям локомотивом.

Я не говорю, что все игры должны натуралистично изображать насилие, но теперь эта тема есть в общественном поле. Last of Us 2 расширяет диапазон, в котором могут реализовываться игры, как искусство. Она расширяет наши представления о том, что и как может обсуждать игра в плане сюжета. И она доносит это до массового игрока.

The Last of Us Part II — не шедевр. Но через 20 лет мы будем вспоминать эту игру как одну из самых значимых и знаковых в своей эпохе. И кто знает, быть может, через 20 лет, благодаря протоптанной ей дороге, у нас будет свой «Моби Дик».
***

К сожалению, в конце я вынужден сделать дисклеймер. Прошу заметить, что про важность насилия в этой игре я писал ещё два года назад, то есть до того, как начались всякие ЛГБТ-скандалы с ней. А пруфы моей позиции про концовки и сюжетные повороты разбросаны по всему интернету за давностью 3-5 лет. Так что я бы написал всё то же самое про любую другую игру, сделай она нечто подобное. В связи с этим прошу не докучать мне сообщениями о том, что я хвалю игру исключительно из-за «сонибойства» или наличия в игре «повесточки». Спасибо. Остальных же прошу в в чатик для обсуждения.
Переобувания Блаба
#код
Что-то нашло настроение поразмышлять о том, как часто я менял мнение на программерском поприще. Такое на самом деле случается нечасто, потому что мы все живём в пузырях из собственного опыта. Первый инструмент или подход, который хорошо себя зарекомендовал, формирует в нас эффект утёнка. Затем мы этим самым утёнком какое-то время восторженно забиваем все гвозди в округе. И вот спустя десятки птичьих, натянутых на разнообразные модели Земли, когда по-хорошему стоило бы задуматься об этичности происходящего, у нас уже достаточно травматичного опыта, чтобы спутать стокгольмский синдром с любовью.

Когда твоя позиция сформулирована и озвучена коллегам возле кулера, когда по теме написаны посты и твиты, бывает уже очень трудно выйти на следующий виток спирали понимания и начать декларировать противоположное своим же вчерашним взглядам. Самая главная моя ошибка прошлого — это конечно то, как упорно я в юности не признавал, что Visual Basic плохой язык (если вам резануло ухо слово «плохой», то переформулирую: неподходящий для моих задач). Осознание этого было длительным и болезненным. Я топал ножкой и капризничал, лишь бы не учить С++. Но сегодня я фанат крестов. Я добрался сюда через пару витков .Net, но что-то мне подсказывает, что на этом моя личная спираль обрывается. Конечно, сейчас я привязан к С++ во многом стокгольмским синдромом, но как мне кажется, у меня есть и рациональные аргументы, почему оглядываясь назад через 10 лет я не сочту это ошибкой.

Другие примеры изменения моего мнения не столь драматичны, но тоже случались. Например, я помню, как 10 лет назад вкручивал локализацию в игру для Wii. И я тогда на полном серьёзе втирал, что для геймдева строки лучше хранить в 8-битных кодировках с переключением кодовых страниц (Windows-1251, 1252 — вот это вот всё). Мне тогда представлялось важным иметь доступ к нужному символу по смещению в строке, а необходимость помнить кодировку совсем не смущала и не казалась геморройной. Я проникся силой юникода уже буквально через год, но стыдно до сих пор.

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

Это далеко не самый интересный для чтения мой пост получился: всем, в общем-то, плевать, какие конкретно метаморфозы проходило чужое мнение. Но как мне кажется, это довольно занятная тема, чтобы порассуждать и проанализировать свои взгляды. А вы помните, как кардинально меняли своё мнение по холиварным темам?
Что я думаю про C++20
#кодище
На днях С++20 был окончательно утверждён. Осталось чисто формальная публикация ISO, которая может затянуться на пару месяцев. Но даже если это произойдёт в 2021, то стандарт всё равно будет называться С++20, потому работу над ним закончили в этом году. В связи с чем я решил пробежаться по основным нововведениям и написать, что же я про них думаю. Интересно это будет трём с половиной человекам, поэтому выскажусь максимально коротко и не шибко художественно.

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

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

Корутины в С++ — это настоящий computer science оргазм. Я в принципе обожаю корутины. Это одна из моих любимых концепций программирования вообще, но тут она столкнулась с крестовой политикой «не платишь за то, что не используешь», и вместе они родили совсем уж потрясного ребёночка. Даже не zero, а negative-overhead получился. Я пока в реальных проектах не использовал (пока довольствовался boost-овыми корутинами), но я смотрел пару докладов Гора Нишанова, который их разработал. И там очень круто. Посмотрите, кто не видел. Опять же круто, что всё это чудо в стандарте, а не в бусте.

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

Не могу сказать, что С++20 прям совсем другим языком ощущается, как было с С++11. Нововведения очень крутые и важные, но они касаются в основном каких-то специальных разделов, а не бытовухи. Единственное изменение, которое сильно меняет ежедневную практику — это модули. Но их распробовать пока не удалось.
А подпишитесь на Марка
#light
Марк — это наш главный сценарист. Официальная душа, харизма и чувство юмора Encased RPG. Почти год у Марка есть свой небольшой телеграмм канал, где он пишет всякое разное. Про саму игру, к сожалению, ничего не пишет, но когда у вас ещё будет возможность залезть в застенки черепной коробки сценариста не ферм каких-нибудь, а одной из самых амбициозных игр постсоветского пространства?

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

В общем, уважьте старика, подпишитесь на Марка.
Логарифм и резинки
#код
Как-то в одном из чатов обронили фразу: «а когда вам последний раз был нужен логарифм?». Забавно, но мне он потребовался буквально на следующий день. Это ещё один маленький пост о том, какого рода математика нужна геймплейному программисту в повседневной жизни.

Часто нам нужно сглаживать какие-то процессы, у которых нет чёткого конца или он меняется во времени. Ну, например, у нас один объект — пусть это будет ручной дракончик — движется на воображаемой резинке за другим объектом, который тоже постоянно в движении: скажем, это будет персонаж игрока. Если игрок оказался далеко от дракончика (например, телепортировался), то дракончик сперва летит к нему очень быстро, но при приближении постепенно замедляется, чтобы это смотрелось хорошо.

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

Юнитологи классом повыше обычно используют небезызвестную функцию SmoothDamp. Внутри там скрывается мудрённое решение из книги Game Programming Gems 4. Вот только нам приходится где-то хранить текущую скорость для каждого процесса сглаживания, да и в целом довольно страшно выглядит. Нельзя ли как-то попроще сделать и без лишних переменных в местах вызова?

На самом деле если мы задумаемся, как будет выглядеть FPS-независимый способ приближения со сглаживанием, то быстро поймём, что нам надо проходить одинаковую долю расстояния за одинаковое время. Например, за первую секунду проходим половину пути, за вторую секунду половину от половины, то есть остаётся четверть, затем 1/8, 1/16 и так далее. И никогда мы по настоящему не достигаем цели, но нам это и не надо. При таком движении неважно в какой точке этого процесса мы оказались (на первой секунде, второй и т.п.), мы всегда знаем, как рассчитать движение дальше. От пути всегда остаётся лишь

1 / 2^t

А значит пройденное расстояние от времени вычисляется по формуле:

1 - 1 / 2^t

Двойка здесь всего лишь указатель на то, что в качестве одинаковых промежутков мы выбрали половину расстояния. Мы можем подставить туда 3, чтобы получить треть, или любое другое число больше 1. Можно думать об этом числе, как о степени агрессивности нашего In в нашем FPS-независимом сглаживании (аналог InCubic, InQuad и т.д.). Формула продолжит работать.

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

1 - 1 / base^t = 0,98
base^t = 1 / (1 - 0,98)
t = log(1 / (1 - 0,98), base)

Ну вот и всё. Теперь мы можем инициализировать этими параметрами нашу бесконечную резинку-пружинку, после чего ей можно будет скармливать deltaTime, а в ответ получать LerpK. Таким образом получилось простое FPS-независимое сглаживание для всего, что можно лерпать. Финальный класс можно видеть на скриншоте.

По-моему, симпатично получилось. А вы что думаете?
Поправочка!
#код
Ох, что-то я написал этот пост и тут же понял, что лишнего наворотил. Движение, при котором мы за равные промежутки проходим половину, затем половину от остатка и так далее — это фактически тоже самое движение, когда мы за равные промежутки проходим треть, затем треть от остатка и так далее. Это просто свойство перевёрнутой экспоненты самой по себе. И неважно какое основание. А чтобы управлять агрессивностью In-прыжка, достаточно слегка менять threshold-порог. Чем выше выставить процент порога, тем агрессивнее будет прыжок в начале.

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

public struct EndlessSpring
{
private float TimeScale;

// time is amount of time that needeed to pass
// threshold-share of the distance (never pass 100%)
public EndlessSpring(float time, float threashold = 0.98f)
{
var expectedValue = 1 / (1 - threashold);
this.TimeScale = Mathf.Log(expectedValue, 2) / time;
}

public float GetLerpK(float deltaTime)
{
return 1 - 1 / Mathf.Pow(2, deltaTime * TimeScale);
}
}
По кровавым словам узнаете их
#лайт
Если бы IT было командой черепашек-ниндзя, то игровая индустрия была бы в ней Микеланджело. Ну а среди грызунов-спасателей геймдеву, конечно же, досталась бы роль Дейла. Мы всегда были эдаким младшим и немного придурковатым персонажем IT-мира. Самый весёлый, но наивный раздолбай в гавайской рубашке, обожающий пиццу, комиксы и попадать в дебильные ситуации — это всё мы. И безусловно, нам есть чему поучиться у более старших и серьёзных коллег: от дисциплины и оценки сроков до культуры софтскиллов и ведения документации. У нас всё ещё полно детских болячек отрасли, как прыщей у подростка. Но всё же это не значит, что какой-нибудь занудный Донателло сможет так же ловко управляться с нунчаками, как это делаем мы. Когда дело доходит до владения палками на цепи, стоит спросить совета у Микеланджело.

К сожалению, на фоне всех хороших трендов взросления индустрии, сближение с энтерпрайзом занесло в нашу песочницу и пару куличиков добротного дерьма. Речь идёт о стадах программистов и менеджеров, которые последние пару лет толпами мигрируют к нам из соседних областей, но при этом совершенно игнорируют специфику геймдева. По моему опыту людям из кровавого крайне трудно вкатиться в разработку игр: здесь другой темп написания кода; другие методы тестирования; другая, в конце концов, динамика изменения ТЗ от геймдизайнера. Но есть люди, которые понимают, что теперь работают с произведением искусства, и пытаются адаптироваться; а есть мудилы, которые этого не хотят. Последние — это, как ни парадоксально, люди поопытнее, сформировавшие уже не только собственные привычки, но и солидное ЧСВ. Это тот чувак у вас в команде, который типа прохавал всё IT, много говорит о софтскиллах и о том, как делать правильно, но в общей телеге его колесо всегда волочится по другой колее. Это он треплет нервы всем артистам бюрократией, и именно на его тасках всегда в итоге происходит фичекат.

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

Начну с моего личного чемпиона по мерзости: «мы продуктовая игровая компания!». Если у вас ещё почему-то не задёргался глаз, то поясню. Дело в том, что у них там в большом IT компании сплошь оутсорсовые, консалтинговые и бог знает какие ещё (уж извините, не разбираюсь). Бывает, что люди там годами таски какие-то делают, а пощупать плоды труда нельзя. Поэтому слово «продуктовая» для гребцов в тугих галстуках — это реально порой единственный глоток неденежной мотивации. Но когда HR радостно сообщает мне о «продуктовой игровой компании», для меня это тавтология. Для любого разработчика игр понятие «игровая компания» по умолчанию подразумевает работу над продуктом. Мы пришли в профессию, чтобы делать игры, и в большинстве своём только в таких компаниях и работали. «Продуктовость» это не бонус для нас, а вещь сама собой разумеющаяся. Это вот если вдруг компания не делает собственные игры, а аутсорсит непонятно что — вот тогда уже надо уточнять. Поэтому если вам кто-то из разрабов презентует свою компанию, как «продуктовую», то бегите. Вы там вряд ли встретите крутых артистов, которые делают вещи, или идейных программеров. Если они там были, то разбежались. Судя по лексикону, скорее всего это просто студия-симулякр из энтерпрайзников, где думают не об игре и игроках, а об удовлетворении шизы какого-нибудь заказчика (совсем как в вэбе, да).
Нетерпеливый подписчик возразит мне, что отличный вокабуляр это вовсе не проблема и я зря драматизирую; но язык определяет сознание, и в случае геймдева неизбежно приводит к натягиванию совы на известно что. Приведу пример поубедительнее. Если вы загуглите уровень зарплат в геймдеве, вы скорее всего найдёте опросы, где разработчики разбиты на Frontend, Backend и Fullstack. Привычное разделение в IT, но которое совершенно бессмысленно в геймдеве. Тут сразу несколько проблем.

Прежде всего, поставьте себя на место разработчика игрового движка синглплеерной игры. С одной стороны сервера нет, так что он работает, получается, над клиентом. Записываем во Frontend. С другой стороны, он не пишет саму игру, а для скриптеров его API выступает вполне себе Backend’ом. Наконец, можно заключить, что есть элементы того и другого, и выбрать вариант Fullstack. С равной вероятностью можно занести себя куда угодно. Подобные неоднозначности возникают и со многими другими геймдев-специализациями, если задуматься. В итоге такой опрос не показывает ничего, кроме погоды в унитазе составителя.

Но даже если представить, что мы договорились, кого в какую группу относить, это всё равно бессмысленные надкатегории, которые ничего не значат. В вэбе и мобильных приложениях Front и Back это естественным образом выделившиеся специализации, но в геймдеве такого разделения не произошло. Generalist-программисты у нас разделяются на геймплейщиков, графических, движкописателей/туловиков, иногда отдельно интерфейсщиков. Из геймплейщиков можно отдельно выделять скриптеров; из графических тех.артистов; движковых можно дальше дробить на физику, звук, АИ, сеть и т.п., но это не принципиально. Я не претендую на полноту классификации, но главное, что за категориями «графический программист» или «программист UI» стоят реальные вакансии и карьеры людей, которые двигались по этому пути, а Frontend-программист в геймдеве — это просто искусственная категория. И игровой код, и ИИ, и физика могут выполняться как на клиенте, так и на сервере, но различать их по этому признаку плохая идея.

Это ведь нетрудно задуматься, что некоторые привычные процессы или подходы просто неприменимы в геймдеве; что существует специфика работы. Но львиную долю набежавших энтепрайзников не посещает такая мысль даже на уровне терминологии. Теперь представьте, насколько часто в ваших внутренних процессах происходят спотыкания о всевозможные нюансы, если ваш HR тратит время разработчика на рассказы про вашу продуктовость; PM не видит перед собой геймплейного и графического программиста, а оперирует в голове выдуманными категориями; а программист интерфейсов требует ТЗ за два месяца и по шаблону мобильных приложений. И это только внешние очевидные проявления, а дьявол в мелочах и повседневном опыте.

Если слышите, что кто-то бездумно тащит в наше ремесло чужую терминологию, гоните его, насмехайтесь, зовите земляным червяком.
А давайте поболтаем?
#лайт
Знаете чего не хватает, когда все месяцами работают удалённо? Технической болтовни из-за мониторов. Нормальное гиковское чувство рассказать о том, какой крутой пейпер прочитал вчера ночью, и как здорово раст уделывает кресты на синтетических тестах. Не уныло бросить ссылку в чат, а голосом раскидать императивщику за тайп-дедукшен здорового человека.

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

Мне прислали инвайт пару дней назад и я немного помониторил, если там жизнь в плане игростроя. Оказалось, что есть! Днём, разумеется, никого нет, но по вечерам там появляется «геймдев курилка», в которой всегда на удивление много людей. Причём не левого народу: если вы в индустрии не первый год или тусили пару раз на конференциях, то без труда отыщите кучу знакомых лиц на аватарках. Но, к сожалению, тон разговоров в курилке, как это часто бывает, захватили основатели студий, инвесторы и менеджеры. Эдакий дискурс старого DTF (ещё до смены владельцев). Вклиниваться в эти высокие разговоры о free to play не очень интересно; да и это совсем не то, чего просит душа простого технаря. А запрос на свою комнату, мне кажется, есть.

Я предлагаю собраться втроём или вчетвером, каждому заранее прочесть/изучить по одной интересной статье или пейперу, и рассказать каким-нибудь воскресным вечером друг другу, почему этот подход классный (или отстой). Это может быть новый proposal в С++, какая-нибудь фича из kotlin, статья про новый метод рейтрейсинга или же и вовсе эзотерический язык программирования. Что угодно. Расширим кругозор друг друга, а может чего интересного узнаем от аудитории.

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

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

Чем тогда это отличается от созвона в дискорде?
Тем, что в дискорде не бывает случайной аудитории. Никто не узнает, что на каком-то никому неизвестном сервере собрались три калеки и что-то обсуждают. Никто не подключится, не задаст вопросов и не вклинится в разговор. Здесь же мы можем создать комнату в clubhouse заранее и расписание увидит много людей. Кто-то поставит в календарь, а кто-то подключится в прямом эфире и «поднимет руку», чтобы ему тоже дали слово. Это может быть гораздо более интересный движняк, чем разговор на пустом сервере.

Так и чё?
Один я ничего не сделаю. Нужно ещё хотя бы пара человек, кому интересно читать/изучать что-то новое для себя, и кому интересно это обсудить в таком формате. Пишите в комментариях, кому идея кажется хорошей. Ну и о том, как вас достали разговоры о clubhouse из всех утюгов, тоже туда пишите. Не держите в себе :)