Поделиться через


Примеры физики с фиксацией в мировой системе координат.

Пример физического пучка предлагает несколько виртуальных физических взаимодействий на основе поддержки фиксации в мировой системе координат с помощью World Locking Tools.

Предыстория

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

Пространственные привязки Unity реагируют на изменения положения базовой пространственной привязки, перетаскивая прикрепленный GameObject вместе с ней. Такое движение создает сложности для физической симуляции:

  • Так как положение GameObject с пространственной привязкой явно задается покадрово самой пространственной привязкой, его нельзя задать симуляцией (например, импульс).
  • Так как пространственная привязка часто обновляет свое положение для GameObject, она не будет отображаться в покое относительно других неподвижных объектов RigidBody.
  • Из-за скрытых сдвигов системы координат Unity (при корректировке координат статических голограмм пространственными привязками, чтобы сохранить их фиксированное положение относительно реального мира) физические вычисления, например маршрутов и траекторий, будут выполняться с ошибками. Например, выпущенный предмет, точно наведенный на голограмму, все равно не попадет в нее, если положение голограммы будет изменено ее пространственной привязкой в момент между вычислением траектории и попаданием в цель.

Если связь между измеренной пространственной привязкой и зафиксированными за ней виртуальными объектами становится несогласованной, вместо корректировки виртуальных объектов (как это делают пространственные привязки Unity) World Locking Tools корректируют преобразование головы для минимизации отображаемых артефактов, возникающих вследствие таких расхождений. Это позволяет обеспечить согласованность виртуальных объектов в стабильном координатном пространстве и устранить описанные выше проблемы.

Создание примера

Для этого примера требуется возможность SpatialPerception. Для использования голосовых команд также требуется возможность Microphone (Микрофон).

Для этого примера необходимо добавить следующие слои в теги и слои проекта:

  • Pillared
  • SpatialMapping

Выполнение демонстрации

HUD элементов управления

Этот базовый HUD не создан специально для этого примера физического пучка, а всего лишь позволяет управлять поведением выполнения World Locking Tools для изучения возможностей этих средств. Он доступен как дополнительная возможность при разработке любого приложения с использованием World Locking Tools, как описано в этой статье.

Снимок экрана с образцами HUD

Диагностическая статистика отображается по умолчанию, но ее можно отключить из управляющего HUD.

Переключатели режимов

В любой момент времени пример может находиться в одном из следующих режимов:

  • Idle (Простой) — пример физики в настоящее время не обрабатывает входные данные. HUD и меню переключателей, конечно же, продолжают обрабатывать входные данные.

  • Throw Dart (Дротик) — траектория вычисляется с учетом основных законов физики и отображается. Отображаемая дуга показывает путь выпущенного снаряда (по выбранному жесту). Брошенный дротик будет лететь по баллистической траектории и при попадании отскочит от любой поверхности с коллизией, в том числе от сеток пространственной реконструкции (Spatial Reconstruction).

    Такие дротики можно "вытащить" как описано ниже.

  • Add Pillars (Добавление столбов) — при выбранном жесте в мир выпускается луч в указанном направлении. При попадании в поверхность с коллизией в такой точке добавляется вертикальный столб.

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

    • Если столб устанавливается на "удаляемую" поверхность, он имитируется физически (например, его можно опрокинуть).
    • В противном случае он имеет коллизию, но остается статическим.

    Фактически это означает, что если столб добавляется на сетку SR, он будет статическим. В других случаях он будет динамическим.

    Столбы можно "удалять".

  • Add Beam (Добавление пучка) — при первом выборе в сцену выпускается луч для поиска первой конечной точки пучка. После этого при перемещении луча выбора по сцене от первой конечной точки до текущей конечной точки отрисовывается линия. Второй жест выбора создаст пучок между первой и текущей конечными точками.

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

    Пучки можно "удалять".

  • Remove Objects (Удаление объектов) — при выборе из сцены удаляется объект, выпущенный лучом, если он является "удаляемым". Все объекты, которые стояли на удаленном объекте, упадут.