usa_visa2
Процесс оформления визы США для деловых и туристических поездок

Как я сделал VR-игру за три дня на Ludum Dare 39

  • Август 05, 2017
  • 8 комментариев

Почти год прошел с моего прошлого участия на Ludum Dare, когда я с командой запрототипировал и запустил разработку игры SMASH BASH: Date with the Desert. С тех пор как-то не было повода участвовать ещё. Но недавно у меня появилась возможность разрабатывать под HTC Vive и я не мог упустить такую возможность. В итоге за три дня сделал собственную игру под VR, в которую сам же с удовольствием поиграл. Если есть под рукой HTC Vive, то рекомендую поиграть в игру прежде, чем читать дальше.

Для меня достаточно очевидно, что VR, AR и MR прочно войдут в наш быт уже в ближайшие годы. Сейчас технология находится на том же уровне, на котором находились все остальные технологии, изменившие нашу жизнь — гиковская, дорогая, неудобная, тормозная, но при этом работающая и выдающая результат. Для меня окончательную точку ставит телеграм-канал ARKit от Luden.io, показывающий что можно делать, используя последние модели айфонов, то есть устройств, которые уже лежат в кармане миллионов пользователей. И в воздухе уже витают слухи о том, что Apple, Facebook и Google работают над своими вариантами Hololens от Microsoft, чтобы было такое же автономное устройство, но по доступной цене и возможностью купить в ближайшем салоне сотовой связи. Эта хрень ворвется в нашу жизнь стремительным домкратом, а уровень геймдизайна некоторых VR/AR игр находится на уровне “обычная 3D игра с возможностью смотреть с разных сторон”. Вот мне и захотелось немного прокачаться в создании VR игр, чтобы не остаться на обочине.

Старт этого желания появился во время занятий с моими студентами на курсе по созданию игр на Unity в Scream School. Одно из занятий я посвятил знакомству студентов с технологией VR. За три часа занятия студенты проходили путь от “первый раз одеваю VR шлем” до прогулок по миру, который они сами только что сделали. Мне тогда прямо во время занятия пришла идея воткнуть источник света в объект одного из контроллеров, а остальные источники света в сцене отключить. Меньше минуты манипуляций и внезапно у меня получился отличный хоррор.

Project_424 2017-08-05 18-20-32-438
Кадр из игры для Ludum Dare. Желаемый эффект достигнут.

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

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

В субботу утром, 29 июля, я узнал тему джема: Running out of Power (заканчивается энергия/силы). Поскольку у меня уже был заготовлен концепт, то пришлось тему натягивать как сову на глобус. Типа у меня должно быть темно, а значит энергия уже закончилась. Почему закончилась? Потому что это сделал опасный враг. Что за враг? Ну, моделить я толком не умею, поэтому собрал абстрактного врага из летающих кубов. Назвал это “Проект 424”, вспомнив про тему крипипасты и SCP.

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

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

— Для материалов использовались устаревшие шейдеры и пришлось настраивать их заново.

— Большинство объектов шарит один материал, что позволяет значительно улучшить производительность (не забыв включить инстансинг). Но когда камень и металл настраиваются одним материалом, то тут либо камень не камень, либо металл не металл.

— У всех объектов дефолтный скейлинг не равен 1, а сами объекты по-дефолту вверх ногами. Явно были проблемы с тем, чтобы выставить правильные размеры в 3D редакторе и правильно проэкспортить.

— Хотя конструктор для того и конструктор, чтобы все элементы стыковались по сетке (снэпились), но ряд объектов у одного из зданий тупо не подходили по размеру и при стыковании оставляли заметные щели. Приходилось либо не использовать их, либо двигать и скейлить вручную, что моветон.

— Опечатки в названии файлов — это вообще фейспалм. Причем, создающий рабочие проблемы, так как эти файлы быстрым поиском не ищутся.

— В наборе нет ни одной модели для источника света.

Project_424 2017-08-05 18-16-50-451
Кусочек локации на основе этого конструктора.

Впрочем, за $5 вполне терпимые проблемы. Ещё $2 заплатил за модель фонарика. К ней вообще никаких нареканий, отличный фонарик. Затем выложил ещё $25 за набор скриптов для различных способов управления персонажем в VR (locomotion). Остальные ассеты нашел среди бесплатных:

— Ночное небо из вот этого набора.

— Материал лавы для использования на противниках. Мне нужен был материал с красивым свечением (emissive).

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

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

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

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

— Звуки выстрелов и эмбиента. В основном с сайта https://freesound.org/ 

Project_424 2017-08-05 18-23-04-447
Материалы на пистолете прям очень вкусные, но заметны только при правильном освещении.

Идея перемещаться телепортами мне очень быстро разонравилась. Это ведь надо несколько сотен точек раскидать по всему уровню, протестировать их и затем каждый раз при телепортации наблюдать как в мире игры появляются игровые условности. А ведь прелесть VR в погружении и мне хотелось по возможности сохранить это погружение. Мне понравилось как сделано передвижение в игре GORN, когда движение осуществлялось махами рук. К счастью, в ассет сторе нашлось решение с arm swing, правда всего одно и то с проблемами.

Из проблем, с которыми я с удивлением столкнулся:

— Часть функционала находилась под заголовком Coming Soon. К счастью, это было про способы передвижения, которые не были мне интересны.

— В коде было прямое упоминание версии Unity 5.6, что привело к ошибкам в версии 2017.1.

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

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

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

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

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

Project_424 2017-08-05 18-24-30-447
Красные кубики — это враги. Стоит одному из них коснуться игрока и всё, game over.

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

Долго думал что же такое сделать по главной задаче игрока. В голове постоянно крутился Slender с его задачей найти 8 записок, но хотелось что-то своё. К середине третьего дня так ничего хорошего не пришло в голову, поэтому просто облепил опоры ЛЭП теми же кусками, из которых состоят противники. Сбиваешь все куски с опоры — включается освещение на части уровня. Очищаешь все три вышки — игра пройдена. Решение не фонтан, так как оставляет незадействованным огромную часть уровня, но все же решение работающее и интуитивно понятное для игрока.

Project_424 2017-08-05 18-19-50-445
На скриншоте увеличена яркость и всё равно нефига не видно, а в шлеме с изначальной яркостью всё норм.

Кстати, о врагах и стрельбе по ним. Мне сначала нравилась идея сделать одного врага, с которым нельзя справиться, но от которого можно убегать. Фильм Оно (It Follows) как раз отлично обыгрывает эту тему (там ещё про передачу проклятья половым путем есть). Но начав делать игру я понял, что такой противник лишь сначала пугает, а потом становится предсказуемым и скучным. К тому же, чтобы игрока не укачивало, ему хорошо бы время от времени делать перерывы в движении. Значит игрока надо чем-то занять. Стрельба — механика, которая раскрывает особенность управления под VR. Вот и решил, что чего бы нам не пострелять. Всё равно надо чем-то занять руку, свободную от фонарика. Кулдаунами и перезарядкой решил не осложнять себе и игрокам жизнь. Пусть хоть тут можно будет популять вдоволь.

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

devsgo_11
Слева направо: я, Александр Пашин, Илья Туменко

 

Второй день для меня был самым кайфовым — большую часть дня я занимался левел-дизайном, собирая локацию. Очень умиротворяющее занятие. Слово собирать конструктор Лего.

level
Общий вид на основной уровень при дневном освещении.

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

В целом всё прошло гладко. Было только две проблемы. Про сломанную работу с интерфейсом я писал выше. Второй проблемой было запекание освещения. Я не знаток настройки света в Unity, но мне показалось, что если Directional Light поставить в режим Baked, то это улучшит производительность. А оказалось, что после долгих расчетов теней даже на маленькой сцене, они куда-то исчезали. Пришлось откатить источники света обратно в режим Mixed. И ещё почему-то собранный билд запускался в настройках Very Low, хотя по-умолчанию я поставил Very High. Пришлось вернуть обратно стартовый ланчер Unity, где качество графики можно было выбрать ручками.

Дальше оставалось только снять геймлейное видео для тех, у кого нет HTC Vive, сделать пачку скриншотов и оформить страницу игры. Что собственно и сделал, чем завершил своё участие на Ludum Dare.

Страница игры на Ludum Dare

 

 

Какие выводы я для себя сделал?

1. Да, VR — это технология будущего. Это не 3D-кино, где эффект был ради маркетинга и вызывал раздражение, вместо погружения. Тут же такой эффект погружения, который никак иначе достичь нельзя.

2. VR игры связаны с физическим движением. Это полезней для здоровья, чем сидячие игры.

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

4. Картинка в шлеме выглядит светлей, чем на экране. Это нужно учитывать и как-то подпирать, высветляя картинку на мониторе, иначе в такие игры не интересно наблюдать со стороны — сплошная чернота.

5. Делать игры под VR совсем не сложно. Вся основа работает из коробки.

6. Нужен стол на колесиках, чтобы его можно было выкатывать в VR зону и тестировать фичи не бегая туда-сюда.

7. Интенсивность тестирования в VR нужно дозировать. Частое одевание-снимание шлема не торт. Потестил функционал — отвлекись на работу с контентом.

8. Детализация — это не про VR. Разрешение так себе, поэтому детализированные ассеты превращаются в кашу, а низкополигональные ассеты выглядят норм.

9. И вообще главное не детализация, а ощущение пространства.

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

11. В производительность не уперся — хорошо. Спасибо Unity.

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

  • Slava Bushuev

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

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

      • Slava Bushuev

        Шлем стоит около 800 долларов, добавим сюда еще 500 за видеокарту, которая его потянет. Получается что вр обходиться примерно в 3 раза дороже чем пс4. Покупая пс4 пользователь получает анчартед и ласт оф ас — это нормальные игры, а не демки и инди поделки для вр, которые продаются в стиме. Вкладывать деньги в ААА будут только в том случае, если он окупиться, а он не окупиться на платформе, на которой продали миллион устройств. Получается замкнутый круг, платформу не покупают потому что нету нормальных игр, нормальные игры не делают, потому что мало продали устройств. Остального контента для ВР тоже не подвезли, разве что порно пару раз посмотреть. Добавим к этому не казуальность системы, куча проводов, 3-4 датчика движения по всей комнате, шлем с проводами как в матрице, который своими ремнями давит на голову уже после 30 минут использования. Одевая вайв ты оказываешься в виртуальной клетке. Не можешь нормально передвигаться в играх, либо телепорт, либо костыли, либо стоишь на месте. Что за геймплей можно придумать из этого? Да такой, чтобы в это хотелось играть больше 10 минут. Возможно в будущем, ситуация измениться, когда устройства будут стоит раз в 5 дешевле, и когда придумают способ полноценно перемещаться, как в матрице. А пока, я вижу вторую часть виртуал боя.

        • Спасибо тебе за возможность подискутировать на эту тему. Да, всё так и есть. Комплект для VR стоит дорого, поэтому пользовательская база маленькая, поэтому делать дорогие игры на такую аудиторию невыгодно.

          Я тут выгрузил из стимспая игры с тэгом VR Only, убрал бесплатные, отсортировал по количеству владельцев, а затем прикинул доход проекта (без налогов, но после вычета комиссии стиму).
          https://uploads.disquscdn.com/images/a8af447d8a397e3151d6a9683e2cf64a670b524ac82a21738ec26ce99b75b3bb.png

          Многие из этих игр по уровню качества звезд с неба не хватают, но при этом заработали значительно больше, чем если бы подобного качества игры вышли в обычном формате под мониторы и геймпад/мышь+клава. И как видно, можно и больше миллиона долларов поднять, что неплохие такие цифры для среднего размера студии. Потому что люди, которые могут позволить себе VR систему, имеют деньги на покупку игр. Это как с айфонами. Телефонов на Андроиде больше, потому что он доступней по цене, но разработчики основной доход получают с игр на App Store, потому что там аудитория, которая умеет платить.

          Как видно по таблице, больше всех заработала игра Job Simulator. Этому есть две причины:
          1) Это одна из первых полноценных игр под VR. Уверен, что львиная доля их продаж произошла благодаря тому, что они успели в пустующую нишу. Люди покупали их игру просто потому, что больше не было других игр.
          2) Она задизайнена под возможности и ограничения системы. В ней не надо никуда далеко ходить, зато очень много возможностей для манипуляции руками. И визуальное решение хорошо подходит под низкое разрешение шлема.

          Ещё мне нравится пример игры Batman: Arkham VR. На стиме она взяла $206,555.62, но её основная платформа, как я полагаю, это как раз VR на PS4. Потому что тут пишут про 370тыс копий http://www.vgchartz.com/game/124388/batman-arkham-vr/, в то время как на стиме всего 18к копий. Основной контент игры — реюз ассетов из игр про Бэтмена, которые студия делала до этого. Уверен, что благодаря такому экономному подходу проект многократно окупился. При этом он относится по уровню качества к ААА проектам.

          Так что не всё так плохо. Хотя, конечно, пока это не истории про игры с многомиллионными бюджетами на разработку и маркетинг. Но я уверен, что придет их время. Не зря же Facebook, Google, Apple, Valve, Microsoft, Sony и другие гиганты инвестируют миллиарды долларов и не прекращают копать эту тему.

          У меня тут мысль следующая. Текущие шлемы — это переходный период. Да, с ними много минусов. Будущее за автономными системами, без проводов. И это будет не VR, а AR или MR, потому что лучший способ дать игроку передвигаться в пространстве — это дать ему ходить ногами, но при этом видеть окружающий мир, чтобы не ёбнуться обо что-нибудь. Как HoloLens, только значительно дешевле. Потребуется определенный подход к геймдизайну, потому что тут копирование старых игр не сработает — нужно мозговать новое решение, а для этого нужно накапливать опыт. И было бы неплохо иметь этот опыт к тому моменту, когда Facebook выпустит консьюмерский девайс для своей миллиардной аудитории.

          p.s. Приглашаю в гости. Покажу лучшие игры под VR. Сам увидишь, что можно часами проводить в шлеме без дискомфорта :о)

          • Slava Bushuev

            Вот ты заморочился) Статистика стимспая имеет огромный разброс, да, она лучше работает на высоких цифрах, но реальный доход может оказаться в 5 раз меньше. 100 тысяч долларов деньги не плохие, но даже они не покроют год работы студии из 10 человек. The Climb недавно вышел, слышал, что он продается хорошо, но на него миллионы потратили и не факт что окупится.
            Про опыт с тобой опять не соглашусь. Вот мы работали в g5, делали игры для нокии 3310, что нибудь от туда пригодилось для современных мобильных игр? Ничего, потому что тач скрин это совсем другой экспириенс.
            Тоже самое и с виртуальной реальностью, текущее управление это костыли, новые устройства, та же дополненная реальность, будет работать по другому. Поэтому опыт может и не пригодиться.
            Хайп подняли большой, именно поэтому в России еще делают игры под vr. Все как и раньше, когда на пике популярности ММО все загоняли инвесторам про золотые горы. Так и сейчас говорят про технологию будущего и все такое)
            Но думаю через год-два это все плавно сойдет на нет.
            А текущие шлемы так и останутся игрушками для гиков.
            Но это сугубо мое личное мнение.

            За приглашение спасибо) Я в вайв играл ровно год назад и это окончательно сформировало мое мнение)))

  • Нашел отличное решение для передвижение взмахами рук. Доступно на ассет сторе за $15 https://www.assetstore.unity3d.com/en/#!/content/67602 или бесплатно на гитхабе https://github.com/ElectricNightOwl/ArmSwinger Платная версия нужна для того, чтобы было как сказать авторам спасибо.

    Отличия от приведенного в посте VR Locomotion Essentials:
    — Дружит со SteamVR, а не заменяет его на свое решение.
    — Сочетает передвижение ногами по комнате и взмахи руками. Например, если перед тобой лестница и ты идешь ногами, то будешь подниматься.
    — Не требует использовать NavMesh.
    — Защищает от входа в коллизию.
    — Есть видео-туторы https://www.youtube.com/channel/UCwsx87lBjYtIuVIzavVnWZA/videos
    — Очень много возможностей для кастомайза
    — Нет лишних кривых способов передвижения

    p.s. теперь у меня послевкусие бездарно потраченных 25 баксов

    • Насчет дружбы со SteamVR я погорячился. Дружба идет с обычным [CameraRig] префабом, но это просто тупая камера. А вот интерактивный префаб Player по-умолчанию работать с этим решением не захотел. К счастью, их удалось подружить докинув необходимые компоненты на родительный объект и контроллеры. Благо что тут всего один скрипт, к тому же хорошо документированный, так что не сложно отловить все проблемы. Не скажу, что по итогу всё гладко, но в целом я пока доволен и думаю, что смогу решить оставшиеся косяки.

    • Я был поспешен с выводами. Это тоже кусок говна. Тут передвижение намертво привязано к позиции камеры (головы). В результате, когда стоишь перед низким объектом, то не можешь наклонить над ним голову, так как система считает это попыткой входа в объект и отталкивает назад.
      И есть баг, который не понятно пока как лечить: если влезть головой в низкий объект, а потом поднять голову так, чтобы она оказалась на поверхности объекта, то в результате встаешь на этот объект.

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

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

Switch language:
Facebook