Стабильность голограммы

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

Терминология качества голограммы

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

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

  • Достоверность. После того как голограмма заблокирована и помещена в реальный мир, она должна оставаться там, где она размещена относительно окружающей среды и независимо от движения пользователя или небольших и разреженных изменений среды. Если голограмма появится в неожиданном месте, это проблема точности . Такие сценарии могут произойти, если два отдельных помещения выглядят одинаково.
  • Дрожание. Пользователи наблюдают за дрожанием как высокочастотное встряхивание голограммы, что может произойти при отслеживании среды ухудшается. Для пользователей решение выполняет настройку датчика.
  • Джаддер. Низкая частота отрисовки приводит к неравномерному перемещению и двойным изображениям голограмм. Джаддер особенно заметно в голограммах с движением. Разработчикам необходимо поддерживать постоянную 60 кадров/с.
  • Дрейф. Пользователи видят смещение как голограмму, чтобы отойти от места его первоначального размещения. Смещение происходит, когда голограммы размещаются далеко от пространственных привязок, особенно в несопоставленных частях среды. Создание голограмм, близких к пространственным привязкам, снижает вероятность смещения.
  • Прыжок. Когда голограмма "всплывает" или "прыгает" от своего расположения иногда. Прыжки могут возникать, так как отслеживание корректирует голограммы в соответствии с обновленным пониманием вашей среды.
  • Плавать. Когда голограмма отображается, что соответствует движениям головы пользователя. Плавать происходит, когда приложение не полностью реализовало репроецирование, и если HoloLens не откалиброван для текущего пользователя. Пользователь может повторно запустить приложение калибровки , чтобы устранить проблему. Разработчики могут обновить плоскость стабилизации, чтобы повысить стабильность.
  • Разделение цветов. Дисплеи в HoloLens — это последовательные цветовые дисплеи, которые мигают каналы красного-зеленого сине-зеленого цвета с частотой 60 Гц (отдельные цветовые поля отображаются в 240 Гц). Каждый раз, когда пользователь отслеживает движущуюся голограмму глазами, то начальные и конечные края голограммы разделяются в составных цветах, создавая эффект радуги. Степень разделения зависит от скорости голограммы. В некоторых редких случаях перемещение головы быстро при просмотре стационарной голограммы также может привести к радужному эффекту, который называется разделением цвета.

Частота кадров

Частота кадров — это первый столп стабильности голограммы. Чтобы голограммы отображались стабильно в мире, каждое изображение, представленное пользователю, должно иметь голограммы, нарисованные в правильном месте. Отображение HoloLens обновление 240 раз в секунду, показывающее четыре отдельных цветовых поля для каждого недавно отображаемого изображения, что приводит к пользовательскому интерфейсу 60 кадров в секунду (кадров в секунду). Чтобы обеспечить наилучший интерфейс, разработчики приложений должны поддерживать 60 кадров/с, что позволяет согласованно предоставлять новый образ операционной системе каждые 16 миллисекундах.

60 кадров/с Чтобы нарисовать голограммы, чтобы выглядеть так, как они сидят в реальном мире, HoloLens необходимо отобразить изображения из позиции пользователя. Так как отрисовка изображений занимает некоторое время, HoloLens прогнозирует, где будет находиться голова пользователя, когда изображения отображаются на экранах. Однако этот алгоритм прогнозирования является приближением. HoloLens имеет оборудование, которое корректирует отрисованное изображение для учета несоответствия между прогнозируемой позицией головы и фактической позицией головы. Корректировка делает изображение, отображаемое пользователем, как если бы оно отображалось из правильного расположения, и голограммы чувствуют себя стабильными. Обновления изображений лучше всего работают с небольшими изменениями, и она не может полностью исправить некоторые вещи в отрисованном изображении, как движение параллакс.

Отрисовка на 60 кадров/с, вы выполняете три действия, чтобы сделать стабильные голограммы:

  1. Минимизация общей задержки между отрисовкой изображения и изображением, видимым пользователем. В подсистеме с игрой и потоком отрисовки, работающим в блокировке, выполнение на 30FPS может добавить 33,3 мс дополнительной задержки. Уменьшение задержки уменьшает прогнозируемую ошибку и повышает стабильность голограммы.
  2. Таким образом, каждое изображение, достигащее глаз пользователя, имеет постоянную задержку. При отрисовке с 30 кадров/с на экране по-прежнему отображаются изображения с 60 кадров/с, то есть одно и то же изображение будет отображаться дважды в строке. Второй кадр будет иметь 16,6 мс больше задержки, чем первый кадр, и придется исправить более выраженный объем ошибки. Эта несогласованность в величине ошибок может вызвать нежелательные 60 Гц дзюддера.
  3. Вы уменьшаете дрожание, характеризующееся неравномерным движением и двоением изображений. Чем быстрее перемещаются голограммы и чем ниже частота кадров отрисовки, тем заметнее дрожание. Стремление поддерживать 60 кадров/с в любое время поможет избежать дзюдера для данной движущейся голограммы.

Согласованность частоты кадров Согласованность частоты кадров так же важна, как высокая частота кадров в секунду. Иногда удаленные кадры неизбежны для любого приложения с широкими возможностями содержимого, и HoloLens реализует некоторые сложные алгоритмы для восстановления после случайных сбоев. Тем не менее, постоянно изменяющаяся частота кадров гораздо более заметно для пользователя, чем постоянно работает с более низкими частотами кадров. Например, приложение, которое плавно отображается для пяти кадров (60 кадров/с на протяжении этих пяти кадров), а затем удаляет каждый другой кадр для следующих 10 кадров (30 кадров/с в течение этих 10 кадров) будет отображаться более нестабильным, чем приложение, которое постоянно отрисовывается в 30 кадров/с.

В связанном примечании операционная система регулирует приложения до 30 кадров/с при выполнении записи смешанной реальности .

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

  • GPUView;
  • отладчик графики Visual Studio;
  • Профилировщики, встроенные в трехмерные подсистемы, такие как Unity

Расстояния отрисовки голограммы

Визуальная система человека интегрирует несколько сигналов, зависящих от расстояния, когда она фиксирует и фокусируется на объекте.

  • Размещение - фокус отдельного глаза.
  • Конвергенция — два глаза движутся внутрь или наружу, чтобы сосредоточиться на объекте.
  • Бинокулярное зрение - различия между левым и правым глазами изображения, которые зависят от расстояния объекта от точки фиксации.
  • Заливка, относительный угловой размер и другие монокулярные (один глаз) сигналы.

Конвергенция и размещение уникальны, потому что их экстра-сетчатки сигналы, связанные с тем, как глаза меняются на восприятие объектов на разных расстояниях. При естественном просмотре, конвергенция и размещение связаны. Когда глаза просматривают что-то рядом (например, нос), глаза пересекаются и помещаются в близнюю точку. Когда глаза смотрят что-то на бесконечности, глаза становятся параллельными, и глаз вместит в бесконечность.

Пользователи, одетые в HoloLens, всегда будут вмещаться в 2,0 м для поддержания четкого изображения, так как HoloLens дисплеи фиксируются на оптическом расстоянии примерно 2,0 м от пользователя. Разработчики приложений управляют тем, где глаза пользователей сходятся, размещая содержимое и голограммы в разных глубинах. Когда пользователи размещаются и сходятся на разные расстояния, естественная связь между двумя сигналами нарушается, что может привести к визуальному дискомфорту или усталости, особенно если величина конфликта велика.

Дискомфорт от конфликта вергенс-размещения можно избежать или свести к минимуму, сохраняя конвергентное содержимое как можно ближе к 2,0 м (то есть в сцене с большим количеством глубины места интересующих районов около 2,0 м, когда это возможно). Если содержимое не может быть помещено около 2,0 м, дискомфорт от конфликта вергенс-размещения является наибольшим, когда взгляд пользователя назад и вперед между различными расстояниями. Иными словами, гораздо комфортнее смотреть на неподвижную голограмму на расстоянии в 50 сантиметров, чем на такую же голограмму, которая постоянно приближается и удаляется.

Размещение содержимого в 2,0 м также выгодно, поскольку эти два дисплея предназначены для полного перекрытия на этом расстоянии. Для изображений, размещенных с этой плоскости, когда они перемещаются с стороны голографического кадра, они будут отображаться с одного дисплея, оставаясь видимыми на другом. Это бинокулярное соперничество может быть разрушительным для восприятия глубины голограммы.

Оптимальное расстояние от пользователя для размещения голограмм

Optimal distance for placing holograms from the user

Плоскости клипов Для максимального комфорта рекомендуется обрезка расстояния отрисовки в 85 см с исчезанием содержимого, начиная с 1 м. В приложениях, где голограммы и пользователи находятся в стационарном режиме, голограммы можно легко просматривать примерно на 50 см. В таких случаях приложения должны размещать плоскость клипа не ближе 30 см и исчезать должны начинаться не менее 10 см от плоскости клипа. Каждый раз, когда содержимое ближе 85 см, важно убедиться, что пользователи не часто перемещаются ближе или дальше от голограмм или что голограммы не часто перемещаются ближе или дальше от пользователя, так как эти ситуации, скорее всего, вызывают дискомфорт из-за конфликта размещения на вершинах. Содержимое должно быть разработано, чтобы свести к минимуму необходимость взаимодействия ближе 85 см от пользователя, но когда содержимое должно быть отрисовывается ближе 85 см, хорошим правилом для разработчиков является разработка сценариев, в которых пользователи и (или) голограммы не перемещаются более чем на 25 % времени.

Рекомендации Если голограммы нельзя разместить в 2 м, а конфликты между конвергенцией и размещением не удастся избежать, оптимальная зона для размещения голограммы составляет от 1,25 м до 5 м. В каждом случае конструкторы должны структурировать содержимое, чтобы побудить пользователей взаимодействовать с 1+м (например, настроить размер содержимого и параметры размещения по умолчанию).

Повторная подготовка

HoloLens имеет сложный аппаратный метод голографической стабилизации, известный как репроектирование. Репроецирование учитывает движение и изменение точки зрения (CameraPose), когда сцена анимирует, и пользователь перемещает голову. Приложениям необходимо предпринять определенные действия для оптимального использования повторной подготовки.

Существует четыре основных типа перепроектирования

  • Перепроектирование глубины: Дает наилучшие результаты с наименьшим объемом усилий от приложения. Все части отрисоченной сцены независимо стабилизируются на основе их расстояния от пользователя. Некоторые артефакты отрисовки могут быть видны, где есть резкие изменения в глубине. Этот параметр доступен только в HoloLens 2 и иммерсивных гарнитурах.
  • Планарное перепроектирование: Обеспечивает точный контроль над стабилизацией приложения. Плоскость устанавливается приложением, и все на этом самолете будет самой стабильной частью сцены. Чем дальше голограмма находится вдали от плоскости, тем менее стабильным будет. Этот параметр доступен на всех Windows платформах MR.
  • Автоматическое перепроектирование планарного плана: Система задает плоскость стабилизации, используя сведения в буфере глубины. Этот параметр доступен в HoloLens поколения 1 и HoloLens 2.
  • Ни один: Если приложение ничего не делает, планарное перепроектирование используется с плоскостью стабилизации, фиксированной на 2 метра в направлении взгляда головы пользователя, как правило, создавая нестандартные результаты.

Приложениям необходимо предпринять определенные действия, чтобы включить различные типы перепроектирования

  • Перепроектирование глубины: Приложение отправляет буфер глубины в систему для каждого отрисованного кадра. В Unity повторное проецирование глубины выполняется с помощью параметра "Общий буфер глубины" в области Windows Mixed Reality Параметры в разделе "Управление подключаемым модулем XR". Приложения DirectX вызывают CommitDirect3D11DepthBuffer. Приложение не должно вызывать SetFocusPoint.
  • Планарное перепроектирование: В каждом кадре приложения сообщают системе расположение плоскости для стабилизации. Приложения Unity вызывают SetFocusPointForFrame и должны отключать общий буфер глубины . Приложения DirectX вызывают SetFocusPoint и не должны вызывать CommitDirect3D11DepthBuffer.
  • Автоматическое перепроектирование планарного плана: Чтобы включить, приложению необходимо отправить буфер глубины в систему, так как они будут выполнять повторную подготовку глубины. Приложения, использующие Смешанная реальность набор средств (MRTK), могут настроить поставщик параметров камеры для использования автопланарного перепроектирования. Собственные приложения должны задать DepthReprojectionMode для каждого кадра значение holographicCameraRenderingParametersAutoPlanar. Для HoloLens поколения 1 приложение не должно вызывать SetFocusPoint.

Выбор метода повторного проецирования

Тип стабилизации Иммерсивные гарнитуры HoloLens поколения 1 HoloLens 2
Перепроектирование глубины Рекомендуемая Недоступно Рекомендуемая

Приложения Unity должны использовать Unity 2018.4.12+, Unity 2019.3 или Unity 2020.3+. В противном случае используйте автоматическое перепроектирование планарного плана.
Автоматическое перепроектирование планарного плана Недоступно Рекомендуемое значение по умолчанию Рекомендуется, если репроецирование глубины не дает наилучших результатов

Приложения Unity рекомендуется использовать Unity 2018.4.12+, Unity 2019.3+ или Unity 2020.3 и более поздних версий. Предыдущие версии Unity будут работать с немного сниженными результатами повторного проекта.
Перепроектирование планарного плана Не рекомендуется Рекомендуется, если автоматический планар не дает наилучших результатов Используйте, если ни из параметров глубины не дают нужных результатов

Проверка правильности настройки глубины

Если метод повторного создания использует буфер глубины, важно проверить содержимое буфера глубины, представляющего отрисованную сцену приложения. Ряд факторов может вызвать проблемы. Если есть вторая камера, используемая для отрисовки наложений пользовательского интерфейса, например, скорее всего, перезаписывает всю информацию глубины из фактического представления. Прозрачные объекты часто не задают глубину. Некоторые отрисовки текста по умолчанию не задают глубину. В отрисовке будут видимые сбои, если глубина не соответствует отрисованным голограммам.

HoloLens 2 имеет визуализатор, чтобы показать, где находится глубина и не задана, которая может быть включена на портале устройств. На вкладке "Стабильность viewsHologram>" установите флажок "Визуализация глубины отображения" в гарнитуре. Области с правильной глубиной будут синими. Отрисованные элементы, у которых нет набора глубины, помечены красным цветом и должны быть исправлены.

Примечание

Визуализация глубины не будет отображаться в Смешанная реальность захвате. Оно отображается только через устройство.

Некоторые средства просмотра GPU позволяют визуализировать буфер глубины. Разработчики приложений могут использовать эти средства, чтобы убедиться, что глубина задана правильно. Ознакомьтесь с документацией по средствам приложения.

Использование планарного перепроектирования

Примечание

Для иммерсивных гарнитур на рабочем столе установка плоскости стабилизации обычно контрпродуктивна, так как она обеспечивает меньше визуального качества, чем предоставление буферу глубины вашего приложения системе для включения повторного анализа глубины на основе пикселя. Если вы не работаете на HoloLens, как правило, не следует устанавливать плоскость стабилизации.

Stabilization plane for 3D objects

Устройство будет автоматически пытаться выбрать этот уровень, но приложение должно помочь, выбрав точку фокуса в сцене. Приложения Unity, работающие на HoloLens, должны выбрать оптимальную точку фокуса на основе сцены и передать ее в SetFocusPoint(). Пример настройки точки фокуса в DirectX включен в шаблон куба спиннинга по умолчанию.

Unity отправит буфер глубины в Windows, чтобы включить повторное выполнение каждого пикселя при запуске приложения на иммерсивной гарнитуре, подключенной к компьютеру с настольным компьютером, что обеспечивает еще лучшее качество изображения без явной работы приложения. Если приложение работает на HoloLens, следует указать точку фокусировки, или переопределение повторной проецирования на пиксель.

// SetFocusPoint informs the system about a specific point in your scene to
// prioritize for image stabilization. The focus point is set independently
// for each holographic camera.
// You should set the focus point near the content that the user is looking at.
// In this example, we put the focus point at the center of the sample hologram,
// since that is the only hologram available for the user to focus on.
// You can also set the relative velocity and facing of that content; the sample
// hologram is at a fixed point so we only need to indicate its position.
renderingParameters.SetFocusPoint(
    currentCoordinateSystem,
    spinningCubeRenderer.Position
    );

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

Самое важное, что разработчик может сделать для стабилизации голограмм — отрисовка на 60 FPS. Снижение до 60 FPS значительно снизит стабильность голограммы, независимо от оптимизации плоскости стабилизации.

Рекомендации Нет универсального способа настройки плоскости стабилизации, и это зависит от приложения. Наша основная рекомендация — поэкспериментировать и понять, что лучше всего подходит для вашего сценария. Однако старайтесь выравнивать плоскость стабилизации с максимально возможным содержимым, поскольку все содержимое на этой плоскости полностью стабилизировано.

Пример:

  • Если у вас есть только планарное содержимое (приложение чтения, приложение для воспроизведения видео), выравнивайте плоскость стабилизации с плоскости, которая содержит содержимое.
  • Если есть три небольших сферы, которые заблокированы в мире, сделайте плоскость стабилизации "сократить", хотя центры всех сфер, которые в настоящее время находятся в представлении пользователя.
  • Если в сцене есть содержимое на значительно разных глубинах, следует предпочесть дополнительные объекты.
  • Обязательно настройте точку стабилизации для каждого кадра, чтобы он совпадал с голограммой, на который смотрит пользователь

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

  • Не "огонь и забудь". Вы можете в конечном итоге с плоскостью стабилизации за пользователем или присоединенным к объекту, который больше не находится в представлении пользователя. Убедитесь, что нормальный уровень стабилизации установлен напротив камеры вперед (например, -camera.forward)
  • Не изменяйте плоскость стабилизации взад и вперед между крайности
  • Не оставляйте плоскость стабилизации фиксированного расстояния или ориентации
  • Не позволяйте плоскости стабилизации прорезать пользователя
  • Не устанавливайте точку фокуса при работе на настольном компьютере, а не на HoloLens, а вместо этого используйте повторную подготовку на основе глубины каждого пикселя.

Разделение цветов

Из-за характера HoloLens отображается артефакт, называемый "разделение цветами", иногда может восприниматься. Он проявляется в виде изображения, разделяющего отдельные базовые цвета : красный, зеленый и синий. Артефакт может быть особенно видимым при отображении белых объектов, так как они имеют большое количество красного, зеленого и синего. Это наиболее заметно, когда пользователь визуально отслеживает голограмму, которая перемещается через голографический кадр с высокой скоростью. Другой способ, который может проявляться артефактом, является перенапряжение или искажение объектов. Если объект имеет высокую контрастность и (или) чистые цвета, такие как красный, зеленый, синий, разделение цвета будет восприниматься как переоформление различных частей объекта.

Пример разделения цвета заблокированного головой белого круглого курсора может выглядеть так, как пользователь поворачивает голову на сторону:

Example of what the color separation of a head-locked white round cursor could look like as a user rotates their head to the side.

Хотя трудно полностью избежать разделения цвета, существует несколько методов для ее устранения.

Разделение цветов можно увидеть на:

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

Чтобы затенить эффекты разделения цвета, выполните следующие действия.

  • Сделайте объект задержкой взгляда пользователя. Он должен выглядеть так, как если бы он имеет некоторую инерцию и прикрепляется к взгляду "на весны". Этот подход замедляет курсор (уменьшая расстояние разделения) и помещает его за вероятной точкой взгляда пользователя. До тех пор, пока он быстро догоняет, когда пользователь перестает сдвигать взгляд, он чувствует себя естественным.
  • Если вы хотите переместить голограмму, попробуйте сохранить скорость перемещения ниже 5 градусов/секунды, если вы ожидаете, что пользователь будет следовать за ним глазами.
  • Используйте свет вместо геометрии для курсора. Источник виртуального освещения, прикрепленного к взгляду, будет рассматриваться как интерактивный указатель, но не приведет к разделению цвета.
  • Настройте плоскость стабилизации в соответствии с голограммами, на которые смотрит пользователь.
  • Сделайте объект красным, зеленым или синим.
  • Переключитесь на размытую версию содержимого. Например, круглый белый курсор можно изменить на слегка размытую линию в направлении движения.

Как и ранее, отрисовка на уровне 60 кадров и настройка плоскости стабилизации являются наиболее важными методами для стабильности голограммы. Если вы сталкивается с заметным разделением цвета, сначала убедитесь, что частота кадров соответствует ожиданиям.

См. также