RealityKit Как создавать собственные сетки во время выполнения?

RealityKit имеет множество полезных функций, таких как встроенная многопользовательская синхронизация по сети для поддержки общих миров, но я не могу найти много документации, касающейся создания сетки / объекта во время выполнения. В RealityKit есть несколько основных функций создания сетки (прямоугольник, сфера и т. Д.), Но я хотел бы создавать свои собственные процедурные сетки во время выполнения (вершины и индексы) и, вероятно, восстанавливать их в стиле рендеринга в немедленном режиме каждого кадра.

Во-первых, есть ли способ сделать это, или RealityKit слишком замкнут, и у него нет возможности выполнять индивидуальный рендеринг? Во-вторых, есть ли альтернативное решение, которое позволило бы мне использовать синхронизацию RealityKit? Например, действительно ли эта часть просто еще одна библиотека, которую я могу использовать с ARKit 3? Как это называется? Я также хотел бы иметь возможность синхронизировать произвольные данные между устройствами пользователей, поэтому встроенная система также будет полезна.

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


person synchronizer    schedule 08.08.2019    source источник


Ответы (1)


Насколько я знаю, RealityKit может использовать только примитивы или usdz файлы в качестве моделей. Хотя вы можете создавать usdz файлы с помощью ModelIO на устройстве, но это невозможно для вашего варианта использования .

Однако синхронизация встроена в ARKit, хотя вам придется проделать немного больше работы, когда вы не используете RealityKit.

  1. Создайте сеанс MultipeerConnectivity между устройствами (это также необходимо для RealityKit)
  2. Настройте сеанс ARSession и установите isCollborationEnabled, что сделает вывод сеанса _ 10_ в _ 11_ делегировать обратный вызов.
  3. Отправьте эти данные, используя ваш MultipeerConnectivity сеанс.
  4. При получении данных от других пользователей интегрируйте их в сеанс с помощью update(with:)

Чтобы отправлять произвольную информацию между пользователями, вы можете отправить их через MultipeerConnectivity независимо от ARKit или использовать пользовательский ARAnchors, что является предпочтительным вариантом при работе с позиционными данными, например когда пользователь поместил объект в определенное место.
Вместо того, чтобы добавлять объекты напрямую (используя что-то вроде scene.rootNode.addChildNode() в SceneKit, вы создаете специальный ARAnchor подкласс со всей информацией, необходимой для добавления вашей модели и добавления ее в сеанс. Затем вы добавляете объект в обратный вызов rendered(_:didAdd:forAnchor:). Это дает преимущества лучшего отслеживания вокруг вашего объекта (потому что вы добавили привязку к позиции, указывая ARKit, что она должна запоминать позицию) и что вам не нужно ничего делать специально для многопользовательского взаимодействия, потому что ARKit вызывает метод rendered(_:didAdd:forAnchor:) как для добавленных вручную якорей, так и для автоматически добавленных, например, когда он получает данные совместной работы.

person jlsiewert    schedule 09.08.2019
comment
Хм, похоже, имеет смысл использовать ARKit 3 в тандеме с другими API. Это очень много для того, кто только начинает. Существуют ли какие-либо примеры кода, показывающие синхронизацию как AR, так и произвольных данных? Кроме того, одной из привлекательных особенностей RealityKit была окклюзия объекта, которая реализована в виде материала. Насколько вам известно, могу ли я использовать эту функцию? Насколько я понимаю, это был только RealityKit. Похоже, для рендеринга мне нужно создать свою собственную систему Metal, чего я надеялся избежать. - person synchronizer; 09.08.2019
comment
- а если мне нужно использовать собственное средство рендеринга Metal и создавать динамические сетки / буферы, не имеет ли смысла не использовать ARAnchors? - person synchronizer; 09.08.2019
comment
РЕДАКТИРОВАТЬ: я думаю, это решает проблему окклюзии: developer.apple.com/documentation/arkit/, но он не показывает, насколько возможно использовать окклюзию людей с настраиваемым средством визуализации. Было бы неплохо увидеть минимальный пример работы с произвольными данными и рендерингом. - person synchronizer; 09.08.2019
comment
Я читал, что в прошлом MultipeerConnectivity работала нестабильно. reddit.com/r/iOSProgramming/comments/40tllq/ Has это было улучшено? Достаточно ли быстро для потоковой передачи данных (например, с гироскопа) в реальном времени? - person synchronizer; 16.08.2019
comment
Все нормально. Вы можете взглянуть на эту сессию прошлогодней WWDC для AR игра построена полностью на основе MultipeerConnectivity. - person jlsiewert; 18.08.2019