Captura de realidade mista para desenvolvedores (DirectX)
Nota
Consulte Renderizar a partir da câmara fotovoltaica abaixo para obter orientações sobre uma nova capacidade MRC para HoloLens 2.
Antes de começar aqui, recomendamos que você dê uma olhada em nosso artigo de visão geral de captura de realidade mista.
Renderizar a partir da câmara fotovoltaica (opt-in)
O HoloLens 2 adiciona a capacidade de um aplicativo imersivo renderizar a partir da câmera fotovoltaica enquanto a captura de realidade mista está em execução. Para garantir que o aplicativo suporte a renderização adicional corretamente, o aplicativo precisa aceitar essa funcionalidade.
A renderização da câmera fotovoltaica oferece as seguintes melhorias em relação à experiência MRC padrão:
- O alinhamento do holograma ao seu ambiente físico e às mãos para interações próximas deve ser preciso a todas as distâncias. Evite ter um deslocamento em distâncias diferentes do ponto de foco, como você pode ver no MRC padrão.
- O olho direito no fone de ouvido não será comprometido, pois não será usado para renderizar os hologramas para a saída MRC.
Há três etapas para habilitar a renderização da câmera fotovoltaica:
- Ativar o PhotoVideoCamera HolographicViewConfiguration
- Manipule a renderização HolographicCamera adicional
- Verifique se os sombreadores e o código são renderizados corretamente a partir desta HolographicCamera adicional
Ativar o PhotoVideoCamera HolographicViewConfiguration no DirectX
Para optar pela renderização a partir da câmera fotovoltaica, um aplicativo simplesmente habilita o HolographicViewConfiguration da PhotoVideoCamera:
var display = Windows.Graphics.Holographic.HolographicDisplay.GetDefault();
var view = display.TryGetViewConfiguration(Windows.Graphics.Holographic.HolographicViewConfigurationKind.PhotoVideoCamera);
if (view != null)
{
view.IsEnabled = true;
}
Manipule a renderização HolographicCamera adicional no DirectX
Quando o aplicativo opta por renderizar a partir da câmera fotovoltaica e a captura de realidade mista é iniciada:
- O evento CameraAdded do HolographicSpace será acionado. Esse evento pode ser adiado se o aplicativo não puder lidar com a câmera no momento.
- Quando o evento for concluído sem adiamentos pendentes, a HolographicCamera aparecerá na próxima lista AddedCameras da HolographicFrame.
Quando a captura de realidade mista parar (ou se o aplicativo desativar a configuração de visualização enquanto a captura de realidade mista estiver em execução): a HolographicCamera aparecerá na próxima lista RemovedCameras do HolographicFrame e o evento CameraRemoved do HolographicSpace será acionado.
Uma propriedade ViewConfiguration foi adicionada a HolographicCamera para ajudar a identificar a configuração à qual uma câmera pertence.
Verificar sombreadores e código suportam câmeras adicionais
Execute uma captura de realidade mista e verifique se há alinhamento incomum, conteúdo ausente ou problemas de desempenho. Atualize os sombreadores e o código conforme apropriado.
Se houver determinadas cenas que não suportam renderização para uma câmera adicional, você pode desativar HolographicViewConfiguration do PhotoVideoCamera.
Desativando o MRC em seu aplicativo
Aplicação 2D
As aplicações 2D podem optar por ter o seu conteúdo visual obscurecido quando a captura de realidade mista está a ser executada por:
- Presente com a bandeira DXGI_PRESENT_RESTRICT_TO_OUTPUT
- Criar a cadeia de permuta do aplicativo com o sinalizador DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED
- Com a atualização de maio de 2019 do Windows 10, definindo IsScreenCaptureEnabled do ApplicationView
Aplicação imersiva
Os aplicativos imersivos podem optar por ter seu conteúdo visual excluído da captura de realidade mista:
- Definindo HolographicCameraRenderingParameter's IsContentProtectionEnabled para desativar a captura de realidade mista para seu quadro associado
- Definindo IsHardwareContentProtectionEnabled da HolographicCamera para desativar a captura de realidade mista para sua câmera holográfica associada
Teclado com palavra-passe
Com a Atualização de maio de 2019 do Windows 10, o conteúdo visual é automaticamente excluído da captura de realidade mista quando uma senha ou pino de teclado está visível.
Saber quando o MRC está ativo
A classe AppCapture pode ser usada por um aplicativo para saber quando a captura de realidade mista do sistema está em execução (para áudio ou vídeo).
Nota
A API GetForCurrentView do AppCapture pode retornar null se a captura de realidade mista não estiver disponível no dispositivo. Também é importante cancelar o registro do evento CapturingChanged quando seu aplicativo for suspenso, caso contrário, o MRC poderá entrar em um estado bloqueado.
Integrando a funcionalidade MRC a partir do seu aplicativo
Seu aplicativo de realidade mista pode iniciar a captura de fotos ou vídeos MRC de dentro do aplicativo, e o conteúdo capturado é disponibilizado para seu aplicativo sem ser armazenado no "Rolo da câmera" do dispositivo. Você pode criar um gravador MRC personalizado ou aproveitar a interface do usuário de captura de câmera integrada.
MRC com interface do usuário da câmera integrada
Os desenvolvedores podem usar a API da interface do usuário de captura de câmera para obter uma foto ou vídeo de realidade mista capturado pelo usuário com apenas algumas linhas de código.
Essa API inicia a interface do usuário da câmera MRC integrada, onde os usuários podem tirar uma foto ou gravar um vídeo e retorna a captura resultante para seu aplicativo. Você pode criar um gravador de captura de realidade mista personalizado se precisar adicionar sua própria interface do usuário da câmera ou acesso de nível inferior para capturar fluxos.
MRC com captura de tela
Com a atualização HoloLens 2 de maio de 2021 (Windows Holographic, versão 21H1 build 20346.1002), os desenvolvedores podem usar a API de captura de tela para solicitar um fluxo de quadros de vídeo de realidade mista.
Criando um gravador MRC personalizado
Embora o usuário sempre possa acionar uma foto ou vídeo usando o serviço de captura MRC do sistema, um aplicativo pode querer criar um aplicativo de câmera personalizado que inclua hologramas no fluxo da câmera, assim como o MRC. Isso permite que o aplicativo inicie capturas a partir da entrada do usuário, crie uma interface do usuário de gravação personalizada ou personalize as configurações do MRC para citar alguns exemplos.
HoloStudio adiciona uma câmera MRC personalizada usando efeitos MRC
Outros aplicativos podem fazer isso usando as APIs do Windows Media Capture para controlar a câmera e adicionar um efeito MRC Video and Audio para incluir hologramas virtuais e áudio do aplicativo em fotos e vídeos.
Os aplicativos têm duas opções para adicionar o efeito:
- A API mais antiga: Windows.Media.Capture.MediaCapture.AddEffectAsync()
- A nova API recomendada pela Microsoft (retorna um objeto, tornando possível manipular propriedades dinâmicas): Windows.Media.Capture.MediaCapture.AddVideoEffectAsync() / Windows.Media.Capture.MediaCapture.AddAudioEffectAsync() que exigem que o aplicativo crie sua própria implementação de IVideoEffectDefinition e IAudioEffectDefinition. Consulte o aplicativo de exemplo MRC para obter exemplos.
Nota
O namespace Windows.Media.MixedRealityCapture não será reconhecido pelo Visual Studio, mas as cadeias de caracteres ainda são válidas.
Efeito de vídeo MRC (Windows.Media.MixedRealityCapture.MixedRealityCaptureVideoEffect)
Nome de Propriedade | Type | Valor Predefinido | Description |
---|---|---|---|
StreamType | UINT32 (MediaStreamType) | 1 (VideoRecord) | Descreva para qual fluxo de captura esse efeito é usado. O áudio não está disponível. |
HologramCompositionEnabled | boolean | TRUE | Sinalizar para ativar ou desativar hologramas na captura de vídeo. |
RecordingIndicatorEnabled | boolean | TRUE | Sinalizar para ativar ou desativar o indicador de gravação na tela durante a captura de holograma. |
VideoStabilizationEnabled | boolean | FALSE | Sinalizar para ativar ou desativar a estabilização de vídeo alimentada pelo rastreador HoloLens. |
VideoStabilizationBufferLength | UINT32 | 0 | Defina quantos quadros históricos são usados para estabilização de vídeo. 0 é latência 0 e quase "livre" do ponto de vista de potência e desempenho. 15 é recomendado para a mais alta qualidade (ao custo de 15 quadros de latência e memória). |
GlobalOpacityCoefficient | flutuante | 0.9 (HoloLens) 1.0 (Auricular imersivo) | Defina o coeficiente de opacidade global do holograma no intervalo de 0,0 (totalmente transparente) a 1,0 (totalmente opaco). |
BlankOnProtectedContent | boolean | FALSE | Sinalize para habilitar ou desabilitar o retorno de um quadro vazio se houver um aplicativo UWP 2d mostrando conteúdo protegido. Se esse sinalizador for falso e um aplicativo UWP 2d estiver mostrando conteúdo protegido, o aplicativo UWP 2d será substituído por uma textura de conteúdo protegido no fone de ouvido e na captura de realidade mista. |
ShowHiddenMesh | boolean | FALSE | Sinalizar para ativar ou desativar a exibição da malha de área oculta da câmera holográfica e do conteúdo vizinho. |
OutputSize | Tamanho | 0, 0 | Defina o tamanho de saída desejado após o corte para estabilização de vídeo. Um tamanho de corte padrão é escolhido se 0 ou um tamanho de saída inválido for especificado. |
Subtipo de saída | String | Nv12 | Defina o subtipo de saída desejado após a composição do holograma e/ou estabilização de vídeo. Suporta Nv12 e Argb32 MediaEncodingSubtypes. |
PreferredHologramPerspective | UINT32 | Renderizar a partir da configuração da câmera no Portal de Dispositivos do Windows | Enum usado para indicar qual configuração de visualização da câmera holográfica deve ser capturada: 0 (Display) significa que o aplicativo não será solicitado a renderizar a partir da câmera de foto/vídeo, 1 (PhotoVideoCamera) pedirá que o aplicativo renderize a partir da câmera de foto/vídeo (se o aplicativo suportar). Suportado apenas no HoloLens 2 |
Nota
Você pode alterar o valor padrão de PreferredHologramPerspective no Portal de Dispositivos do Windows indo para a página Captura de Realidade Mista e desmarcando Renderizar da Câmera. O padrão da configuração é 1 (PhotoVideoCamera), mas pode ser desmarcada para defini-la como 0 (Display).
O valor padrão de PreferredHologramPerspective era 0 (Display) antes da atualização de junho de 2020 (Windows Holographic, versão 2004 build 19041.1106 e Windows Holographic, versão 1903 build 18362.1064).
O suporte para OutputSubtype foi adicionado com a atualização de maio de 2021 (Windows Holographic, versão 21H1 build 20346.1002).
Efeito de áudio MRC (Windows.Media.MixedRealityCapture.MixedRealityCaptureAudioEffect)
Nome de Propriedade | Type | Valor Predefinido | Description |
---|---|---|---|
Modo Misturador | UINT32 | 2 (Microfone e áudio do sistema) | Enum usado para indicar quais fontes de áudio devem ser usadas: 0 (somente áudio do microfone), 1 (somente áudio do sistema), 2 (áudio do microfone e do sistema) |
LoopbackGain | flutuante | Configuração de ganho de áudio do aplicativo no Portal de Dispositivos do Windows | Ganho para aplicar ao volume de áudio do sistema. Varia de 0,0 a 5,0. Suportado apenas no HoloLens 2 |
MicrofoneGanho | flutuante | Configuração de ganho de áudio do microfone no Portal de Dispositivos do Windows | Ganho para aplicar ao volume do microfone. Varia de 0,0 a 5,0. Suportado apenas no HoloLens 2 |
Nota
Você pode alterar o valor padrão de LoopbackGain ou MicrophoneGain no Portal de Dispositivos do Windows acessando a página Captura de Realidade Mista e ajustando o controle deslizante ao lado de suas respetivas configurações. Ambas as configurações padrão como 1.0, mas podem ser definidas como qualquer valor entre 0.0 e 5.0.
O uso do Windows Device Portal para configurar os valores de ganho padrão foi adicionado com a atualização de junho de 2020 (Windows Holographic, versão 2004 build 19041.1106 e Windows Holographic, versão 1903 build 18362.1064).
Limitações simultâneas do MRC
Você precisa estar ciente de certas limitações quando vários aplicativos estão acessando o MRC ao mesmo tempo.
Acesso à câmara fotográfica/vídeo
No HoloLens 1, o MRC não conseguirá capturar uma foto ou capturar vídeo enquanto um processo estiver gravando vídeo ou tirando uma foto. O inverso também é verdadeiro: se o MRC estiver em execução, o aplicativo não conseguirá acessar a câmera.
Com o HoloLens 2, é possível partilhar o acesso à câmara. Se você não precisar de controle direto da resolução ou da taxa de quadros, poderá inicializar o MediaCapture usando a propriedade SharedMode com SharedReadOnly.
Acesso integrado à câmera de vídeo e foto MRC
Funcionalidade MRC integrada no Windows 10 (via Cortana, Menu Iniciar, atalhos de hardware, Miracast, Windows Device Portal):
- Será executado com ExclusiveControl por padrão
No entanto, o suporte foi adicionado ao subsistema MRC para operar em um modo compartilhado:
- Se um aplicativo solicitar acesso ExclusiveControl à câmera de foto/vídeo, o MRC integrado interromperá automaticamente o uso da câmera de foto/vídeo para que a solicitação do aplicativo seja bem-sucedida
- Se o MRC integrado for iniciado enquanto um aplicativo tiver ExclusiveControl, o MRC integrado será executado no modo SharedReadOnly
Esta funcionalidade de modo partilhado tem certas restrições:
- Foto via Cortana, atalhos de hardware ou Menu Iniciar: requer a Atualização de abril de 2018 do Windows 10 (ou posterior)
- Vídeo através da Cortana, atalhos de hardware ou Menu Iniciar: requer a Atualização de abril de 2018 do Windows 10 (ou posterior)
- Streaming MRC sobre Miracast: requer a atualização de outubro de 2018 do Windows 10 (ou posterior)
- Streaming MRC através do Windows Device Portal ou através da aplicação complementar HoloLens: Requer HoloLens 2
Nota
A resolução e a taxa de quadros da interface do usuário da câmera MRC integrada podem ser reduzidas de seus valores normais quando outro aplicativo está usando a câmera de foto/vídeo.
Acesso MRC para desenvolvedores
Recomendamos que você sempre solicite o controle exclusivo para a câmera ao usar o MRC. Isso garantirá que seu aplicativo tenha controle total das configurações da câmera, desde que você esteja ciente das limitações listadas acima.
- Criar um objeto de captura de mídia usando as configurações de inicialização
- Defina a propriedade SharingMode como exclusiva
Atenção
Certifique-se de ler atentamente os comentários do SharingMode antes de continuar.
- Configure a sua câmara da forma que pretende
- Inicie o aplicativo, capture quadros de vídeo com a API de inicialização e habilite o MRC
Atenção
Se você iniciar o MRC antes de iniciar seu aplicativo, não podemos garantir que o recurso funcionará conforme o esperado.
Você pode encontrar uma amostra completa do processo acima na amostra holográfica de rastreamento facial.
Nota
Antes da Atualização de abril de 2018 do Windows 10, o gravador MRC personalizado de um aplicativo era mutuamente exclusivo com o MRC do sistema (captura de fotos, captura de vídeos ou streaming do Portal de Dispositivos do Windows).