ThisIsZolden

На Пикабу
Дата рождения: 27 ноября
в топе авторов на 55 месте
22К рейтинг 739 подписчиков 3 подписки 20 постов 11 в горячем
Награды:
5 лет на Пикабу

Храм носа

Храм носа Комиксы, Сюрреализм
Показать полностью 1

Что может случиться, если сестра — ведьма

Что может случиться, если сестра — ведьма Комиксы, Сюрреализм, Абсурд
Показать полностью 1
249

Мой тернистый путь в геймдев

1. Первая игра, обучение


Многим наверняка знакомо ощущение: смотришь со стороны на свою ежедневную рутинную работу, и думаешь, какой фигнёй я занимаюсь, на что трачу жизнь. Делать игры мне казалось единственным осмысленным занятием в жизни. Знаете, тяжёлое детство, китайский клон NES на чёрно-белом телевизоре, импринтинг. Но попытка что-то поменять порой становится авантюрой, полной неудач и страданий. Что, конечно, не повод не вставать на эту дорожку.


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


С виду всё было просто: выбираешь движок, изучаешь, делаешь игру, выпускаешь - и ты разработчик! Ну что же, раз просто, я выбрал Юнити и нырнул в него с головой.


Первую игру я задумал чтобы изучить движок. Хотя по-честному собирался создать полноценную, интересную, богатую фичами игру, чтобы самому с удовольствием играть. Выбрал жанр - стрелялка от третьего лица с элементами RPG. Накумекал геймдизайн и начал разработку.


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

Игра вышла приятная, но я столкнулся с двумя радикальными сложностями, из-за которых проект дальше не пошёл, и его пришлось оставить:


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

2. Я с энтуиазмом задействовал физику, и она начала значительно тормозить геймплей. Но по причине из первого пункта оптимизировать было бы очень сложно: код давно обратился в хаос.


Выводы:


1. Лучше выбирать масштаб игры по плечу, идти от простого к сложному.

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

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

2. Первая выпущенная игра


Первая игра не получилась, но получилось разобраться с Юнити. Но всё же остался недоволен собой, потому что до выпуска игры не дошло. И я решил сделать что-то простое. Что я гарантированно доделаю и выпущу. Мысленно прокрутив всё разнообразие жанров, решил сделать космический 2д скролл-шутер с минимальным количеством оружия и апгрейдов.


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


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

Мой тернистый путь в геймдев Инди, Gamedev, Личный опыт, Unity, Steam, Видео, Длиннопост

Вывод:


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


3. Попытка геймдизайнить


Неприятно, когда ваша игра никому не нужна. Когда я оправился от этого опыта и снова исполнился жаждой покорить мир геймдева, решил создать что-то оригинальное. Но при этом хотелось всё-таки придерживаться области востребованных игр, ориентироваться на успешные примеры. Тогда была эпоха термоядерных взрывов таких хитов, как 2048, angry birds, flappy bird. Я перебирал идеи, придумывал и отвергал фичи, не спешил. И в однажды в электричке, по пути на дачу, меня посетила "та самая" идея. Простая и гениальная. Я придумал, как скрестить 2048 и тетрис. Вместо цифр использовал геометрию фигурок тетриса. Нужно было всего лишь в поле 4х4 разместить 4 фигурки тетриса, тогда клетка освободится. И происходит это точно так же, как в 2048, путём сдвига всего игрового поля. Идея показалась мне стройной и неизбыточной. И за месяц плотного кодинга я доделал игру.

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


Если кому-то интересно, игра есть в гугл плей, и она бесплатна. [ссылка]


Вывод:


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


4. Попытка несимметричной коллаборации


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


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


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

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

Игру я решил не заканчивать, потому что по сути она была обычным 2д-платформером. Ставка была на эстетику и узнаваемость стиля, а с обычными ассетами из стора она была бы безлика.


Вывод:


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


5. Эксперимент с эволюцией


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


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


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


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

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


Вывод:


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


6. Mines and Magic, первая попытка


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


И вдруг осознал: вся история с моими попытками перейти в геймдев началась с успешного мода в Старкрафте 2. Это была игра по большей части моего дизайна, и она мне самому очень нравилась. Так почему бы мне не воссоздать её? Да, технически она сложная, но я уже опытен, да и когда меня останавливали сложности. Так что я решился, и исполнившись воодушевления я принялся за работу.


Месяц ушёл на геймдизайн. Я решил сначала сделать синглплеер-кампанию, и только потом заниматься мультиплеером. Так что пришлось перелопатить изначальный геймплей, добавить много новых фич, чтоб сделать интересным именно синглплеер. Ещё месяц я продумывал программную архитектуру. Для такого сложного проекта нужен был движок уровня варкрафт 3. И сложность кода не должна была зависить от масштаба. Любое количество контента и фишек должны были быть реализуемы на изначально созданной структуре внутреннего представления данных. Так что поработал я серьёзно, всё досконально продумал, изрисовал схемами стопку листов, и начал кодить.


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

Мой тернистый путь в геймдев Инди, Gamedev, Личный опыт, Unity, Steam, Видео, Длиннопост

Всё отлично работало, но я обнаружил, что для того, чтобы игра достигла уровня демки, требуется много контента. Иконки, звуки, фоновая графика и огромное количество 3д-моделей. А так как я год отдавал предпочтение работе над игрой, а не фриланс-подработкам, денег у меня почти не осталось, так что платить за контент было не чем. Я написал разным людям из индустрии, попытался привлечь инвестиции, но не вышло.


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


Вывод:


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


7. Разочарование, работа на дядю, любопытство


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


Не удивительно, что я сам не заметил, как у меня появилась одна чертовски привлекательная идея для эксперимента, и в свободное время я начал неторопливо её реализовывать. Смысл был в том, что вот были старинные игры, вроде Scorched Earth или Worms. Сражения там проходили на 2д-земле, которую взрывы разрушали, но было это технически не более, чем вычитанием пикселей из картинки, вроде как ластиком в фотошопе стёрли. И я подумал, а что если бы каждый пиксель был физическим объектом. И всё бы реалистично взрывалось и опадало кусками разворошённой почвы.


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


Так родилась игра Jelly in the Sky, вы может быть о ней слышали. Я работал над ней в течение года, параллельно фриланся. И я был счастлив в течение этого времени. Эксперименты были увлекательны, было много сложного программирования. Каждый день я решал головоломные задачи, и меня очень радовало то, что я наблюдал в результате на экране.

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


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


Но я не жалею. Этот эксперимент позволил мне снова поверить в свои силы и принёс немного денег.


Выводы:


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


8. Неопределённость и надежда


После выпуска Jelly in the Sky я осознал, что у меня лежит классная, большая, сложная - и не законченная игра. И нужно непременно её доделать. Кое-какие средства, чтобы докупить нужные ассеты у меня были. Так что я самозабвенно взялся за дело. Уделил игре всё свободное время. Хотя её движок был полностью готов, обнажилась масса разнообразных больших и маленьких вещей, которые требовалось доделать.


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


И она продвигалась, обретала черты готового к выпуску продукта.

С нового года я вышел на финишную прямую и все силы положил на доделывание игры, и вчера выпустил её в Стиме в ранний доступ.


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


Выводы в целом по статье:


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


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


3. Никого не слушай и совершай собственные ошибки. Жизнь сложна, в ней нет рецептов, каждый ищет свой и набивает шишки. И в этом - сложная красота существования.

Показать полностью 2 6
162

Мой путь в гейм дизайн через горнило моддинга

Первый акт: скука и любопытство


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


При всей моей любви к стратегиям, я быстро наигрался в СК2 — механика игры не изменилась принципиально со времён первого варкрафта. Но с приятным удивлением я открыл для себя созданные игроками моды. Каждый из них по сути был отдельной мультиплерной игрой со своей уникальной механикой. Все же знают пример с Дотой, которая возникла как мод в Warcraft 3 и затем стала самостоятельной популярной игрой.


И вот, я с наслаждением погрузился в увлекательное многообразие модов. Азарта и удовольствия от них было не в пример больше, чем от самого старкрафта. На сервере игры сортировались по популярности: во что больше народу играет, то и выше в списке. Наигравшись в самые популярные, я проматывал список ниже, желая узнать, какие ещё игровые механики придумали авторы модов. Там я обнаружил, что кто-то сделал в виде мода игру Command and Conquer, а ещё кто-то — Age of Empires. Стало интересно: а не превратили ли в мод старую игру Z? Был уверен, что наверняка, классная игра была. Но нет, её не было.


"А что если сделать её самому?" — подумал я.


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

О это чувство, когда сделаешь игру и с кем-то в неё играешь! Стыд и восторг. Гениальность и баги.

Мой путь в гейм дизайн через горнило моддинга Gamedev, Моддинг, Инди, Starcraft 2, Unity, Длиннопост

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


Вышло так, что несмотря на неплохую механику, карта была интересна на 2-3 раза, и потом люди уходили. Хвалили идею и исполнение, но шли играть в другие игры. Я ревниво смотрел, как люди раз за разом возвращаются в свои любимые карты, а моя малышка погружается в пучину забвения. Но я уже познал сладость признания! Мне хотелось славы, вершин, чтоб люди наперебой кричали, до чего хороша моя игра. И главное, я понял, что овладел великолепным инструментом, и теперь могу сделать любую игру, какую захочу.


Второй акт: одержимость


Осознав потенциал могущества я, мрачно расхохотавшись, задумал масштабное и беспроигрышное: я решил реализовать в виде карты заслуженную, всем знакомую и любимую игру — Heroes of Might and Magic. Решил сделать всё: замки со строительством и апгрейдами, наём войск, опыт и скилы героев, заклинания, монстров, сокровища и артефакты, шахты — вообще всю механику оригинала. Но в реальном времени! Чтобы если два героя встречаются, их огромные армии нападали друг на друга в виде оравы юнитов. Во мне бурлили амбиции, я хотел вжарить как следует, чтоб все наконец-то поняли, в чью игру должны играть.


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

Мой путь в гейм дизайн через горнило моддинга Gamedev, Моддинг, Инди, Starcraft 2, Unity, Длиннопост

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


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


Вот так. Снова мне не удалось сделать офигительную игру, но желание никуда не делось.


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


Не желая и не ведая отдыха, я за несколько месяцев сделал Цивилизацию на движке старкрафта.

Мой путь в гейм дизайн через горнило моддинга Gamedev, Моддинг, Инди, Starcraft 2, Unity, Длиннопост

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


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


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


Пропущу поиск идей, дизайн и планирование и разработку, там всё как обычно.

Мой путь в гейм дизайн через горнило моддинга Gamedev, Моддинг, Инди, Starcraft 2, Unity, Длиннопост

Предположу, что читателю уже понятна логика этого повествования. Да, новая игра тоже провалилась. Я намешал всего что мне пришло в голову, создал эклектичный гибрид жанров tower defense, action и RPG. Это даже могло сработать, если бы я не допустил грубую ошибку в геймплейной механике. В каждой из двух команд-соперников было по три игрока, но волна монстров для каждой команды была общей, и в созданных условиях выигрывала стратегия, когда один игрок в команде строит башни, а два других на подхвате. Игроки одной команды начинали конкурировать друг с другом за роль главного побивателя, и расстраивались, когда проигрывали в этой внутрикомандной борьбе. А от сотрудничества в первую очередь должен выигрывать игрок, и только во вторую — команда.


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


Третий акт: осмысленность


Не помню, сколько времени прошло прежде, чем я взялся за новую карту. Но она стала для меня особенной. Впервые я делал её не из желания сделать популярный мод, а из любви к искусству и из желания прыгнуть выше головы. Я решил воссоздать на движке ск2 другую стратегическую игру (Rise of Legends), которую мало кто знал из-за провалившейся маркетинговой компании её издателя. Но игра это была роскошная, для сражений по сети с другими людьми она была очень хороша, потому что разработчики значительно развили жанр RTS, добавив кучу уникальных механик. Но эта прекрасная игра умерла: в ней были баги, которые никто не исправлял, игроков становилось всё меньше, и в какой-то момент сервер отключили.


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

Мой путь в гейм дизайн через горнило моддинга Gamedev, Моддинг, Инди, Starcraft 2, Unity, Длиннопост

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


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


А когда я загрузил готовую карту на сервер, за несколько часов она угодила в топ 5 по популярности и уже несеолько лет его не покидает.

Мой путь в гейм дизайн через горнило моддинга Gamedev, Моддинг, Инди, Starcraft 2, Unity, Длиннопост

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


Эпилог


Возможность загружать игру на сервер и мгновенно получать обратную связь от игроков помогла мне расстаться с иллюзиями и начать делать игры осмысленно. Но главной для меня проблемой моддинга в ск2 было не отсутствие опыта дизайна игр, а ограничения редактора, который был слишком высокоуровневым инструментом, чтобы воплощать все мои идеи. Кроме основных карт я делал прототипы, но эксперименты наталкивались на отсутствие необходимого функционала. Так что решение назревало давно. И после успеха новой карты я решил, что с гейм-дизайнерским опытом у меня порядок, перешёл на Юнити и стал делать standalone-игры. И это оказалось восхитительно: выйти за пределы технических ограничений, получив возможность напрограммировать любой нужный функционал. Ух, я разошёлся. Например, одну из недавних игр я сделал в виде физической симуляции, так что всё в ней было реалистично разрушаемо.

Мой путь в гейм дизайн через горнило моддинга Gamedev, Моддинг, Инди, Starcraft 2, Unity, Длиннопост

Если эту статью хорошенько полайкают, как-нибудь напишу о своём пути в инди-геймдеве после перехода на Юнити.

Показать полностью 7
158

Физическое моделирование на GPU с использованием compute shader в среде Unity3D

Я тут публиковал раньше постик о своей игре, физической симуляции, вычисляемой на видеокарте. Люди спрашивали, как это сделано. Но та игра была слишком громоздкой, чтобы по ней что-то объяснять. Поэтому, я сделал небольшой проектик, чтобы по нему всё объяснить. Это двумерная модель волос, вот гифка:


https://i.imgur.com/pxfW7cC.gifv


И для неё я написал подробный туториал:


https://habrahabr.ru/post/346268/


Там есть ссылка на сам проект с моделью волос. И там же есть есть ещё ссылка на более простой туториал, посвящённый тоже вычислениям на видеокарте.


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

20

Рисование фрактала на GPU, руководство, лёгкий уровень

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


https://habrahabr.ru/post/346260/


Программа рисует фрактал мандельброта с помощью компьют шейдера.


Это пока простой туториал, скоро напишу более сложный, посвящённый физическому моделированию на GPU, в котором в качестве примера будет вот это


https://i.imgur.com/pxfW7cC.gifv

385

Появился сервис для написания визуальных демок на javascript не длиннее 140 знаков

Называется "Dwitter", любой приходит, кодит, сразу видит результат, публикует в общую ленту, все лайкают. Суть в том, чтоб минимумом кода изобразить наиболее впечатляющую визуалку. Особенно оценят те, кто застал в 90-е эпоху микроскопических исполняемых файлов, рисующих сложную красоту.


Вот лучшие работы: https://www.dwitter.net/top


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

5116

Доделал игру, работающую на видеокарте

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


Основная особенность игры в том, что она представляет собой физическую симуляцию, которая выполняется на графическом процессоре. Основной код игры - это огромный compute shader, 6 тысяч строк на HLSL. Десятки тысяч взаимодействующих частиц обрабатываются параллельно, и выходит довольно быстро. Всё в игре сделано из этих частиц. Вот видосик с геймплеем:

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


Достоинства:


1. Производительности GPU в 10-100 раз выше, чем у процессора, когда дело касается параллельных вычислений. Это очен много, так что на видеокарте можно делать принципиально другие игры, чем на процессоре. Моя игра просто не работала бы на CPU (то есть, была бы слишком медленной).


Недостатки:


1. Мало туториалов. Я потратил довольно много времени, чтобы всё изучить. И ещё больше - чтобы решить возникавшие проблемы.


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


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


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


5. Графические API на разных платформах немного отличаются друг от друга. В простых случаях они совместимы со стандартом directX, но у меня - не простой случай. У Metal одно небольшое ограничение, на андроиде - другое, на Vulkan - третье. В итоге, моя игра работает только на Windows.


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


Но по итогам, я всё-таки доволен, что сделал что хотел. Очень интересно было посмотреть, каково играть в полностью физической, разрушаемой среде. Было бы неплохо, если б все графические API были совместимы, надеюсь, в будущем это всё устаканится. Потому что технология очень полезная из-за гигантского выигрыша в производительности. Вовсе не обязательно делать целую игру, можно перенести некоторые части игры на обработку в видеопроцессор. Например, поиск пути в стратегиях. А сейчас не любой разработчик будет готов писать compute shader, если всё равно его придётся дублировать, на случай, если игра запущена на платформе, не поддерживающей вычисление на видеокарте.


Ну и если кто-то вдруг захочет попробовать свои силы в этой области, то вот парочка туториалов:


http://kylehalladay.com/blog/tutorial/2014/06/27/Compute-Sha...


http://www.emersonshaffer.com/blog/2016/5/11/unity3d-compute...

Показать полностью
Отличная работа, все прочитано!