Устранение неполадок

На этой странице перечислены распространенные проблемы, мешающие Удаленной отрисовке Azure, и способы их устранения.

Клиенту не удается подключиться к серверу

Убедитесь, что брандмауэры (на устройстве, в маршрутизаторах и т. д.) не блокируют порты, указанные в требованиях к системе.

Не удалось загрузить модель

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

Иногда во время связывания учетной записи хранения учетной записи Удаленной отрисовки нет в списке. Чтобы устранить эту проблему, перейдите к учетную запись ARR в портал Azure и выберите Удостоверение в группе Параметры слева. Убедитесь, что Состояние имеет значение Вкл.. Unity frame debugger

Не удается загрузить модель с помощью маркера SAS

Если клиентское приложение не может загрузить модель из хранилища с помощью допустимого маркера SAS, это может быть вызвано уровнем доступа к общедоступной сети, настроенным в хранилище BLOB-объектов. Загрузка модели ARR из маркера SAS работает только в том случае, если она была настроена с параметром "Включено из всех сетей": Screenshot of Azure portal settings for public network access level on blob storage.

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

Ошибка Disconnected: VideoFormatNotAvailable

Убедитесь, что GPU поддерживает аппаратное декодирование видео. См. раздел Разработка ПК.

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

Сбой при получении сведений о состоянии сеанса или преобразования

Отправка команд REST API слишком часто приводит к тому, что сервер будет регулировать и возвращать сбой в конечном итоге. Код состояния HTTP в регистре регулирования равен 429 ("слишком много запросов"). Поэтому очень важно, чтобы между последовательными вызовами была задержка в 5–10 секунд.

Примечание. Это ограничение не только влияет на вызовы REST API напрямую, но также на аналоги C#/C ++, такие как Session.GetPropertiesAsync, Session.RenewAsync или Frontend.GetAssetConversionStatusAsync. Некоторые функции также возвращают сведения при сохранении для повторных попыток. Например, RenderingSessionPropertiesResult.MinimumRetryDelay указывает, сколько секунд нужно ждать, прежде чем пытаться выполнить другую проверка. Если доступно, использование такого возвращаемого значения лучше всего подходит, так как это позволяет выполнять проверка как можно чаще, без регулирования.

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

Кодек H265 недоступен

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

Кодек H265 не установлен:

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

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

Кодек установлен, но его нельзя использовать:

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

  1. Откройте консоль PowerShell с правами администратора

    Get-AppxPackage -Name Microsoft.HEVCVideoExtension*
    

    (Обратите внимание, что "*" связано с тем, что для некоторых версий установки пакета имя не HEVCVideoExtensionсоответствуетHEVCVideoExtensions). Эта команда должна выводить InstallLocation кодека, например:

    InstallLocation   : C:\Program Files\WindowsApps\Microsoft.HEVCVideoExtension_1.0.23254.0_x64__5wasdgertewe
    
  2. Открыть папку в проводнике Windows

  3. Необходимо использовать x86 и вложенную папку x64. Щелкните правой кнопкой мыши одну из папок и выберите Свойства.

    1. Выберите вкладку "Безопасность " и нажмите кнопку "Дополнительные параметры"
    2. Выберите "Изменить " для владельца
    3. Введите Администраторы в текстовое поле.
    4. Выберите "Проверить имена" и "ОК"
  4. Повторите предыдущие шаги для всех узлов кластера.

  5. Кроме того, повторите описанные выше действия для каждого файла DLL в обеих папках. Должны быть все четыре библиотеки DLL.

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

  1. Выбор правки безопасности > свойств >
  2. Просмотрите список всех Групп и пользователей и убедитесь, что у каждого из них есть набор прав Чтение & выполнение (флажок в столбце Разрешить должен быть установлен).

Низкое качество видео

Качество видео может быть снижено либо из-за качества соединения, либо из-за отсутствия видеокодека H265.

Видео, записанное с помощью MRC, не отражает качество трансляции

Видео может быть записано на Hololens с помощью съемки смешанной реальности. Однако качество полученного видео хуже, чем прямой эфир:

  • Частота видео ограничена 30 Гц, а не 60 Гц.
  • Видеоматериалы не проходят через этап повторной подготовки к последней стадии, поэтому видео, как представляется, отбивается.

Эти эффекты являются ограничениями техники записи.

Черный экран после успешной загрузки модели

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

Перед выполнением более подробного анализа рекомендуется протестировать следующие вещи.

  • Установлен ли кодек H265? Хотя следует вернуться к кодеку H264, мы видели случаи, когда этот резервный вариант не работал должным образом. См. требования к системе для установки последней версии графического драйвера.
  • При использовании проекта Unity закройте Unity, удалите временную библиотеку и папку obj в каталоге проекта, а затем снова загрузите и повторите сборку проекта. В некоторых случаях кэшированные данные вызвали неправильное функционирование тестовых данных.

Если эти два шага не помогли, необходимо выяснить, получены ли видеокадры клиентом или нет. Это можно запросить программно, как описано в главе Запросы производительности на стороне сервера. В FrameStatistics struct есть элемент, указывающий на количество полученных видеокадров. Если это число больше 0 и со временем увеличивается, клиент получает фактические видеокадры с сервера. Таким образом, это должна быть проблема на стороне клиента.

Масштабирование в параметрах преобразования не применяется к модели.

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

В случае демонстрации автоматическое масштабирование можно отключить, указав MaxSize ноль в разделе модели Transform в файле models.xml. Этот подход, управляемый данными, требует, чтобы модель загружалась через XML в первую очередь, так как во всех остальных случаях MaxSize значение по умолчанию составляет 1 метр. Существует также MinSize свойство, которое по умолчанию составляет 0,5 метра, что приводит к масштабированию всех небольших моделей. Дополнительные сведения о способах загрузки моделей в демонстрации см . в разделе "Добавление трехмерных ресурсов модели в ARR"Демонстрация" документации по демонстрации .

Распространенные проблемы на стороне клиента

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

Дополнительные сведения см. в разделе об ограничениях на конкретные размеры сервера.

Модель находится за пределами усеченной пирамиды представления:

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

Кроме того, процесс преобразования создает выходной JSON-файл вместе с преобразованной моделью. Чтобы отладить проблемы с размещением модели, стоит взглянуть на boundingBox запись в разделе outputStatistics:

{
    ...
    "outputStatistics": {
        ...
        "boundingBox": {
            "min": [
                -43.52,
                -61.775,
                -79.6416
            ],
            "max": [
                43.52,
                61.775,
                79.6416
            ]
        }
    }
}

ограничивающий прямоугольник описывается координатами min и max в трехмерном пространстве, в метрах. Таким образом, координата 1000,0 означает, что это 1 км от источника.

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

  • Прямоугольник может быть позиционирован не по центру, поэтому объект обрезается из-за обрезки дальних краев. Значения boundingBox в этом случае будут выглядеть следующим образом: min = [-2000, -5,-5], max = [-1990, 5,5], используя большое смещение на оси x в качестве примера. Чтобы устранить проблему такого типа, включите параметр recenterToOrigin в конфигурации преобразования модели.
  • Прямоугольник можно центрировать, но порядок величин слишком большой. Это означает, что, хотя камера запускается в центре модели, ее геометрия обрезается во всех направлениях. Типичные значения boundingBox в этом случае будут выглядеть следующим образом: min = [-1000,-1000,-1000], max = [1000,1000,1000]. Причиной такого типа проблемы обычно является несоответствие масштабирования единиц. Чтобы скомпенсировать это, укажите значение масштабирования во время преобразования или разметьте исходную модель правильными единицами. Масштабирование можно также применить к корневому узлу при загрузке модели во время выполнения.

Конвейер рендеринга Unity не включает обработчики рендеринга:

Модуль удаленного рендеринга Azure подключается к конвейеру рендеринга Unity, чтобы выполнить композицию кадров с видео и репроекцию. Чтобы убедиться, что эти перехватчики существуют, откройте меню Window > Analysis > Frame debugger. Включите его и убедитесь, что для HolographicRemotingCallbackPass в конвейере есть две записи:

Unity render pipeline

Чтобы исправить эту проблему, убедитесь, что используется предоставленный ресурс HybridRenderingPipeline : Screenshot of the Unity asset browser and Project Settings dialog. The HybridRenderingPipeline asset is highlighted in the asset browser. An arrow points from the asset to the UniversalRenderPipelineAsset field in project settings.

.. как описано более подробно в конвейерах отрисовки Unity.

Узор шахматной доски отображается после загрузки модели

Если отрисованное изображение выглядит следующим образом: Screenshot shows a grid of black and white squares with a Tools menu.

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

Преобразованное изображение в Unity перевернуто

Обязательно точно следуйте указаниям из учебника по Unity для просмотра удаленных моделей. Перевернутое изображение указывает на то, что в Unity необходимо создать целевой объект отрисовки за пределами экрана. Сейчас такое поведение не поддерживается и оказывает значительное негативное воздействие на производительность в HoloLens 2.

Причиной этой проблемы могут быть MSAA, HDR или включение постобработки. Убедитесь, что выбран профиль низкого качества и задан в Unity как значение по умолчанию. Для этого перейдите к разделу "Изменить > проект" Параметры... > Качество.

При использовании подключаемого модуля OpenXR в Unity 2020 имеются версии URP (универсального конвейера отрисовки), которые создают этот дополнительный целевой объект отрисовки за пределами экрана, независимо от того, включена ли постобработка. Таким образом, важно вручную обновить версию URP до не менее 10.5.1 (или более поздней). Этот процесс обновления описан в системных требованиях.

Код Unity, использующий API удаленного рендеринга, не компилируется

Использовать отладку при компиляции для редактора Unity

Переключить тип сборки решения Unity на режим Отладки. При тестировании ARR в редакторе Unity определение UNITY_EDITOR доступно только в сборках типа "Отладка". Этот параметр не связан с типом сборки, используемым для развернутых приложений, где следует предпочитать сборки Release.

Ошибки компиляции при компиляции примеров Unity для HoloLens 2

Мы видели сбои при попытке компилировать примеры Unity (краткое руководство, ShowCaseApp, ... ) для HoloLens 2. Visual Studio жалуется на отсутствие возможности копирования некоторых файлов, хотя они там. Если вы столкнулись с этой проблемой, сделайте следующее.

  • Удалите все временные файлы Unity из проекта и повторите попытку. Закройте Unity, удалите временную библиотеку и папку obj в каталоге проекта, а затем снова загрузите и повторите сборку проекта.
  • Убедитесь, что проекты расположены в каталоге на диске с достаточно коротким путем, так как иногда на этапе копирования возникают проблемы с длинными именами файлов.
  • Если это не поможет, это может быть то, что MS Sense вмешивается в шаг копирования. Чтобы настроить исключение, выполните следующую команду реестра из командной строки (требуются права администратора):
    reg.exe ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection" /v groupIds /t REG_SZ /d "Unity"
    

Не удается выполнить сборки Arm64 для проектов Unity, так как отсутствует AudioPluginMsHRTF.dl

AudioPluginMsHRTF.dll для Arm64 был добавлен в пакет Смешанная реальность Windows(com.unity.xr.windowsmr.metro) в версии 3.0.1. Убедитесь, что у вас установлена версия 3.0.1 или более поздняя с помощью диспетчера пакетов Unity. В строке меню Unity перейдите в окно > диспетчер пакетов и найдите пакет Windows Смешанная реальность.

Подключаемый модуль Unity Cinemachine не работает в режиме удаленной позы

В режиме удаленной позирования код привязки ARR Unity неявно создает прокси-камеру, которая выполняет фактическую отрисовку. В этом случае маска выбраковки основной камеры имеет значение 0 ("ничего") для эффективного отключения отрисовки. Однако некоторые сторонние подключаемые модули (например Cinemachine), которые управляют камерой, могут полагаться по крайней мере на некоторые биты слоя, заданные.

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

  1. Создайте новый слой в Unity, который не используется для отрисовки какой-либо локальной геометрии сцены. В этом примере предполагается, что слой называется Cam.
  2. Передайте эту битовую маску в ARR, чтобы ARR установила ее на главной камере:
    RemoteManagerUnity.CameraCullingMask = LayerMask.GetMask("Cam");
    
  3. Cinemachine Настройте свойства для использования этого нового слоя:Screenshot that shows Unity's inspector panel for camera settings in Cinemachine.

Локальный режим позирования не влияет на эту проблему, так как в этом случае привязка ARR не перенаправляет отрисовку на внутреннюю прокси-камеру.

Собственное приложение на основе C++ не компилируется

Ошибка "Библиотека не найдена" для приложения UWP или библиотеки DLL

В пакете NuGet C++ есть файл microsoft.azure.remoterendering.Cpp.targets , определяющий, какой из двоичного вкуса следует использовать. Для обнаружения UWP условия в файле выполняют проверку на наличие ApplicationType == 'Windows Store'. Поэтому необходимо убедиться, что этот тип задан в проекте. Это выполняется при создании приложения UWP или библиотеки DLL с помощью мастера проектов Visual Studio.

Нестабильная голограмма

Если готовые к просмотру объекты перемещаются вместе с перемещениями головок, могут возникать проблемы с репроецированием на поздних этапах (LSR). Дополнительные сведения о том, как обрабатывать такую ситуацию, см. в разделе Репроецирование на поздних этапах.

Другими причинами нестабильной голограммы (дергание, искривление, колебание или прыжки) может быть плохое сетевое подключение, в частности недостаточная пропускная способность сети или слишком высокая задержка. Хорошим индикатором качества сетевого подключения является значение статистики производительностиServiceStatistics.VideoFramesReused. Повторно используемые кадры указывают на ситуации, когда старый видеокадр необходимо повторно использовать на стороне клиента, поскольку новый видеокадр был недоступен, например из-за потери пакетов или из-за вариаций задержки сети. Если ServiceStatistics.VideoFramesReused часто больше нуля, это указывает на проблему сети.

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

Список возможных рисков см. в рекомендации по подключению к сети.

Локальное содержимое (UIs, ...) в HoloLens 2 отрисовывается со значительно большими артефактами искажения, чем без ARR

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

Z-конфликт

Хотя при маршрутизации запросов приложений предлагается возможность устранения рисков Z-конфликтов , Z-конфликт по-прежнему может возникнуть. В этом руководстве описано устранение этих оставшихся проблем.

Используйте указанный ниже рабочий процесс для устранения Z-конфликтов.

  1. Протестируйте сцену, используя параметры по умолчанию для маршрутизации запросов приложений (устранение рисков Z-конфликтов).

  2. Отключите устранение рисков Z-конфликтов с помощью API.

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

  4. Устраните неполадки сцены с помощью инструкций из следующего раздела.

Исследование оставшегося Z-конфликта

Если описанные выше действия не позволили устранить проблему, а Z-конфликт остается неприемлемым, то необходимо определить основную причину Z-конфликта. Как указано на странице со сведениями о возможности для устранения рисков Z-конфликта, у Z-конфликта могут быть две основные причины: сбой определения точности глубины в дальнем конце диапазона глубины, а также пересечение поверхностей в одной плоскости. Сбой определения точности глубины — это математическая проблема, которую можно устранить, выполнив указанный выше шаг 3. При наличии поверхностей в одной плоскости может возникнуть проблема с исходным ресурсом, которая устраняется с помощью исходных данных.

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

Animation shows an example of depth-precision loss in the distance.Animation shows an example of nearly coplanar surfaces.

Сравните эти примеры с z-боем, чтобы определить первопричину или при необходимости выполнить этот пошаговый рабочий процесс:

  1. Расположите камеру над поверхностями с Z-конфликтом, чтобы она была направлена прямо на поверхность.
  2. Медленно удаляйте камеру от поверхностей.
  3. Если Z-конфликт виден все время, поверхности полностью в одной плоскости.
  4. Если Z-конфликт виден большую часть времени, поверхности почти полностью в одной плоскости.
  5. Если Z-конфликт виден только издалека, причиной является недостаточная точность глубины.

Сопланарные поверхности могут иметь множество различных причин:

  • Объект был продублирован экспортирующим приложением из-за ошибки или различных методов рабочего процесса.

    Устраните эти проблемы с помощью соответствующего приложения и службы поддержки приложений.

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

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

  • Объекты пересекаются в исходных ресурсах.

    Если объекты преобразованы таким образом, что некоторые из их поверхностей перекрываются, также может возникнуть Z-конфликт. Преобразование частей дерева в импортированной сцене при маршрутизации запросов приложений также может привести к возникновению этой проблемы.

  • Поверхности специально созданы с прикосновением, как деколи или надписи на стенах.

Графические артефакты с использованием многопроходной стереоотрисовки в собственных приложениях C++

В некоторых случаях при использовании пользовательских собственных приложений C++ в режиме многопроходной стереоотрисовки для локального содержимого (отрисовка для левого и правого глаза в отдельных проходах) после вызова BlitRemoteFrame может произойти ошибка драйвера. При ошибке происходит сбой недетерминированной растеризации, что приводит к случайному исчезновению отдельных треугольников или частей треугольников локального содержимого. По соображениям производительности рекомендуется в любом случае отобразить локальное содержимое с помощью более современного метода однопроходной стереорисовки, например с помощью SV_RenderTargetArrayIndex.

Ошибки при скачивании файла преобразования

Служба преобразования может столкнуться с ошибками загрузки файлов из хранилища BLOB-объектов из-за ограничений файловой системы. Ниже перечислены конкретные случаи сбоя. Подробные сведения об ограничениях файловой системы Windows см. в документации по именованию файлов, путей и пространств имен.

Путь к конфликту и имя файла

В хранилище BLOB-объектов можно создать файл и папку с одинаковым именем, что и записи с братом. Файловая система Windows не разрешает это. Соответственно, служба выдает ошибку скачивания в этом случае.

Длина пути

Существуют ограничения длины пути, введенные Windows и службой. Значения путей к файлам и имен файлов в хранилище BLOB-объектов не должны превышать 178 символов. Например, задано blobPrefixmodels/Assetsзначение 13 символов:

models/Assets/<any file or folder path greater than 164 characters will fail the conversion>

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

{
  "settings": {
    "inputLocation": {
      "storageContainerUri": "https://contosostorage01.blob.core.windows.net/arrInput",
      "blobPrefix": "models/Assets",
      "relativeInputAssetPath": "myAsset.fbx"
    ...
  }
}
models
├───Assets
│   │   myAsset.fbx                 <- Asset
│   │
│   └───Textures
│   |       myTexture.png           <- Used in conversion
│   |
|   └───MyFiles
|          myOtherFile.txt          <- File also downloaded under blobPrefix      
|           
└───OtherFiles
        myReallyLongFileName.txt    <- Ignores files not under blobPrefix             

HoloLens2 "Создать фотографию" (MRC) не отображает локальное или удаленное содержимое

Эта проблема обычно возникает, если проект обновляется из WMR в OpenXR и проект обращается к параметрам класса HolographicViewConfiguration (Windows.Graphics.Holographic). Этот API не поддерживается в OpenXR и не должен быть доступ к ней.

Следующие шаги