Как добавили некоторые новые ответы, многопользовательская AR является основной функцией ARKit 2 (также известной как ARKit в iOS 12). Обсуждение WWDC18 по ARKit 2 содержит хороший обзор, а у Apple есть два разработчика примеры проектов кода, которые помогут вам начать работу: базовый пример, который получает всего 2+ устройств в общий опыт и SwiftShot, настоящую многопользовательскую игру, созданную для AR.
Основные моменты:
ARWorldMap
объединяет все, что ARKit знает о локальной среде, в сериализуемый объект, так что вы можете сохранить его на потом или отправить на другое устройство. В последнем случае перемещение на карту мира, сохраненную другим устройством в той же локальной среде, дает обоим устройствам одну и ту же систему отсчета (мировую систему координат).
Используйте выбранную вами сетевую технологию для отправки ARWorldMap
между устройствами: AirDrop, общие облачные ресурсы, почтовый голубь и т. Д. - все работает, но Multipeer Connectivity framework - хороший, простой и безопасный вариант, поэтому Apple использует его в своих примерах проектов.
Все это дает вам только основу для создания общего опыта - несколько копий в вашем приложении на нескольких устройствах, все с использованием мировой системы координат, которая соответствует одной и той же реальной среде. Это все, что вам нужно, чтобы несколько пользователей увидели один и тот же статический контент AR, но если вы хотите, чтобы они взаимодействовали в AR, вам нужно будет использовать вашу любимую сетевую технологию. более.
базовая многопользовательская демонстрация AR от Apple показывает кодирование ARAnchor
и его отправку партнерам, чтобы один пользователь может нажать, чтобы разместить 3D-модель в мире, и все остальные смогут ее увидеть. Пример игры SwiftShot создает целый сетевой протокол, чтобы все пользователи получали одинаковый игровой процесс. действия (например, стрельба из рогаток друг в друга) и синхронизированные результаты физики (например, падение блоков после удара). Оба используют многопользовательское соединение.
(Кстати, второй и третий пункты выше - это то место, где вы получаете цифру от 2 до 6 из @andy answer - на стороне ARKit нет ограничений, потому что ARKit не знает, сколько людей могло получить карту мира, которую вы сохранили. Тем не менее, у многопользовательского подключения есть ограничение на 8 участников. И любая игра / приложение / опыт, который вы создаете поверх этого, может иметь проблемы с масштабированием задержки / производительности при добавлении дополнительных пиров, но это зависит от вашей технологии и дизайна.)
Оригинальный ответ ниже для исторического интереса ...
Кажется, это область активных исследований в сообществе разработчиков iOS - на прошлой неделе я встретил несколько команд, пытающихся разобраться в этом, на WWDC, и никто еще даже не начал его взламывать. Так что я не уверен, что есть лучший способ, если вообще возможный.
Функциональные точки расположены относительно сеанса и не идентифицируются индивидуально, поэтому я полагаю, что сопоставить их между несколькими пользователями будет сложно.
Режим выравнивания сеанса gravityAndHeading
может оказаться полезным: он устраняет все направления к (предполагаемому / предполагаемому) абсолютному опорному кадру, но позиции по-прежнему относятся к тому месту, где находилось устройство в момент начала сеанса. Если бы вы могли найти способ связать это положение с чем-то абсолютным - широтой / долготой или, возможно, iBeacon - и сделать это надежно, с достаточной точностью ... Что ж, тогда у вас не было бы только системы отсчета, которая могла бы быть совместно используемый несколькими пользователями, у вас также будут основные ингредиенты для AR на основе местоположения. (Вы знаете, как плавающая виртуальная стрелка, которая говорит: поверните прямо здесь, чтобы добраться до выхода на посадку A113 в аэропорту, или что-то еще.)
Еще один подход, о котором я слышал, - это анализ изображений. Если бы вы могли разместить несколько реальных маркеров - легко распознаваемые машиной вещи, такие как QR-коды - с точки зрения нескольких пользователей, вы могли бы использовать некоторую форму распознавания или отслеживания объектов (возможно, модель машинного обучения?), Чтобы точно идентифицировать положение и ориентацию маркеров. относительно каждого пользователя, а затем вернитесь к нему, чтобы вычислить общую систему отсчета. Не знаю, насколько это возможно. (Но если вы пойдете по этому или подобному пути, обратите внимание, что ARKit предоставляет пиксельный буфер для каждого захваченного кадра камеры.)
Удачи!
person
rickster
schedule
14.06.2017