Перенос приложений VR в Windows Mixed RealityPorting VR apps to Windows Mixed Reality

Windows 10 включает поддержку для впечатляющих и holographic головных телефонов.Windows 10 includes support for immersive and holographic headsets. Если вы создали содержимое для других устройств, таких как Окулус Рифт или HTC Naopak, они имеют зависимости от библиотек, существующих над API платформы операционной системы.If you've built content for other devices like the Oculus Rift or HTC Vive, they have dependencies on libraries that exist above the operating system's platform API. Применяя существующие приложения Win32 Unity версии к Windows Mixed Reality, предполагается изменение целевой платформы на использование пакетов SDK VR, зависящих от поставщика, к API-интерфейсам версии Unity Cross-Vendor.Bringing existing Win32 Unity VR apps over to Windows Mixed Reality involves retargeting usage of vendor-specific VR SDKs to Unity's cross-vendor VR APIs.

Требования к переносуPorting requirements

На высоком уровне следующие шаги участвуют в переносе существующего содержимого:At a high level, the following steps are involved in porting existing content:

  1. Убедитесь, что на компьютере работает обновление Windows 10 Creators Update (16299).Make sure your PC is running the Windows 10 Fall Creators Update (16299). Мы больше не рекомендуем получать предварительные сборки от программы предварительной оценки, так как эти сборки не будут самыми стабильными при разработке смешанной реальности.We no longer recommend receiving preview builds from the Insider Skip Ahead ring, as those builds won't be the most stable for mixed reality development.
  2. Обновите версию графического или игрового модуля до последней версии.Upgrade to the latest version of your graphics or game engine. Обработчики игр должны поддерживать версию пакета SDK для Windows 10 10.0.15063.0 (выпущена в апреле 2017) или более поздней версии.Game engines will need to support the Windows 10 SDK version 10.0.15063.0 (released in April 2017) or higher.
  3. Обновите любое промежуточное по, подключаемые модули или компоненты.Upgrade any middleware, plug-ins, or components. Если приложение содержит какие-либо компоненты, рекомендуется выполнить обновление до последней версии.If your app contains any components, it's a good idea to upgrade to the latest version.
  4. Удалите зависимости от повторяющихся пакетов SDK.Remove dependencies on duplicate SDKs. В зависимости от устройства, для которого предназначено содержимое, необходимо удалить или условно откомпилировать этот пакет SDK, чтобы вместо этого можно было ориентироваться на интерфейсы API Windows.Depending on which device your content was targeting, you'll need to remove or conditionally compile out that SDK so you can target the Windows APIs instead. Пример такого сценария — Стеамвр.An example of this scenario would be SteamVR.
  5. Работа с проблемами сборки.Work through build issues. На этом этапе упражнение по переносу зависит от вашего приложения, подсистемы и зависимостей компонентов.At this point, the porting exercise is specific to your app, your engine, and the component dependencies you have.

Общие этапы переносаCommon porting steps

1. Убедитесь, что у вас есть правильное оборудование для разработки1. Make sure you have the right development hardware

На странице Установка средств перечислены рекомендуемые средства разработки.The install the tools page lists the recommended development hardware.

2. обновление до последнего рейса Windows 102. Upgrade to the latest flight of Windows 10

Платформа Windows Mixed Reality все еще находится под активной разработкой.The Windows Mixed Reality platform is still under active development. Мы рекомендуем присоединиться к программе предварительной оценки Windows, чтобы получить доступ к рейсу о быстром выпуске Windows.We recommend joining the Windows Insider Program to access the "Windows Insider Fast" flight.

  1. Установка обновления Windows 10 для дизайнеровInstall the Windows 10 Creators Update
  2. Присоединяйтесь к программе предварительной оценки Windows.Join the Windows Insider Program.
  3. Включить режим разработчикаEnable Developer Mode
  4. Переключиться на быстрые авиарейсы по Windows с помощью параметров > Update & Security SectionSwitch to the Windows Insider Fast flights through Settings > Update & Security Section

3. обновление до последней сборки Visual Studio3. Upgrade to the most recent build of Visual Studio

  • Если вы используете Visual Studio, обновитесь до последней сборкиIf you're using Visual Studio, then upgrade to the most recent build
  • См. раздел Установка средств на странице Visual Studio 2019.See Install the tools page under Visual Studio 2019

4. Выберите правильный адаптер.4. Choose the correct Adapter

  • В таких системах, как записные книжки с двумя графическими процессорами, следует выбрать правильный адаптер.In systems like notebooks with two GPUs, target the correct adapter. Это относится к Unity и собственным приложениям DirectX, где ID3D11Device создается явно или неявно (Media Foundation) для своей функциональности.This applies to Unity and native DirectX apps where a ID3D11Device is created, either explicitly or implicitly (Media Foundation), for its functionality.

Руководство по переносу UnityUnity porting guidance

1. Ознакомьтесь с общими действиями по переносу, перечисленными выше.1. Review the common porting steps listed above

Чтобы убедиться, что среда разработки настроена правильно, ознакомьтесь с приведенными выше общими действиями.Review the common steps listed above to make sure your development environment is set up correctly. На шаге #3, если вы используете Visual Studio, следует выбрать рабочую нагрузку " Разработка игр с помощью Unity ".In step #3, if you're using Visual Studio you should select the Game Development with Unity workload. Вы можете отменить выбор компонента "необязательный редактор Unity", так как вы будете устанавливать более новую версию Unity на следующем шаге.You may deselect the "Unity Editor optional" component since you'll be installing a newer version of Unity in the next step.

2. обновление до последней общедоступной сборки Unity с поддержкой Windows MR2. Upgrade to the latest public build of Unity with Windows MR Support

  1. Скачайте последнюю рекомендуемую общедоступную сборку Unity с поддержкой смешанной реальности.Download the latest recommended public build of Unity with mixed reality support.
  2. Сохраните копию проекта, прежде чем приступить к работеSave a copy of your project before you get started
  3. Ознакомьтесь с документацией , доступной в Unity, при обновлении, если проект создан на основе более старой версии Unity.Review the documentation available from Unity on upgrading if your project was built on an older version of Unity.
  4. Следуйте инструкциям на сайте Unity для использования автоматических средств обновления API.Follow the instructions on Unity's site for using their automatic API updater
  5. Проверьте, есть ли дополнительные изменения, необходимые для запуска проекта, и выполните все оставшиеся ошибки и предупреждения.Check and see if there are additional changes that you need to make to get your project running, and work through any remaining errors and warnings.

Примечание

Если по промежуточного слоя от вас зависит, убедитесь, что вы используете последний выпуск (Дополнительные сведения см. на шаге 3 ниже).If you have middleware that you depend on, check that you're using the latest release (more details in step 3 below).

3. Обновите по промежуточного слоя до последних версий3. Upgrade your middleware to the latest versions

При любом обновлении Unity есть хороший шанс, что вам потребуется обновить один или несколько пакетов по промежуточного слоя, от которых зависит ваша игра или приложение.With any Unity update, there's a good chance that you'll need to update one or more middleware packages that your game or application depends on. Кроме того, обновление по промежуточного слоя повышает вероятность успеха на протяжении всего процесса переноса.Additionally, being up to date with the latest middleware increases the likelihood of success throughout the rest of the porting process.

4. Назначение приложения для запуска в Win324. Target your application to run on Win32

Изнутри приложения Unity:From inside your Unity application:

  • Выберите файл-> параметры сборкиNavigate to File -> Build Settings
  • Выберите "компьютер, Mac, автономная версия Linux"Select "PC, Mac, Linux Standalone"
  • Задать целевую платформу "Windows"Set target platform to "Windows"
  • Установка архитектуры "x86" выберите параметр "платформа"Set architecture to "x86" Select "Switch Platform"

Примечание

Если приложение имеет какие-либо зависимости от служб для конкретных устройств, таких как сопоставление из Steam, необходимо отключить их на этом шаге.If your application has any dependencies on device-specific services, such as match making from Steam, you'll need to disable them at this step. Вы можете подключиться к эквивалентным службам, которые Windows предоставляет позже.You can hook up to the equivalent services that Windows provides later on.

5. Настройка оборудования Windows Mixed Reality5. Setup your Windows Mixed Reality hardware

  1. Ознакомьтесь с этапами настройки иммерсивного головного телефонаReview steps in Immersive headset setup
  2. Узнайте об использовании симулятора Windows Mixed Reality и навигации на домашней странице Windows Mixed RealityLearn about Using the Windows Mixed Reality simulator and Navigating the Windows Mixed Reality home

6. Назначение приложения для запуска в Windows Mixed Reality6. Target your application to run on Windows Mixed Reality

  1. Во-первых, необходимо удалить или условно откомпилировать любую другую поддержку библиотеки, относящуюся к конкретному пакету SDK для VR.First, you must remove or conditionally compile out any other library support specific to a particular VR SDK. Эти активы часто изменяют параметры и свойства проекта способами, несовместимыми с другими пакетами SDK для VR, такими как Windows Mixed Reality.Those assets frequently change settings and properties on your project in ways that are incompatible with other VR SDKs, such as Windows Mixed Reality.
    • Например, если проект ссылается на пакет SDK для Стеамвр, необходимо обновить проект, чтобы вместо этого использовать общие API-интерфейсы среды Unity, которые поддерживают как Windows Mixed Reality, так и Стеамвр.For example, if your project references the SteamVR SDK, you'll need to update your project to instead use Unity's common VR APIs that support both Windows Mixed Reality and SteamVR.
    • В ближайшее время ожидается процедура, исключающая другие пакеты SDK для VR.Specific steps for conditionally excluding other VR SDKs are coming soon.
  2. В проекте Unity нацеливание на пакет SDK для Windows 10In your Unity project, target the Windows 10 SDK
  3. Для каждой сцены Настройте камеру .For each scene, setup the camera

7. использование этапа для размещения содержимого в этаже7. Use the stage to place content on the floor

Вы можете создавать возможности смешанной реальности во множестве различных возможностей масштабирования.You can build Mixed Reality experiences across a wide range of experience scales.

Если вы переносите интерфейсное масштабирование, необходимо убедиться, что Unity настроен на стационарный тип пространства отслеживания:If you're porting a seated-scale experience, you must ensure Unity is set to the Stationary tracking space type:

XRDevice.SetTrackingSpaceType(TrackingSpaceType.Stationary);

Приведенный выше код устанавливает мировую систему координат Unity для трассировки стационарной рамки ссылки.This above code sets Unity's world coordinate system to track the stationary frame of reference. В режиме стационарного отслеживания содержимое, помещенное в редактор непосредственно перед расположением по умолчанию камеры (переадресация — Z), отображается перед пользователем при запуске приложения.In the Stationary tracking mode, content placed in the editor just in front of the camera's default location (forward is -Z) appears in front of the user when the app launches. Чтобы перецентрировать исходный элемент пользователя, можно вызвать XR Unity. Метод Инпуттраккинг. recenter .To recenter the user's seated origin, you can call Unity's XR.InputTracking.Recenter method.

Если вы проведете переносные средства или возможности масштабирования комнаты, вы помещаете содержимое относительно пола.If you're porting a standing-scale experience or room-scale experience, you'll be placing content relative to the floor. Вы указываете на этаж пользователя с помощью пространственного этапа, который представляет определенное пользователем происхождение на уровне пола и дополнительную границу комнаты, настраивается во время первого запуска.You reason about the user's floor using the spatial stage, which represents the user's defined floor-level origin and optional room boundary, set up during first run. Для этих возможностей необходимо убедиться, что для Unity задан тип пространства отслеживания румскале .For these experiences, you must ensure Unity is set to the RoomScale tracking space type. Хотя Румскале является значением по умолчанию, необходимо явно задать его и убедиться, что вы получаете значение true, чтобы выявить ситуации, в которых пользователь переместил компьютер за пределы разкалиброванной комнаты.While RoomScale is the default, you'll want to set it explicitly and ensure you get back true, to catch situations where the user has moved their computer away from the room they calibrated:

if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
    // RoomScale mode was set successfully.  App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
    // RoomScale mode was not set successfully.  App cannot make assumptions about where the floor plane is.
}

После того как приложение успешно установит тип пространства отслеживания Румскале, на этаж будут отображаться содержимое, помещенное на плоскости y = 0.Once your app successfully sets the RoomScale tracking space type, content placed on the y=0 plane will appear on the floor. Источник в точке (0, 0, 0) будет определять конкретное место в этаже, где пользователь стояли во время настройки комнаты, с параметром-Z, представляющим Направление переадресации во время установки.The origin at (0, 0, 0) will be the specific place on the floor where the user stood during room setup, with -Z representing the forward direction they were facing during setup.

В коде скрипта можно вызвать метод Трижетжеометри, так как тип UnityEngine. экспериментальный. XR. граничное используется для получения граничного многоугольника, указывая тип границы Траккедареа.In script code, you can then call the TryGetGeometry method on you're the UnityEngine.Experimental.XR.Boundary type to get a boundary polygon, specifying a boundary type of TrackedArea. Если пользователь определил границу (вы получаете список вершин), вы можете легко предоставить пользователю возможности масштабирования комнаты , где они могут пройти по создаваемой сцене.If the user defined a boundary (you get back a list of vertices), it's safe to deliver a room-scale experience to the user, where they can walk around the scene you create.

Система автоматически визуализирует границу, когда пользователь его приближает.The system will automatically render the boundary when the user approaches it. Приложению не нужно использовать этот многоугольник для отрисовки самой границы.Your app does not need to use this polygon to render the boundary itself.

Дополнительные сведения см. на странице системы координат на Unity .For more information, see the Coordinate systems in Unity page.

Пример результатов:Example of results:

Пример результатов

Алгоритм основан на блоге, Даниэль Смилков: самый крупный прямоугольник в многоугольникеAlgorithm is based on a blog by Daniel Smilkov: Largest rectangle in a polygon

8. Работа с моделью ввода8. Work through your input model

Каждая игра или приложение, предназначенное для существующего ХМД, будет иметь набор входных данных, которые он обрабатывает, типы входных данных, необходимые для работы, и конкретные интерфейсы API, которые он вызывает для получения этих входных данных.Each game or application targeting an existing HMD will have a set of inputs that it handles, types of inputs that it needs for the experience, and specific APIs that it calls to get those inputs. Мы реализовали попытку сделать это как можно проще и простым, чтобы воспользоваться преимуществами входных данных, доступных в Windows Mixed Reality.We've invested in trying to make it as simple and straightforward as possible to take advantage of the inputs available in Windows Mixed Reality.

Прочтите руководство по переносу данных для Unity на соседней вкладке, чтобы узнать, как Windows Mixed Reality предоставляет входные данные, и как они сопоставлены с тем, что приложение может сделать сегодня.Read through the input porting guide for Unity in the adjacent tab for details of how Windows Mixed Reality exposes input, and how that maps to what your application may do today.

9. Тестирование и настройка производительности9. Performance testing and tuning

Windows Mixed Reality будет доступна на широком классе устройств, от высокопроизводительных компьютерных ПК до широкого спектра основных ПК на рынке.Windows Mixed Reality will be available on a broad class of devices, ranging from high end gaming PCs, down to broad market mainstream PCs. В зависимости от того, на каком рынке ориентирован целевой объект, существует существенная разница в доступных вычислениях и графических бюджетах для вашего приложения.Depending on what market you're targeting, there's a significant difference in the available compute and graphics budgets for your application. Во время этого упражнения по переносу вы, скорее всего, используете ПК уровня "Премиум" и имели значительные бюджетные и графические графики, доступные для вашего приложения.During this porting exercise, you're likely leveraging a premium PC, and have had significant compute and graphics budgets available to your app. Если вы хотите сделать приложение доступным более широкой аудитории, следует протестировать и профилировать приложение на целевом оборудовании, которое вы хотитеиспользовать.If you wish to make your app available to a broader audience, you should test and profile your app on the representative hardware that you wish to target.

Unity и Visual Studio включают в себя Профилировщики производительности, а как Корпорация Майкрософт , так и Корпорация Intel публикуют рекомендации по профилированию и оптимизации производительности.Both Unity and Visual Studio include performance profilers, and both Microsoft and Intel publish guidelines on performance profiling and optimization. Существует подробное обсуждение производительности, доступное для понимания производительности смешанной реальности.There's an extensive discussion of performance available at Understanding Performance for Mixed Reality. Дополнительные сведения о Unity см. в разделе рекомендации по повышению производительности для Unity.Further, there are specific details for Unity under Performance Recommendations for Unity.

Руководство по нереальному переносуUnreal porting guidance

Важно!

Если вы используете контроллеры HP reverbы G2, обратитесь к этой статье для получения дополнительных инструкций по сопоставлению входных данных.If you're using HP Reverb G2 controllers, please refer to this article for additional input mapping instructions.

См. такжеSee also