RealityKit Как создавать собственные сетки во время выполнения?
RealityKit обладает целым рядом полезных функций, таких как встроенная многопользовательская синхронизация по сети, для поддержки общих миров, но я не могу найти много документации по созданию сетки / объектов во время выполнения. В RealityKit есть несколько базовых функций генерации сетки (прямоугольник, сфера и т. Д.), Но я бы хотел создавать свои собственные процедурные сетки во время выполнения (вершины и индексы) и, вероятно, восстанавливать их каждый стиль рендеринга в немедленном режиме.
Во-первых, есть ли способ сделать это, или RealityKit слишком закрыт, чтобы не делать много пользовательских визуализаций? Во-вторых, будет ли альтернативное решение, которое могло бы позволить мне использовать некоторую синхронизацию RealityKit? Например, действительно ли эта часть - просто еще одна библиотека, которую я могу использовать с ARKit 3? Как это называется? Я хотел бы также иметь возможность синхронизировать произвольные данные между пользовательскими устройствами, так что встроенная система также будет полезна.
Я не могу это проверить, потому что в настоящее время у меня нет устройств, которые могли бы поддерживать бета-версию программного обеспечения. Я пытаюсь узнать, смогу ли я сделать то, что я хочу для своих программ, если я получу необходимое оборудование, но документации немного.
2 ответа
Насколько мне известно RealityKit
можно использовать только примитивы или usdz
файлы как модели. Пока вы можете генерировать usdz
файлы, использующие ModelIO
на устройстве, но это не выполнимо для вашего случая использования.
Однако синхронизация встроена в ARKit
хотя вы должны сделать немного больше работы, когда вы не используете RealityKit
,
- Создать
MultipeerConnectivity
сеанс между устройствами (это то, что вам нужно дляRealityKit
также) - Настройте ваш ARSession и установите
isCollborationEnabled
который делает вывод вашей сессииCollaborationData
вsession(_:didOutputCollaborationData:)
делегат обратного вызова. - Отправьте эти данные используя
MultipeerConnectivity
сессия. - При получении данных от других пользователей интегрируйте их в свой сеанс, используя
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
это нетрудно прочитать, чтобы увидеть примеры его использования в действии.