Mosquito Invasion VR - мой опыт создания VR игрушки для Android

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

Хоть я и знаком с OpenGL, идея писать все с нуля в голом NDK меня не прельщала. Писать игру решил с использованием библиотеки Libgdx, потому что во-первых, она кроссплатформенная, а во-вторых, я с ней уже давно знаком, и даже писал раньше небольшие игрушки "в стол". Первое, с чем я столкнулся, - это полное отсутствие поддержки VR. В целом, libgdx - неплохая библиотека, но ее разработчики знатно тормозят и не торопятся следовать трендам современности. Выхода из ситуации было 3:

1) Использовать Cardboard SDK

2) Использовать Unity

3) Реализовать "headTracking" вручную в рамках libgdx

В первых двух случаях мне пришлось бы переучиваться и вставать на новые рельсы, поэтому эти варианты я сразу отбросил. Кроме того, у меня неприязнь к Unity)) Хоть я и понимаю, что это очень удобный движок в плане переноса на другие платформы с огромным комьюнити, но у меня в душе он ассоциируется с конструктором для школьников типа ucoz-а. Я выбрал третий вариант, и после нескольких недель гугления и вчитывния в формулы публикаций по Oculus Rift, я родил собственную реализацию комплементарного фильтра, который позволяет отслеживать вращение головы с помощью акселерометра, гироскопа и компаса, причем в моей реализации последние два датчика не обязательны. В случае отсутствия гироскопа углы вращения виртуальной головы определяются по наклонам телефона при помощи акселерометра, по-моему это первое подобное решение в VR играх. Большинство игр просто не запускаются на телефонах без гироскопа.

Перед началом разработки я начитался постов про пожизненную блокировку разработчиков в Google Playe за ворованный контент, поэтому решил все модели, текстуры и звуки делать самостоятельно. Пришлось в кратчайшие сроки освоить основы моделирования в Blender по видеоурокам и создать модель комнаты с комарами:

Mosquito Invasion VR - мой опыт создания VR игрушки для Android Виртуальная реальность, Gamedev, Инди, Игры, Android, Libgdx, Длиннопост

Звуки записывал на телефон и обрабатывал в Ocenaudio, либо синтезировал в LMMS:

Mosquito Invasion VR - мой опыт создания VR игрушки для Android Виртуальная реальность, Gamedev, Инди, Игры, Android, Libgdx, Длиннопост

Кстати, со звуком в libgdx вообще все плохо. Во-первых, стандартный Sound никак не фиксирует момент готовности файла к воспроизведению. Во-вторых, soundPool андроида, который используется в Sound, весьма забагованная вещь, которая работает по-разному от версии к версии. Я обнаружил, что в Android ниже 4.3 он не умеет высвобождать память от ненужных звуков в процессе работы приложения, из-за этого в игре может пропадать звук. Причем в версиях 4.3 и выше такой проблемы нет. Тем не менее, мне все равно пришлось практически полностью переписать стандартные классы работы со звуками из libgdx, создав тем самым свой мини-движок, который имитирует трехмерный звук (чисто изменением громкости каналов, без бинаурального эффекта).

Для получения стереопары на экране используются два разных viewport-а:

Mosquito Invasion VR - мой опыт создания VR игрушки для Android Виртуальная реальность, Gamedev, Инди, Игры, Android, Libgdx, Длиннопост

Текущий счет и количество жизней выводятся на экран виртуального телика. Вообще в целом игрушка представляет собой масштабируемый движок, который получился весьма оптимизированным за счет отказа от дополнительных библиотек с кучей ненужного мусора. Я сделал собственный формат описания уровней, запилил к нему парсер. Поддерживается скелетная анимация объектов уровня, эффекты из системы частиц и шейдеры. Игрушка выдает 60 fps практически на любом смартфоне с android 5.0+ и 1 гигом оперативы, обеспечивая очень плавную анимацию поворота головы. И вообще, у меня сложилось впечатление, что большинство VR игр в маркете созданы какими-то далекими от геймдева людьми, потому что они подлагивают даже на моем далеко не самом плюшевом телефоне (Asus ZE551ML). Я изначально боролся за каждый кадр, каждое умножение и деление, поэтому по сравнению с остальными VR играми маркета, моя создает ощущение, будто играешь в сам Oculus. Вот еще пару скринов:

Mosquito Invasion VR - мой опыт создания VR игрушки для Android Виртуальная реальность, Gamedev, Инди, Игры, Android, Libgdx, Длиннопост
Mosquito Invasion VR - мой опыт создания VR игрушки для Android Виртуальная реальность, Gamedev, Инди, Игры, Android, Libgdx, Длиннопост

Кроме того, в игре есть обычный режим на полный экран (без VR):

Mosquito Invasion VR - мой опыт создания VR игрушки для Android Виртуальная реальность, Gamedev, Инди, Игры, Android, Libgdx, Длиннопост
Mosquito Invasion VR - мой опыт создания VR игрушки для Android Виртуальная реальность, Gamedev, Инди, Игры, Android, Libgdx, Длиннопост

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

Mosquito Invasion VR - мой опыт создания VR игрушки для Android Виртуальная реальность, Gamedev, Инди, Игры, Android, Libgdx, Длиннопост

Немного опоздал к хэллоуину с хоррор-локацией, но все равно доведу до конца)

Видео геймплея (ускоренное): https://www.youtube.com/watch?v=KJer-dD1uwU

Буду рад услышать замечания и пожелания)

Лига Разработчиков Видеоигр

6.6K поста22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

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

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

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Вы смотрите срез комментариев. Показать все
6
Автор поста оценил этот комментарий

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

раскрыть ветку (4)
3
Автор поста оценил этот комментарий

Я раньше никогда не имел дела ни с издателями, ни даже с магазинами приложений (был, правда, небольшой опыт на windows phone, но я там запилил игрушку больше забавы ради). Это моя первая более-менее серьезная поделка, которая дальше будет развиваться, и я планирую добавить монетизацию в виде покупки дополнительных уровней, но только если игрушка наберет больше 100к загрузок. Пока я вижу только 5-6 скачиваний в день, и из них половина - мои знакомые)  Если не получится раскрутиться самостоятельно - придется пойти к издателю)

раскрыть ветку (2)
3
Автор поста оценил этот комментарий

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

1
Автор поста оценил этот комментарий

Потому что VR не очень распространено.

Автор поста оценил этот комментарий

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

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку