Подтвердить что ты не робот

ARKit с несколькими пользователями

Каков наилучший способ использования Apple ARKit с несколькими пользователями/устройствами?

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

=== Edit1, вещи, которые я пробовал ===

1) Feature point

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

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

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

2) QR-код

Как предложил @Rickster, я также попытался идентифицировать легко идентифицируемый объект, например QR-код, и получить относительное ссылочное изменение из этой фиксированной точки (см. этот вопрос) Это немного сложно и подразумевает, что я использую некоторый openCV для оценки позы камеры. Но, что более важно, очень ограничивающий

4b9b3361

Ответ 1

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

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

Сеанс режим выравнивания gravityAndHeading может оказаться полезным: что фиксирует все направления к (предполагаемому/оценивается) абсолютного отсчета, но позиции по-прежнему относительно того, где было устройство, когда начался сеанс. Если бы вы могли найти способ связать эту позицию с чем-то абсолютным - lat/long или iBeacon, возможно, - и сделать это надежно, с достаточной точностью... Ну, тогда у вас будет не только система отсчета, которая могла бы быть которые будут использоваться несколькими пользователями, у вас также есть основные компоненты для AR, основанные на местоположении. (Вы знаете, как плавающая виртуальная стрелка, которая говорит, что поверните направо туда, чтобы добраться до Gate A113 в аэропорту или что угодно.)

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

Удачи!

Ответ 2

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

  • DIY ARKit быстро устанавливает свою мировую систему координат после запуска AR-сессии. Поэтому, если вы можете иметь всех игроков, один за другим, поместить и выровнять свои устройства в одном и том же физическом месте и позволить им начать сеанс там, вот и все. Представьте себе внутренние края линейной линейки L, закрепленные на всех доступных. Или любую плоскую поверхность с отверстием: удерживайте телефон снова, просматривая поверхность, просматривая отверстие с камерой, (переза) сеанс инициализации.

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

  • Привлечен Постройте базовую модель ML для распознавания iPhone и iPads и местоположения их камеры. Как это делается с человеческим лицом и глазами. Совокупные данные на сервере, затем выключите ML, чтобы сэкономить электроэнергию. Примечание. Убедитесь, что ваша модель не защищена.:)

Ответ 3

Я сейчас обновляю инфраструктуру игрового контроллера (https://github.com/robreuss/VirtualGameController) для поддержки возможности совместного контроллера, поэтому все устройства будет получать входные данные от элементов управления на экранах всех устройств. Целью этого усовершенствования является поддержка многопользовательской функциональности на основе ARKit. Я предполагаю, что разработчики будут использовать первый подход, упомянутый diviaki, где общее позиционирование виртуального пространства определяется пуском сеанса на каждом устройстве из общей точки в физическом пространстве, общей ссылкой, и, в частности, я имею в виду на противоположных сторонах стола. Все устройства будут запускать игру одновременно и использовать общее пространство координат относительно физического размера и использовать входы от всех контроллеров, игра останется теоретически синхронно на всех устройствах. Все еще тестирование. Очевидной потенциальной проблемой является латентность или нарушение в сети, и синхронизация разваливается, и ее будет сложно восстановить, за исключением перезапуска игры. Подход и структура могут работать для некоторых типов игр достаточно хорошо - например, простые игры в аркадном стиле, но, конечно, не для многих других - например, любая игра со значительной случайностью, которая не может быть скоординирована между устройствами.