Русский
Русский
English
Статистика
Реклама

Gamedevelopment

Разработка своей Just Shapes amp Beats и как всё началось

12.04.2021 00:19:09 | Автор: admin

Немного о себе

Здравствуйте, мне 16 лет и я люблю играть в Just Shapes & Beats (JSAB). Одним прекрасным днём я узнал о такой игре, как JSAB. Я был очень поглощён геймплейной частью, разработчики создали больше 30 уровней из простых геометрических фигур - это же гениально! Но просто так играть мне не хотелось, мне хотелось создавать что-то своё. И так как у JSAB есть редактор уровней, но он находится в pre-alpha тестировании уже больше 2 лет, а уровни делать хочется, мною было принято решение создать свою JSAB. Теперь приступим к самому началу.

Самые начала начал

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

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

Техническая часть

Приступим к технической части игры, и начнём с создания объектов.

Создание объектов

Все объекты создавались через Instantiate, что, как позже выяснилось, очень сильно бьёт по оптимизации. Просто представьте такую ситуацию

public GameObject Obj;private void Start(){  for(int i = 0; i < 100; i++){   GameObject.Instantite(Obj);  }}

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

Также все объекты создавались просто в игровом мире, что конечно никуда не годилось. Позже я создал канвас, но об этом уже в другой части. Для создания объектов использовался JSON формат, в который я вручную записывал типы атак, время их появления и параметры. Файлик выглядел примерно так

{  attacks: [    {      "attackType": "DotCircle",      "time": "1,0828",      "dotCount": "20"    },    {      "attackType": "Beam",      "time": "3,06713",      "width": "50"    }  ]}

При запуске игры этот JSON файл парсился в массив и через Update брал время каждой атаки и сравнивал его с текущим временем музыкального трека.

Анимации

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

Animation anim = GetComponent<Animation>();AnimationCurve curve;// create a new AnimationClipAnimationClip clip = new AnimationClip();clip.legacy = true;// create a curve to move the GameObject and assign to the clipKeyframe[] keys;keys = new Keyframe[3];keys[0] = new Keyframe(0.0f, 0.0f);keys[1] = new Keyframe(1.0f, 1.5f);keys[2] = new Keyframe(2.0f, 0.0f); curve = new AnimationCurve(keys);clip.SetCurve("", typeof(Transform), "localPosition.x", curve);// update the clip to a change the red colorcurve = AnimationCurve.Linear(0.0f, 1.0f, 2.0f, 0.0f);clip.SetCurve("", typeof(Material), "_Color.r", curve);// now animate the GameObjectanim.AddClip(clip, clip.name);anim.Play(clip.name);

И здесь всего лишь прописана трансформация объекта по оси X и изменение его цвета.

Коллайдеры

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

Лирическое отступление

Я очень долго провозился с кругом из точек, я просто перелопатил массу материала, но не мог найти ответы. В итоге оказалось, что можно просто использовать синусы и косинусы, но тут тоже были подводные камни. C# в функцию синуса и косинуса принимает значения в радианах. Я очень долго не мог понять в чём же именно проблема, так как давал значение в градусах. Мои точки никак не хотели лететь туда, куда надо, но позже узнал что и как работает. Чтобы перевести градусы в радианы нужно нашу градусную меру умножить на и разделить на 180, но ещё позже я выяснил, что в Unity уже есть готовое решение. Нужно градусную меру (AngleInDegree) умножить на переменную.

public float AngleInDegree = 90f;private void Start(){  float cos = Mathf.Cos(AngleInDegree * Mathf.Deg2Rad);  float sin = Mathf.Sin(AngleInDegree * Mathf.Deg2Rad);}

Начало "новой эпохи"

В конце концов монохромная палитра надоела глазу и было принято решение использовать оригинальную розово-голубую палитру. Также вся механика была переработана, я отказался от использования JSON в качестве файла уровня и перешёл на использование встроенного юнитевского таймлайна. На нём можно было создавать кастомные маркеры (материал, который я использовал, если вдруг понадобится). И я создал несколько маркеров, отвечающих за свои атаки. Также связал Playable (компонент таймлайна, который отвечает за проигрывание и т.д.) с AudioSource'ом (музыка) и в итоге всё это было синхронизировано.

В итоге вышла такая вот штука:

Небольшой итог

После добавления ещё нескольких атак, я создал наконец первый уровень, ну точнее сделал ремейк уровня Chronos (и то не полностью ремейк).

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

Подробнее..

Из песочницы Страх и ненависть в геймдеве от первых шагов до первых денег

10.07.2020 20:13:00 | Автор: admin
В этой статье хочу поделиться нашей историей в геймдеве. В ней нет ни полного провала, ни грандиозного успеха, и история в первую очередь об ошибках, растянутых на несколько лет. Плюс ко всему, лично я люблю почитать о других инди-разработчиках: возможно, и наша история покажется кому-то интересной.

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



О нас


Мы R-V Games, маленькая компания, состоящая из двух человек.

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

Я отвечаю за графическую часть и по большей части геймдизайн. С 2011 по 2017 включительно занималась фрилансом по части дизайна и графики. Получаю удовольствие только когда занимаюсь проектом комплексно (от идеи и плана до механик и графики), что несёт в себе определенные проблемы: всё знать и уметь в совершенстве невозможно.

Мы познакомились весной 2013-го года: Макс написал мне на одной фриланс-бирже с предложением сделать игру. Идея быстро завяла, и вновь объединились мы только в феврале 2017-го.

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

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

Первые шаги


Первая игра, которая продвинулась почти до полноценного прототипа 2D платформер с рабочим названием Cosmic Rescuers про лиса Бакстера, путешествующего с одной планеты на другую, чтобы спасти других животных от инопланетян-захватчиков. Нарисовали и кое-как анимировали Бакстера и несколько врагов, собрали два демо-уровня и простое меню из двух разделов. Даже запустили какую-то рекламу вк с роликами из игры и насобирали лайков.



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

Вывод 1: Даже если вы работаете в маленькой команде или в одиночку, необходим чёткий план работ, зафиксированный в документе.

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



Это, наверное, было самым глупым из наших начинаний: денег на сервера нет, аналогичных игр от нормальных компаний тьма, нас всего двое, а у меня ещё и нет опыта в 3D. Никакого. Совсем. Несмотря на здравые предложения Макса купить ассеты, я решила, что научусь и всё сделаю сама. Засела за изучение Блендера и работа началась И, к счастью, быстро закончилась, когда мы, пусть и не очень своевременно, осознали, что этот долгострой нам также не потянуть.

Вывод 2: Адекватно оценивайте свой опыт и проект, на который замахнулись. Использовать сторонние ассеты не стыдно, иногда это единственный способ довести проект до релиза в маленькой команде.

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



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

Вывод 3: Анализ рынка! Сколько в сети похожих игр? Когда они были выпущены? Сколько у них установок? Продолжают ли выходить обновления? Чем ваша игра лучше?

Деньги кончаются


В конце 2017 я полностью свернула фриланс, лишившись не только головной боли, но и средств к существованию. Запасы Макса также подходили к концу. Учитывая финансовую ситуацию, при разработке зомби-тира мы приступили к попыткам найти инвестора. Большинство фондов, бизнес-ангелов и издателей либо отвечали отказом, либо предлагали обратиться ещё раз, когда игра будет полностью готова, запущена, и мы заимеем метрики. Mail.ru Ventures и AppQuantum (которые тогда, кажется, только начинали издательскую деятельность, поэтому были открыты к диалогу больше других) ответили, что им интересен проект с движением, а не тир. И то не факт: опыта изданных игр-то у вас, ребята, нет.

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

Вывод 4: Подавляющее большинство издателей и инвесторов ждут от вас метрик проекта. Либо понимания, что вы знаете, что и как собираетесь делать.

Через некоторое время нам, как мы подумали, сказочно повезло: бизнесмен из Латвии, знакомый семьи Макса, согласился инвестировать в нас и даже помочь с релокацией. Инвестиции были скромные (по сути, средняя зарплата IT в Латвии на каждого + некоторая оговоренная сумма на маркетинг). По договоренности, сразу после релокации по туристической визе он должен был принять нас на работу в свою компанию для легализации проживания, а позже мы открываем совместную, уже исключительно игровую компанию.

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

Вывод 5: Все договоренности должны быть юридически закреплены.

Свет в конце тоннеля: первые доходы


До того, как мы с Максом объединились в совместную компанию, он сотрудничал с фриланс-художниками. Совместно они сделали 2D фитнес-кликер, но выпущен он не был. В мае 2018-го, примерно одновременно с Deathcrush, Макс решил выпустить в сторы и свою старую игру, поместив в название только ключевики Fitness Gym. Если зомби не приносила вообще ничего, то в кликере иногда что-то покупали и даже писали хвалебные отзывы, что нас очень удивляло. Конечно, это были сущие копейки, но хотя бы минимальный интерес к такой простой и некрасивой игре заставил нас задуматься: ну, может, хотя бы она будет приносить какие-то деньги, есть привести её в человеческий вид? Нас смущало, что фитнес-игры в сторах непопулярны: у них относительно мало загрузок и обновления прекращались вскоре после выхода. Но вариантов было не так много: либо ускориться и сделать еще одно усилие в геймдеве на свой страх и риск, либо искать работу.

Примерно за 3 месяца мы создали 3D версию этой игры с небольшим функционалом и выпустили обновление вечером 31 декабря 2018 года. С тех пор примерно полгода она приносила абсолютный минимум, пока в июле 2019 компания Codigames не начала активную рекламную кампанию очередной своей игры в тематике фитнеса, которая заодно подняла в поиске и наш проект из-за совпадения ключевых слов.



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

Но недавно мы приняли волевое решение: хватит это терпеть! (с) Хватит делать игры, которые, в первую очередь, не вставляют нас самих. Из-за подхода, ориентированного на желание хоть как-то заработать, а не заработать через то, что любишь, годы работы были возможны только благодаря железобетонному упорству. Ни для сохранения рабочего настроения, ни для психики в целом это не было полезным.

Вывод 6: Делайте то, что вам нравится. Тянуть проект, который не интересен, то ещё удовольствие.

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

Процедурная генерация карты

01.04.2021 16:06:37 | Автор: admin

Процедурная генерация DEV BLOG

Dobr Den, сейчас я Вам покажу пример процедурной генерации карты, наUnreal Engine 4.

Функция расчета рандомных точек на игровом поле:

Функция расчета рандомных точекФункция расчета рандомных точек

Давайте подробнее разберем функциюFor Loop.

ЦиклЦикл

Firs Index отвечает за начальную точку отсчета цикла. For Loop цикл, который будет выполниться от First Index до Last Index каждый кадр. Last Index Грубо говоря сколько раз надо выполнить цикл.

Loop Body Логика, которая будет циклична (в нашем случае 150 раз). Index Сколько шагов выполнено из 150 раз.

Теперь Нам надо занести в цикл логику. Начнем с рандомных чисел.

РандомайзерРандомайзер

Random Float in Range Все просто рандомайзер на максималках. Min Минимальное число Max Максимальное число Return Value Рандомное число в диапазоне который мы задали

Нулевая точка координатНулевая точка координат

Break Transform В моем случае это исходная точка координат спавна объектов.

Объяснять что такое Rotation, Scale. Нет смысла.

Начнем с математической части нам надо добавить к нулевой точке координат рандомное число.

МатематикаМатематика

Make Vector объединяет обычные числа в тип Location.

Make VectorMake Vector

Далее по списку вывод данных из функции:

Вывод данныхВывод данных

На выходе у нас стоит:

True Цикл в нашем случае мы спавним Actor Tree 2 (Дерево).

Return Value Рандомная координата для дерева в цикле.

Completed Выход из цикла.

Теперь можно вместо одно дерева, сразу три вида объекта сгенерировать на карте.

Итог:

Готовлю информацию для статьи про Dedicated server(Удаленный сервер), Мультиплеер, Создание сессий и подключение к ним, система стрельбы и сам процесс разработки игры.

Подробнее..

Перевод Машинное обучение в разработке игр

22.04.2021 10:12:30 | Автор: admin

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

При разработке игрового процесса баланс обычно настраивается по следующей схеме:

  1. Проводятся тысячи игровых партий с участием тестировщиков.

  2. Собираются отзывы и на их основании в игру вносятся корректировки.

  3. Шаги 1и2 повторяются, пока результат не устроит и тестировщиков, и гейм-дизайнеров.

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

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

Chimera

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

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

  • Игроки могут использовать:

    • существ, которые атакуют (урон зависит от показателяатаки)или защищаются (теряя показательздоровья);

    • заклинания, которые дают особые эффекты.

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

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

  • Игра заканчивается, когда игрок доводит здоровье химеры противника до нуля.

Обучение игре в Chimera

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

Результаты игры агента против лучшего написанного вручную ИИ-алгоритма по мере обучения. Исходная нулевая версия агента делала ходы случайно.Результаты игры агента против лучшего написанного вручную ИИ-алгоритма по мере обучения. Исходная нулевая версия агента делала ходы случайно.

В качестве игрового состояния, которое подается на вход CNN, мы выбрали кодированное изображение. Такой подход оказался эффективнее всех процедурных агентов и нейронных сетей других типов (например, полносвязных). Выбранная архитектура модели достаточно компактная, чтобы ее можно было выполнять на ЦП за разумное время. Поэтому мы загрузили веса модели и запускали агент в реальном времени в клиенте игры Chimera на платформеUnity Barracuda.

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

Настройка баланса в Chimera

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

Первая,Evasion Link Gen,состояла из заклинаний и существ со способностями, которые давали дополнительную энергию связи, необходимую для развития химеры. В ней также были заклинания, позволявшие существам уклоняться от атак. В колодеDamage-Healнаходились существа с разными показателями силы и заклинаний, лечившие и наносившие незначительный урон. Мы думали, что эти колоды будут примерно равносильны, однакоEvasion Link Genпобеждала в 60 % случаев при игре противDamage-Heal.

Собрав разные показатели по биомам, существам, заклинаниям и развитию химер, мы сразу увидели две вещи:

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

  2. Существо Тирекс оказалось чересчур сильным. Его появление в игре тесно коррелировало с победами, и модель всегда старалась играть с Тирексом, невзирая на штрафы за его вызов в неподходящий или перенаселенный биом.

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

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

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

Ослабив Тирекса, мы снизили зависимость колодыEvasion Link Genот чрезмерно сильного существа. Но даже при этом соотношение побед сохранилось на уровне 60/40 вместо 50/50. При детальном рассмотрении журналов отдельных игр стало видно, что они часто велись без продуманной стратегии. Проанализировав данные снова, мы обнаружили ряд других областей, где можно было внести изменения.

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

С новыми корректировками мы получили итоговые сбалансированные показатели для двух колод:

Заключение

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

Слова благодарности

Этот проект был реализован при поддержке множества людей. Мы благодарим Райана Поплина, Максвелла Ханнамана, Тейлора Стейла, Адама Принса, Михала Тодоровича, Сюэфан Чжоу, Аарона Каммарата, Эндипа Тура, Транга Ле, Эрин Хоффман-Джон и Колина Бозвела. Спасибо всем, кто участвовал в игровом тестировании, давал советы по игровому дизайну и оставлял ценные отзывы.

Подробнее..

Перевод Семь талантливых стажеров AIUnity 2020. Часть 1

02.12.2020 20:12:10 | Автор: admin

Будущих учащихся на курсе "Unity Game Developer. Basic" приглашаем посетить открытый вебинар на тему "2d-платформер головоломка".


А пока делимся с вами переводом интересного материала.


Каждое лето AI@Unity набирает группу стажеров для работы над высокоэффективными технологиями, которые призваны продвигать нашу миссию на расширение возможностей разработчиков Unity с помощью инструментов и сервисов искусственного интеллекта и машинного обучения. Прошлое лето не было исключением, и команда AI@Unity была рада принять 24 талантливых стажёра. Эта серия посвящена семи стажерам исследователям и инженерам из команд ML-Agents и Game Simulation: Yanchao Sun, Scott Jordan, PSankalp Patro, Aryan Mann, Christina Guan, Emma Park и Chingiz Mardanov. Далее вы узнаете об их опыте и достижениях во время стажировки в Unity.

Летом 2020 года мы набрали в организацию AI@Unity 24 стажера, проекты семерых из которых рассмотрим здесь. Что особенно примечательно, так это то, что все семь проектов носили экспериментальный характер, что несомненно помогло нам расширить границы наших продуктов и сервисов. Все семь проектов, перечисленных ниже, в конечном итоге будут включены в базовый продукт в ближайшие месяцы в качестве новых фич, которые несомненно порадуют наших пользователей.

Семь стажеров, проекты которых рассматриваются в этой серии статей, входили в команды ML-Agents и Game Simulation.

  • Команда ML-Agents это команда занимающаяся прикладными исследованиями, которая разрабатывает и поддерживает набор инструментов ML-Agents, проект с открытым исходным кодом. Набор инструментов ML-Agents позволяет играм и симуляторам на Unity служить обучающей средой для алгоритмов машинного обучения. Разработчики используют ML-Agents для обучения игрового ИИ или настройки поведения персонажей с помощью глубокого обучения с подкреплением (RL deep reinforcement learning) или имитационного обучения (IL imitation learning). Это позволяет избежать утомительности традиционных ручных методов и хардкода. Помимо документации на GitHub, вы можете узнать больше о ML-Agents в этом блогспоте и исследовательской статье.

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

По мере роста Unity растет и наша программа стажировок. В 2021 году размах программы стажировки AI@Unity увеличится до 28 позиций. Кроме того, мы нанимаем сотрудников в других местах, включая Орландо, Сан-Франциско, Копенгаген, Ванкувер и Вильнюс, на самые разные должности, от разработки программного обеспечения до исследований в области машинного обучения. Если вас интересует наша программа стажировки на 2021 год, вы можете оставить свою заявку здесь (советуем мониторить эту ссылку, так как в ближайшие недели мы опубликуем дополнительные вакансии стажировок). А теперь предлагаем вам насладиться множеством разнообразных проектов наших талантливых стажеров из набора лета 2020 года!

Yanchao Sun (ML-Agents): Трансферное обучение

В большинстве случаев behavior, обученный с помощью RL, будет хорошо работать в среде, в которой он был обучен, но в аналогичной, немного измененной среде будет выдавать ощутимые ошибки. В результате небольшой тюнинг динамики игры требует, чтобы мы отказались от предыдущего образа действий и обучили все с нуля. Летом 2020 года я разработал новый алгоритм трансферного обучения (Transfer Learning), специально адаптированный к инкрементному процессу разработки игр.

Проблема: Разработка игр инкрементна; RL - нет

Разработка игр происходит поэтапно игра обычно начинается с простого прототипа и постепенно усложняется. Однако RL не является инкрементным, и обучение требует времени. Использование ML-Agents при разработке игр может оказаться очень затратным, поскольку разработчику может потребоваться несколько часов или даже дней, чтобы увидеть, как агент RL отреагирует на изменение. Хотя некоторые подходы могут сделать политику в процессе обучения более общей, например, рандомизация предметной области, они применимы только к вариациям игр, которые могут быть четко очерчены до обучения, и не могут адаптироваться к будущим произвольным эволюциям игры.

Решение: Разделение представления и прогнозирования

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

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

Чтобы протестировать наш метод (который будет доступен в будущих версиях ML-Agents), мы выбрали среды 3DBall и 3DBallHard из набора инструментов ML-Agents. Эти среды имеют одинаковую динамику, но разные пространства наблюдения. Мы также добавили дополнительный штраф на количество действий агента. Цель агента уравновесить мяч с минимальными затратами энергии. Чтобы проверить изменение наблюдения, мы сначала обучили политику на основе модели 3DBall, а затем перенесли часть, отвечающую за моделирование, для обучения на 3DBallHard. По сравнению со стандартным алгоритмом Soft Actor-Critic и однозадачным обучением на основе модели, метод трансферного обучения получает наибольшее вознаграждение. Мы также оценили случай изменения динамики путем увеличения размера шара. Результаты показывают, что трансферное обучение превосходит однозадачные методы, и является более стабильным!

Scott Jordan (ML-Agents): Параметризация задач и активное обучение

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

Проблема: Функции вознаграждения нуждаются в тонкой настройке

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

Решение: Параметризация и разбиение задач

Чтобы избавиться от необходимости точно указывать правильную цель, мы используем параметризованное определение задачи целевой функции агента. В этой опции задача агента имеет некоторые параметры, которые можно определить или сэмплировать. Для примера из предыдущего абзаца, задача агента будет заключаться в перемещении в заданное местоположение, а скорость, с которой агент это делает, является параметром. Таким образом, вместо того, чтобы указывать одно поведение для обучения, разработчик вместо этого указывает диапазон поведений, например, чтобы агент двигался к целевому местоположению, но с различной скоростью. Затем, после обучения, параметры задачи можно настроить так, чтобы они наилучшим образом отражали желаемое поведение. Набор инструментов ML-Agents в настоящее время включает экземпляр агента Walker, задача которого работать с переменной скоростью. Кроме того, мы также создали версию Puppo с переменной скоростью, которая сообщает ему, как быстро нужно бегать во время игры в fetch, и имеет параметр высоты головы, который обучает Puppo прыгать на задних лапах.

Параметризованные задачи полезны для изучения нескольких моделей поведения, но вопрос о том, какие параметризации мы должны использовать при обучении, нетривиален. Наивный подход заключается в использовании случайной выборки параметров, но он может быть неэффективным по ряду причин. Мы выбираем более разумную альтернативу активное обучение (Da Silva и др., 2014). Активное обучение это метод, позволяющий узнать, какие параметры следует использовать для обучения, чтобы максимизировать ожидаемое улучшение агента во время обучения. Это позволяет агенту определить все параметры задачи с меньшим количеством сэмплов. Ниже мы сравниваем активное обучение с равномерной случайной выборкой параметров для задачи из предыдущего примера Puppo с параметрами высоты головы и переменной скорости.


Узнать подробнее о курсе "Unity Game Developer. Basic".

Записаться на открытый урок "2d-платформер головоломка".

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru