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

Для достижения стабильной голограммы 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 м также выгодно, так как два дисплея предназначены для полного перекрытия на этом расстоянии. Для изображений, размещенных за этой плоскостью, при смещении сбоку голографического кадра они будут отображаться на одном дисплее, но по-прежнему видимы на другом. Такое бинокулярное соперничество может нарушить восприятие глубины голограммы.

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

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

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

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

Повторное проецирование

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

Существует четыре main типа перепроецирования.

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

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

  • Повторное проецирование глубины: Приложение отправляет буфер глубины в систему для каждого отрисованного кадра. В Unity перепроецирование глубины выполняется с помощью параметра Общий буфер глубины в области параметров Windows Mixed Reality в разделе Управление подключаемым модулем XR. Приложения DirectX вызывают CommitDirect3D11DepthBuffer. Приложение не должно вызывать SetFocusPoint.
  • Планарное перепроецирование: На каждом кадре приложения сообщают системе расположение плоскости для стабилизации. Приложения Unity вызывают SetFocusPointForFrame и должны отключить общий буфер глубины . Приложения DirectX вызывают SetFocusPoint и не должны вызывать CommitDirect3D11DepthBuffer.
  • Автоматическое перепроецирование плана: Чтобы включить этот параметр, приложению необходимо отправить буфер глубины в систему так же, как и для перепроецирования глубины. Приложения, использующие Смешанная реальность Toolkit (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 имеет визуализатор, чтобы показать, где глубина и где не задана, которую можно включить на портале устройств. На вкладке Представления>Голограмма Стабильность установите флажок Визуализация глубины отображения в гарнитуре . Области, для которых задана правильно глубина, будут синими. Отображаемые элементы без заданной глубины помечаются красным цветом и должны быть исправлены.

Примечание

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

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

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

Примечание

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

Плоскость стабилизации для трехмерных объектов

Устройство автоматически попытается выбрать эту плоскость, но приложение должно помочь, выбрав точку фокуса в сцене. Приложения 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 кадров/с. Снижение ниже 60 кадров/с значительно снизит стабильность голограммы, независимо от оптимизации плоскости стабилизации.

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

Пример:

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

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

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

Цветообъединение

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

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

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

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

Цветовое разделение можно увидеть на:

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

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

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

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

См. также раздел