ОтрисовкаRendering

С помощью подготовки к просмотру в приложении можно нарисовать голограмму в определенном месте мира по всему миру, независимо от того, размещается ли оно в физическом мире или в пределах созданной виртуальной области.Holographic rendering enables your application to draw a hologram at a precise location in the world around the user, whether it's precisely placed in the physical world or within a virtual realm you've created. Голограммы — это объекты, состоящие из звука и освещения.Holograms are objects made of sound and light. Подготовка к просмотру позволяет приложению добавить источник освещения.Rendering enables your application to add the light.

Поддержка устройствDevice support

ВозможностьFeature HoloLens (первый общий)HoloLens (first gen) HoloLens 2HoloLens 2 Иммерсивные гарнитурыImmersive headsets
ОтрисовкаRendering ✔️✔️ ✔️✔️ ✔️✔️

Голографическая отрисовкаHolographic rendering

Ключ к отработной отрисовке — это знание того, какой тип устройства используется.Key to holographic rendering is knowing what kind of device is being used. Устройства с видимыми экранами, например HoloLens, добавляют свет в мир.Devices with see-through displays, such as HoloLens, add light to the world. Черные пиксели полностью прозрачны, тогда как более яркие Пиксели все больше непрозрачны.Black pixels are fully transparent, while brighter pixels are increasingly opaque. Поскольку свет из экранов добавляется к источнику света из реального мира, белые Пиксели прозрачны.Because the light from the displays is added to the light from the real world, white pixels are translucent.

Хотя отрисовка стереоскопик предоставляет одну подсказку глубины для голограмм, добавление эффектов заземления может помочь пользователям быстрее увидеть, на какой поверхности приближается голограмма.While stereoscopic rendering provides one depth cue for your holograms, adding grounding effects can help users see more easily what surface a hologram is near. Один прием заземления заключается в том, чтобы добавить свечение вокруг голограммы на соседней поверхности, а затем визуализировать тень относительно этого свечения.One grounding technique is to add a glow around a hologram on the nearby surface, and then render a shadow against this glow. Таким образом, тень выглядит так, чтобы вычесть освещение из среды.In this way, your shadow appears to subtract light from the environment. Пространственный звук — это еще одна важная подсказка, позволяющая пользователям узнать о расстоянии и относительном расположении голограммы.Spatial sound is another important depth cue, letting users reason about the distance and relative location of a hologram.

Устройства с непрозрачными дисплеями, например с помощью впечатляющих головных телефонов Windows Mixed Reality, блокируют мир.Devices with opaque displays, like Windows Mixed Reality immersive headsets, block out the world. Черные Пиксели — это сплошной черный цвет, а любой другой цвет отображается в качестве цвета для пользователя.Black pixels are solid black, and any other color appears as that color to the user. Приложение отвечает за визуализацию всех, что видит пользователь.Your application is responsible for rendering everything the user sees. Это делает еще более важным поддержание постоянной частоты обновления, чтобы пользователи имели опыт работы.This makes it even more important to maintain a constant refresh rate so that users have a comfortable experience.

Параметры прогнозируемой отрисовкиPredicted rendering parameters

Гарнитуры смешанной реальности (HoloLens и иммерсивное гарнитуры) постоянно отправляют положение и ориентацию заголовка пользователя относительно их окружающей среды.Mixed reality headsets (both HoloLens and immersive headsets) continually track the position and orientation of the user's head relative to their surroundings. По мере того, как приложение начинает подготовку следующего кадра, система прогнозирует, где головной компьютер будет находиться в будущем на тот момент, когда кадр отображается на экране.As your application begins preparing its next frame, the system predicts where the user's head will be in the future at the exact moment that the frame shows up on the displays. На основе этого прогноза система вычисляет представление и преобразования проекции для использования в этом кадре.Based on this prediction, the system calculates the view and the projection transforms to use for that frame. Приложение должно использовать эти преобразования для получения правильных результатов.Your application must use these transforms to produce correct results. Если преобразования, предоставляемые системой, не используются, полученный образ не будет согласован с реальным миром, что приведет к дискомфорт пользователя.If system-supplied transforms aren't used, the resulting image won't align with the real world, leading to user discomfort.

Примечание

Чтобы точно предсказать, когда к экранам будет достигнут новый кадр, система постоянно измеряет эффективную сквозную задержку конвейера отрисовки приложения.To accurately predict when a new frame will reach the displays, the system is constantly measuring the effective end-to-end latency of your application's rendering pipeline. Несмотря на то, что система корректирует длину конвейера отрисовки, можно повысить стабильность, сохранив этот конвейер как можно короче.While the system adjusts to the length of your rendering pipeline, you can improve hologram stability by keeping that pipeline as short as possible.

Приложения, использующие дополнительные методы для расширения системы прогнозирования, могут переопределять системные представления и преобразования проекций.Applications that use advanced techniques to augment the system prediction can override the system view and projection transforms. Эти приложения по-прежнему должны использовать системные преобразования в качестве базиса для своих пользовательских преобразований для получения осмысленных результатов.These applications must still use system-supplied transforms as a basis for their custom transforms to produce meaningful results.

Другие параметры подготовки к просмотруOther rendering parameters

При отрисовке кадра система указывает окно просмотра заднего буфера, в котором должно рисоваться приложение.When rendering a frame, the system specifies the back-buffer viewport in which your application should draw. Это окно просмотра часто меньше, чем полный размер буфера кадров.This viewport is often smaller than the full size of the frame buffer. Независимо от размера окна просмотра, когда кадр отображается приложением, система производит масштабирование изображения для заполнения всех экранов.Whatever the viewport size, once the frame is rendered by the application, the system upscales the image to fill the entirety of the displays.

Для приложений, которые сами не удается визуализировать с требуемой частотой обновления, параметры отрисовки системы можно настроить таким же путем, чтобы снизить нагрузку на память и затраты на подготовку к просмотру за счет увеличения числа точек.For applications that find themselves unable to render at the required refresh rate, system rendering parameters can be configured to reduce memory pressure and rendering cost at the cost of increased pixel aliasing. Формат заднего буфера также может быть изменен, что для некоторых приложений может помочь улучшить пропускную способность и пропускную способность в пикселях.The back buffer format can also be changed, which for some apps can help to improve memory bandwidth and pixel throughput.

Фрустум отрисовки, разрешение и частота кадров, в которых запрашивается отрисовка приложения, могут также изменяться от кадра к кадру и могут отличаться в пределах левого и правого глаз.The rendering frustum, resolution, and framerate in which your app is asked to render might also change from frame to frame, and might differ across the left and right eye. Например, если активны записи смешанной реальности (нормативная реальность) и Конфигурация просмотра фотографий и видеокамер не включена, один взгляд может быть ВИЗУАЛИЗИРОВАН более крупным фов или разрешением.For example, when mixed reality capture (MRC) is active and the photo/video camera view configuration isn't opted-into, one eye might be rendered with a larger FOV or resolution.

Для любого конкретного кадра приложение должно быть отображено с использованием преобразования «представление», «преобразование проекции» и разрешения «окно просмотра», предоставляемых системой.For any given frame, your app must render using the view transform, projection transform, and viewport resolution provided by the system. Кроме того, приложение не должно рассчитывать, что любой параметр отрисовки или представления остается фиксированным из кадра в кадр.Additionally, your application must never assume that any rendering or view parameter remains fixed from frame-to-frame. Такие механизмы, как Unity, обрабатывали все эти преобразования в собственных объектах камеры, чтобы физическое перемещение пользователей и состояние системы всегда соблюдались.Engines like Unity handle all these transforms for you in their own camera objects so that the physical movement of your users and the state of the system is always respected. Если приложение позволяет выполнять виртуальное перемещение пользователя по всему миру (например, с помощью аналогового стика на игровом планшете), можно добавить родительский объект-платформу над камерой, в которой он перемещается.If your application allows for virtual movement of the user through the world (e.g. using the thumbstick on a gamepad), you can add a parent rig object above the camera that moves it around. В результате Камера будет отражать как виртуальное, так и физическое движение пользователя.This causes the camera to reflect both the user's virtual and physical motion. Если приложение изменяет преобразование представления, преобразование проекции или размер окна просмотра, предоставляемое системой, оно должно информировать систему, вызывая соответствующий API переопределения.If your application modifies the view transform, projection transform, or viewport dimension provided by the system, it must inform the system by calling the appropriate override API.

Чтобы повысить стабильность работы с holographic, приложение должно предоставить Windows каждый кадр буфер глубины, используемый для подготовки к просмотру.To enhance the stability of your holographic rendering, your app should provide to Windows each frame the depth buffer it used for rendering. Если приложение предоставляет буфер глубины, оно должно иметь согласованные значения глубины с глубиной, выраженной в метрах от камеры.If your app does provide a depth buffer, it should have coherent depth values, with depth expressed in meters from the camera. Это позволяет системе использовать данные глубины за каждый пиксель, чтобы лучше стабилизировать содержимое, если головное задолженность пользователя немного смещается из прогнозируемого расположения.This enables the system to use your per-pixel depth data to better stabilize content if the user's head ends up slightly offset from the predicted location. Если вы не можете предоставить буфер глубины, вы можете предоставить точку фокусировки и ее нормальную работу, определив плоскость, которая обрезает большую часть вашего содержимого.If you aren't able to provide your depth buffer, you can provide a focus point and normal, defining a plane that cuts through most of your content. Если предоставлены и буфер глубины, и плоскость фокусировки, система может использовать оба варианта.If both the depth buffer and a focus plane are provided, the system might use both. В частности, полезно предоставить как буфер глубины, так и точку фокусировки, которая включает вектор скорости, когда приложение отображает голограммы, которые находятся в движении.In particular, it's helpful to provide both the depth buffer and a focus point that includes a velocity vector when your application displays holograms that are in motion.

Подробные сведения об этом разделе см. в статье Подготовка к просмотру в DirectX .Refer to Rendering in DirectX article for low-level details about this topic.

Holographic камерHolographic cameras

В Windows Mixed Reality представлено понятие камеры holographic.Windows Mixed Reality introduces the concept of a holographic camera. Holographic-камеры похожи на традиционную камеру, обнаруженную в тексте трехмерной графики. они определяют как внешние (положение и ориентацию), так и встроенные свойства камеры.Holographic cameras are similar to the traditional camera found in 3D graphics texts; they define both the extrinsic (position and orientation) and intrinsic camera properties. (Например, поле "представление" используется для просмотра виртуальной трехмерной сцены.) В отличие от традиционных трехмерных камер, приложение не контролирует положение, ориентацию и внутренние свойства камеры.(For example, field-of-view is used to view a virtual 3D scene.) Unlike traditional 3D cameras, the application isn't in control of the position, orientation, and intrinsic properties of the camera. Вместо этого положение и ориентация камеры holographic неявно контролируется перемещением пользователя.Rather, the position and orientation of the holographic camera is implicitly controlled by the user's movement. Перемещение пользователя передается в приложение по покадровой основе с помощью преобразования представления.The user's movement is relayed to the application on a frame-by-frame basis via a view transform. Аналогично, встроенные свойства камеры определяются с помощью калибровки устройства, а также передаются по кадрам с помощью преобразования проекции.Likewise, the camera's intrinsic properties are defined by the device's calibrated optics and relayed frame-by-frame via the projection transform.

Как правило, приложение будет отображаться для одной стереозвуковой камеры.In general, your application will render for a single stereo camera. Надежный цикл визуализации будет поддерживать несколько камер и будет поддерживать как моно, так и стерео-камеры.A robust rendering loop will support multiple cameras, and will support both mono and stereo cameras. Например, система может попросить приложение подготовиться к просмотру с альтернативной точки зрения, когда пользователь активирует такую функцию, как " запись смешанной реальности " (нормативная ситуация), в зависимости от фигуры гарнитуры.For example, the system might ask your application to render from an alternate perspective when the user activates a feature like mixed reality capture (MRC), depending on the headset shape. Приложения, поддерживающие несколько камер, получают их путем включения в типы камер, которые они могут поддерживать.Applications that can support multiple cameras get them by opting-in to the kind of cameras they can support.

Объемная отрисовкаVolume rendering

При отрисовке медицинских результаты МРТ или инженерных томов в трехмерном виде часто используются приемы отрисовки тома .When rendering medical MRIs or engineering volumes in 3D, volume rendering techniques are often used. Эти методы могут быть интересны в смешанной реальности, где пользователи могут естественно просматривать такой том с помощью ключевых углов, просто перемещая их головку.These techniques can be interesting in mixed reality, where users can naturally view such a volume from key angles, simply by moving their head.

Поддерживаемые разрешения в HoloLens (первая общая)Supported resolutions on HoloLens (first gen)

  • Максимальный размер окна просмотра — это свойство холографикдисплай.The max viewport size is a property of the HolographicDisplay. Для HoloLens задан максимальный размер окна просмотра, то есть 720p (1268x720) по умолчанию.HoloLens is set to the maximum viewport size, which is 720p (1268x720), by default.
  • Размер окна просмотра можно изменить, задав параметр Виевпортскалефактор на Холографиккамера.The viewport size can be changed by setting the ViewportScaleFactor on the HolographicCamera. Этот коэффициент масштабирования находится в диапазоне от 0 до 1.This scale factor is in the range of 0 to 1.
  • Минимальный поддерживаемый размер окна просмотра в HoloLens (первый Gen) — 50% 720p, то есть 360p (634x360).The lowest supported viewport size on HoloLens (first gen) is 50% of 720p, which is 360p (634x360). Это Виевпортскалефактор 0,5.This is a ViewportScaleFactor of 0.5.
  • Что-то меньше 540p не рекомендуется из-за визуального снижения производительности, но может использоваться для выявления узких мест в скорости заполнения пикселя.Anything lower than 540p isn't recommended because of visual degradation, but can be used to identify bottlenecks in pixel fill rate.

Поддерживаемые разрешения в HoloLens 2Supported resolutions on HoloLens 2

  • Текущий и максимальный поддерживаемый размер целевого объекта рендеринга — это свойства конфигурации представления.The current and maximum supported render target sizes are properties of the view configuration. HoloLens 2 задает максимальный размер целевого объекта отрисовки, который по умолчанию — 1440x936.HoloLens 2 is set to the maximum render target size, which is 1440x936, by default.
  • Приложения могут изменять размер буферов целевого буфера прорисовки путем вызова метода Рекуестрендертаржетсизе для запроса нового размера целевого объекта прорисовки.Apps can change the size of render target buffers by calling the RequestRenderTargetSize method to request a new render target size. Будет выбран новый размер целевого объекта прорисовки, который соответствует или превышает запрошенный размер целевого объекта прорисовки.A new render target size will be chosen, which meets or exceeds the requested render target size. Этот API изменяет размер буфера целевого объекта прорисовки, что требует перераспределения памяти на GPU.This API changes the size of the render target buffer, which requires memory reallocation on the GPU. К этим последствиям относятся: размер целевого объекта прорисовки можно масштабировать, чтобы уменьшить нехватку памяти на GPU, и этот метод не должен вызываться с высокой частотой.The implications of this include: The render target size can be scaled down to reduce memory pressure on the GPU, and this method shouldn't be called at high frequency.
  • Приложения по-прежнему могут изменять размер окна просмотра таким же образом, как и для HoloLens 1.Apps can still change the viewport size in the same way that they did for HoloLens 1. В GPU нет дополнительного выделения памяти, поэтому его можно изменить с высокой частотой, но нельзя использовать для снижения нехватки памяти GPU.There's no added memory reallocation on the GPU, so it can be changed at high frequency, but it cannot be used to reduce memory pressure on the GPU.
  • Наименьший поддерживаемый размер окна просмотра в HoloLens 2 — 634x412, Виевпортскалефактор примерно 0,44, если целевой размер рендеринга по умолчанию используется.The lowest supported viewport size on HoloLens 2 is 634x412, a ViewportScaleFactor of approximately 0.44 when the default render target size is in use.
  • Если указан размер целевого объекта прорисовки, который меньше наименьшего поддерживаемого размера окна просмотра, коэффициент масштабирования окна просмотра будет проигнорирован.If a render target size is provided which is smaller than the lowest supported viewport size, the viewport scale factor will be ignored.
  • Что-то меньше 540p не рекомендуется из-за визуального снижения производительности, но может использоваться для выявления узких мест в скорости заполнения пикселя.Anything lower than 540p isn't recommended because of visual degradation, but can be used to identify bottlenecks in pixel fill rate.

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