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

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

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

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

2 ответа

Решение

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

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

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

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

февраль 2022 г.

Начиная с macOS 12/iOS 15 RealityKit включает API, позволяющий создавать собственные процедурно сгенерированные сетки, в основном с помощью следующих методов:

Они предоставляют средства для созданияMeshResourceэкземпляры - синхронно и асинхронно - либо создавая модели и экземпляры самостоятельно, либо предоставляя списокMeshDescriptorкоторые вы создаете сами.

Документация Apple (когда я пишу это) не существует, но сами API-интерфейсы достаточно хорошо документированы, если вы посмотрите на сгенерированные быстрые интерфейсы. У Макса Кобба есть статья (на Medium): Начало работы с RealityKit: Procedural Geometries , в которой содержится некоторое описание того, как использовать MeshDescriptor для описания сетки поверхности, а также есть пакет swift с некоторыми дополнительными геометриями, использующими эту технику:RealityGeometriesэто нетрудно прочитать, чтобы увидеть примеры его использования в действии.

Другие вопросы по тегам