RenderizaçãoRendering

A renderização de Holographic permite que seu aplicativo desenhe um holograma em um local preciso no mundo todo, seja precisamente colocado no mundo físico ou em um realm que você criou.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. Os hologramas são objetos compostos de som e luz.Holograms are objects made of sound and light. A renderização permite que seu aplicativo adicione a luz.Rendering enables your application to add the light.

Suporte a dispositivosDevice support

RecursoFeature HoloLens (1ª geração)HoloLens (1st gen) HoloLens 2HoloLens 2 Headsets imersivosImmersive headsets
RenderizaçãoRendering ✔️✔️ ✔️✔️ ✔️✔️

Renderização de HolographicHolographic rendering

A chave para a renderização de Holographic é saber se você está renderizando para uma exibição visível, como o HoloLens, que permite que o usuário veja o mundo físico e seus hologramas juntos ou uma exibição opaca como um headset de imersão de realidade mista do Windows que bloqueia o países.Key to holographic rendering is knowing whether you are rendering to a see-through display like HoloLens that lets the user see both the physical world and your holograms together, or an opaque display like a Windows Mixed Reality immersive headset that blocks out the world.

Dispositivos com telas de exibição, como o HoloLens, adicionam luz ao mundo.Devices with see-through displays, such as HoloLens, add light to the world. Os pixels pretos são totalmente transparentes, enquanto os pixels mais brilhantes são cada vez mais opacos.Black pixels are fully transparent, while brighter pixels are increasingly opaque. Como a luz das telas é adicionada à luz do mundo real, os pixels brancos são, de certa forma, translúcidas.Because the light from the displays is added to the light from the real world, white pixels are somewhat translucent.

Embora a renderização de estereoscópico forneça uma indicação de profundidade para os hologramas, adicionar efeitos de aterramento pode ajudar os usuários a ver mais facilmente qual superfície um holograma está próximo.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. Uma técnica de aterramento é adicionar um brilho em um holograma na superfície adjacente e renderizar uma sombra em relação a esse brilho.One grounding technique is to add a glow around a hologram on the nearby surface, and then render a shadow against this glow. Dessa forma, sua sombra parece subtrair a luz do ambiente.In this way, your shadow appears to subtract light from the environment. O som espacial é outra indicação de profundidade extremamente importante, permitindo aos usuários o motivo da distância e do local relativo de um holograma.Spatial sound is another extremely important depth cue, letting users reason about the distance and relative location of a hologram.

Dispositivos com telas opacas, como headsets de imersão de realidade do Windows, bloqueiam o mundo.Devices with opaque displays, like Windows Mixed Reality immersive headsets, block out the world. Os pixels pretos são pretos sólidos e qualquer outra cor aparecerá como essa cor para o usuário.Black pixels are solid black, and any other color appears as that color to the user. Seu aplicativo é responsável por renderizar tudo o que o usuário vê.Your application is responsible for rendering everything the user sees. Isso torna ainda mais importante manter uma taxa de atualização constante para que os usuários tenham uma experiência confortável.This makes it even more important to maintain a constant refresh rate so that users have a comfortable experience.

Parâmetros de renderização previstosPredicted rendering parameters

Os headsets de realidade misturada (headsets de HoloLens e de imersão) acompanham continuamente a posição e a orientação da cabeça do usuário em relação ao seu ambiente.Mixed reality headsets (both HoloLens and immersive headsets) continually track the position and orientation of the user's head relative to their surroundings. À medida que seu aplicativo começa a preparar seu próximo quadro, o sistema prevê onde o cabeçalho do usuário estará no futuro no momento exato em que o quadro aparece nos monitores.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. Com base nessa previsão, o sistema calcula a exibição e as transformações de projeção a serem usadas para esse quadro.Based on this prediction, the system calculates the view and the projection transforms to use for that frame. Seu aplicativo deve usar essas transformações para produzir resultados corretos; Se as transformações fornecidas pelo sistema não forem usadas, a imagem resultante não será alinhada com o mundo real, levando ao discomfort do usuário.Your application must use these transforms to produce correct results; if system-supplied transforms are not used, the resulting image will not align with the real world, leading to user discomfort.

Observe que para prever com precisão quando um novo quadro atingirá os monitores, o sistema está medindo constantemente a latência efetiva de ponta a ponta do pipeline de renderização do seu aplicativo.Note that 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. Enquanto o sistema se ajusta à duração do seu pipeline de renderização, você pode melhorar a estabilidade do holograma mantendo o pipeline o mais curto possível.While the system adjusts to the length of your rendering pipeline, you can improve hologram stability by keeping that pipeline as short as possible.

Os aplicativos que usam técnicas avançadas para aumentar a previsão do sistema podem substituir a exibição do sistema e as transformações de projeção.Applications that use advanced techniques to augment the system prediction can override the system view and projection transforms. Esses aplicativos ainda devem usar transformações fornecidas pelo sistema como base para suas transformações personalizadas a fim de produzir resultados significativos.These applications must still use system-supplied transforms as a basis for their custom transforms in order to produce meaningful results.

Outros parâmetros de renderizaçãoOther rendering parameters

Ao renderizar um quadro, o sistema especifica o visor de buffer de fundo no qual seu aplicativo deve desenhar.When rendering a frame, the system specifies the back-buffer viewport in which your application should draw. Esse visor é geralmente menor do que o tamanho total do buffer de quadro.This viewport is often smaller than the full size of the frame buffer. Independentemente do tamanho do visor, depois que o quadro for renderizado pelo aplicativo, o sistema ampliará a imagem para preencher todo o exibido.Regardless of the viewport size, once the frame is rendered by the application, the system upscales the image to fill the entirety of the displays.

Para aplicativos que não conseguem renderizar na taxa de atualização necessária, os parâmetros de renderização do sistema podem ser configurados para reduzir a pressão de memória e o custo de renderização no custo do aumento de alias de pixel.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. O formato de buffer de fundo também pode ser alterado, o que para alguns aplicativos pode ajudar a melhorar a largura de banda de memória e a taxa de transferência de pixel.The back buffer format can also be changed, which for some apps can help to improve memory bandwidth and pixel throughput.

O frustum de renderização, a resolução e a taxa de quadros em que seu aplicativo é solicitado a renderizar também podem mudar de quadro para quadro e podem ser diferentes nos olhos esquerdo e direito.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. Por exemplo, quando a MRC ( captura de realidade mista ) está ativa e a configuração de exibição de câmera de foto/vídeo não é aceita, um olho pode ser renderizado com um FOV ou resolução maior.For example, when mixed reality capture (MRC) is active and the photo/video camera view configuration is not opted-into, one eye might be rendered with a larger FOV or resolution.

Para qualquer quadro específico, seu aplicativo deve renderizar usando a transformação de exibição, transformação de projeção e resolução de visor fornecida pelo sistema.For any given frame, your app must render using the view transform, projection transform, and viewport resolution provided by the system. Além disso, seu aplicativo nunca deve supor que qualquer parâmetro de renderização ou de exibição permaneça fixo do quadro para o quadro.Additionally, your application must never assume that any rendering or view parameter remains fixed from frame-to-frame. Mecanismos como o Unity lidam com todas essas transformações para você em seus próprios objetos de câmera, para que o movimento físico dos usuários e o estado do sistema seja sempre respeitado.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. Se seu aplicativo permitir a movimentação virtual do usuário por meio do mundo (por exemplo, usando o Thumbstick em um gamepad), você poderá adicionar um objeto Rig pai acima da câmera que o move.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. Isso faz com que a câmera reflita o movimento físico e virtual do usuário.This causes the camera to reflect both the user's virtual and physical motion. Se seu aplicativo Modificar a transformação exibição, transformação de projeção ou dimensão viewport fornecida pelo sistema, ele deverá informar o sistema chamando a API de substituiçãoapropriada.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.

Para aprimorar a estabilidade da renderização do Holographic, seu aplicativo deve fornecer ao Windows cada quadro o buffer de profundidade usado para renderização.To enhance the stability of your holographic rendering, your app should provide to Windows each frame the depth buffer it used for rendering. Se o seu aplicativo fornecer um buffer de profundidade, ele deverá ter valores de profundidade coerentes, com profundidade expressa em metros da câmera.If your app does provide a depth buffer, it should have coherent depth values, with depth expressed in meters from the camera. Isso permite que o sistema use seus dados de profundidade por pixel para melhor estabilizar o conteúdo se o cabeçalho do usuário terminar um desvio levemente do local previsto.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. Se não for possível fornecer o buffer de profundidade, você poderá fornecer um ponto de foco e normal, definindo um plano que reduz a maior parte do seu conteúdo.If you are not able to provide your depth buffer, you can provide a focus point and normal, defining a plane that cuts through most of your content. Se o buffer de profundidade e um plano de foco forem fornecidos, o sistema poderá usar ambos.If both the depth buffer and a focus plane are provided, the system might use both. Em particular, é útil fornecer o buffer de profundidade e um ponto de foco que inclui um vetor de velocidade quando seu aplicativo exibe hologramas que estão em movimento.In particular, it is 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.

Consulte o artigo renderizando no DirectX para obter detalhes de baixo nível sobre seu tópico.Refer to Rendering in DirectX article for low-level details about his topic.

Câmeras holographicsHolographic cameras

A realidade mista do Windows apresenta o conceito de uma câmera Holographic.Windows Mixed Reality introduces the concept of a holographic camera. As câmeras Holographic são semelhantes à câmera tradicional encontrada em textos de gráficos 3D; Elas definem a extrínsecos (posição e orientação) e as propriedades intrínsecas da câmera.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. (Por exemplo:, campo de exibição é usado para exibir uma cena 3D virtual.) Ao contrário das câmeras 3D tradicionais, o aplicativo não está no controle da posição, da orientação e das propriedades intrínsecas da câmera.(For example:, field-of-view is used to view a virtual 3D scene.) Unlike traditional 3D cameras, the application is not in control of the position, orientation, and intrinsic properties of the camera. Em vez disso, a posição e a orientação da câmera Holographic são implicitamente controladas pelo movimento do usuário.Rather, the position and orientation of the holographic camera is implicitly controlled by the user's movement. O movimento do usuário é retransmitido para o aplicativo em uma base quadro a quadro por meio de uma transformação de exibição.The user's movement is relayed to the application on a frame-by-frame basis via a view transform. Da mesma forma, as propriedades intrínsecas da câmera são definidas pela ótica calibrada do dispositivo e retransmitidas quadro a quadro por meio da transformação projeção.Likewise, the camera's intrinsic properties are defined by the device's calibrated optics and relayed frame-by-frame via the projection transform.

Em geral, seu aplicativo será renderizado para uma única câmera estéreo.In general, your application will render for a single stereo camera. No entanto, um loop de renderização robusto dará suporte a várias câmeras e dará suporte a câmeras mono e estéreo.However, a robust rendering loop will support multiple cameras, and will support both mono and stereo cameras. Por exemplo, o sistema pode solicitar que seu aplicativo seja renderizado de uma perspectiva alternativa quando o usuário ativar um recurso como a MRC ( captura de realidade misturada ), dependendo da forma do headset em questão.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 shape of the headset in question. Os aplicativos que podem dar suporte a várias câmeras os obtêm conferendo ao tipo de câmeras às quais eles podem dar suporte.Applications that can support multiple cameras get them by opting-in to the kind of cameras they can support.

Renderização de volumeVolume rendering

Ao renderizar MRIs médicos ou volumes de engenharia em 3D, as técnicas de renderização de volume são usadas com frequência.When rendering medical MRIs or engineering volumes in 3D, volume rendering techniques are often used. Essas técnicas podem ser particularmente interessantes em realidade misturada, em que os usuários podem ver naturalmente um volume desses ângulos de chave, simplesmente movendo sua cabeça.These techniques can be particularly interesting in mixed reality, where users can naturally view such a volume from key angles, simply by moving their head.

Resoluções com suporte no HoloLens (1ª gen)Supported resolutions on HoloLens (1st gen)

  • O tamanho máximo do visor é uma propriedade do HolographicDisplay.The max viewport size is a property of the HolographicDisplay. O HoloLens é definido como o tamanho máximo do visor, que é 720p (1268x720), por padrão.HoloLens is set to the maximum viewport size, which is 720p (1268x720), by default.
  • O tamanho do visor pode ser alterado definindo o ViewportScaleFactor no HolographicCamera.The viewport size can be changed by setting the ViewportScaleFactor on the HolographicCamera. Esse fator de escala está no intervalo de 0 a 1.This scale factor is in the range of 0 to 1.
  • O menor tamanho de visor com suporte no HoloLens (1º gen) é de 50% de 720p, que é 360p (634x360).The lowest supported viewport size on HoloLens (1st gen) is 50% of 720p, which is 360p (634x360). Este é um ViewportScaleFactor de 0,5.This is a ViewportScaleFactor of 0.5.
  • Qualquer coisa inferior a 540p não é recomendada devido à degradação Visual, mas pode ser usada para identificar afunilamentos na taxa de preenchimento de pixel.Anything lower than 540p is not recommended due to visual degradation, but can be used to identify bottlenecks in pixel fill rate.

Resoluções com suporte no HoloLens 2Supported resolutions on HoloLens 2

  • Os tamanhos de destino de renderização atual e máximo com suporte são propriedades da configuração de exibição.The current and maximum supported render target sizes are properties of the view configuration. O HoloLens 2 é definido como o tamanho máximo de destino de renderização, que é 1440x936, por padrão.HoloLens 2 is set to the maximum render target size, which is 1440x936, by default.
  • Os aplicativos podem alterar o tamanho dos buffers de destino de renderização chamando o método RequestRenderTargetSize para solicitar um novo tamanho de destino de renderização.Apps can change the size of render target buffers by calling the RequestRenderTargetSize method to request a new render target size. Um novo tamanho de destino de renderização será escolhido, o que atenderá ou excederá o tamanho de destino de renderização solicitado.A new render target size will be chosen, which meets or exceeds the requested render target size. Essa API altera o tamanho do buffer de destino de renderização, que requer realocação de memória na GPU.This API changes the size of the render target buffer, which requires memory reallocation on the GPU. As implicações disso incluem: o tamanho do destino de renderização pode ser reduzido para reduzir a pressão de memória na GPU, e esse método não deve ser chamado com alta frequência.The implications of this include: The render target size can be scaled down to reduce memory pressure on the GPU, and this method should not be called at high frequency.
  • Os aplicativos ainda podem alterar o tamanho do visor da mesma maneira que faziam para o HoloLens 1.Apps can still change the viewport size in the same way that they did for HoloLens 1. Isso não causa a realocação de memória na GPU, portanto, ela pode ser alterada com alta frequência, mas não pode ser usada para reduzir a pressão de memória na GPU.This does not cause 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.
  • O menor tamanho de visor com suporte no HoloLens 2 é 634x412.The lowest supported viewport size on HoloLens 2 is 634x412. Esse é um ViewportScaleFactor de aproximadamente 0,44 quando o tamanho de destino de renderização padrão está em uso.This is a ViewportScaleFactor of approximately 0.44 when the default render target size is in use.
  • Se for fornecido um tamanho de destino de renderização que seja menor do que o menor tamanho de visor com suporte, o fator de escala do visor será ignorado.If a render target size is provided which is smaller than the lowest supported viewport size, the viewport scale factor will be ignored.
  • Qualquer coisa inferior a 540p não é recomendada devido à degradação Visual, mas pode ser usada para identificar afunilamentos na taxa de preenchimento de pixel.Anything lower than 540p is not recommended due to visual degradation, but can be used to identify bottlenecks in pixel fill rate.

Veja tambémSee also