56

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

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

раскрыть ветку 4
+3

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

раскрыть ветку 2
+3

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

+1

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

0

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

+2

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

0

UPD: сегодня гугл удалил игру из маркета под предлогом "because it violates the deceptive behavior policy". Попробую выложить заново с новым названием

раскрыть ветку 4
0

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

раскрыть ветку 3
0
Я подал апелляцию - игру вернули) Хз зачем удаляли, комментариев как обычно нет. Приложений для кино навалом в маркете, я 3D фильмы смотрю без приложений - тупо скачиваю заранее заготовленный фильм под очки (у него сразу картинка разделена) и все) 360º видео, в которых можно головой вертеть, в ютубе полно) P.S. Кардборд - лажа, тоже его покупал, лучше купить какой-нибудь vr box, в нем нет дисторсии и картинка четкая по всему полю зрения
раскрыть ветку 2
-9
В ближайшее время планирую добавить новые уровни, над одним из них, кстати, работаю прямо сейчас:

Спасибо, посмеялся :D в 4 руки?) и текст пишите и над уровнем работаете?

раскрыть ветку 3
+4

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

раскрыть ветку 2
-2

Без тега "шутка" никто теперь их не понимает?)

раскрыть ветку 1
ещё комментарии
Похожие посты
Возможно, вас заинтересуют другие посты по тегам: