Captura de realidad mixta para desarrolladores (DirectX)
Nota:
Consulte Representación desde la cámara PV siguiente para obtener instrucciones sobre una nueva funcionalidad de MRC para HoloLens 2.
Antes de empezar aquí, se recomienda echar un vistazo al artículo introducción a la captura de realidad mixta .
Representación desde la cámara PV (participación)
HoloLens 2 agrega la posibilidad de que una aplicación inmersiva se represente desde la cámara PV mientras se ejecuta la captura de realidad mixta. Para asegurarse de que la aplicación admite correctamente la representación adicional, la aplicación tiene que participar en esta funcionalidad.
La representación desde la cámara PV ofrece las siguientes mejoras sobre la experiencia predeterminada de MRC:
- La alineación del holograma con el entorno físico y las manos para las interacciones cercanas debe ser precisa a todas las distancias. Evite tener un desplazamiento a distancias distintas del punto de enfoque, como puede ver en el MRC predeterminado.
- El ojo derecho del casco no se verá comprometido, ya que no se usará para representar los hologramas para la salida de MRC.
Hay tres pasos para habilitar la representación desde la cámara PV:
- Habilitación de PhotoVideoCamera HolographicViewConfiguration
- Controlar la representación adicional de HolographicCamera
- Compruebe que los sombreadores y el código se representen correctamente desde este holographicCamera adicional.
Habilitación de PhotoVideoCamera HolographicViewConfiguration en DirectX
Para participar en la representación desde la cámara PV, una aplicación simplemente habilita la HolographicViewConfiguration de PhotoVideoCamera:
var display = Windows.Graphics.Holographic.HolographicDisplay.GetDefault();
var view = display.TryGetViewConfiguration(Windows.Graphics.Holographic.HolographicViewConfigurationKind.PhotoVideoCamera);
if (view != null)
{
view.IsEnabled = true;
}
Controlar la representación adicional de HolographicCamera en DirectX
Cuando la aplicación tiene participación para representar desde la cámara PV y se inicia la captura de realidad mixta:
- Se desencadenará el evento CameraAdded de HolographicSpace. Este evento se puede aplazar si la aplicación no puede controlar la cámara en este momento.
- Una vez que el evento se haya completado sin aplazamientos pendientes, HolographicCamera aparecerá en la siguiente lista AddedCameras de HolographicFrame.
Cuando se detiene la captura de realidad mixta (o si la aplicación deshabilita la configuración de vista mientras se ejecuta la captura de realidad mixta): holographicCamera aparecerá en la siguiente lista RemovedCameras de HolographicFrame y se desencadenará el evento CameraRemoved de HolographicSpace.
Se ha agregado una propiedad ViewConfiguration a HolographicCamera para ayudar a identificar la configuración a la que pertenece una cámara.
Comprobación de que los sombreadores y el código admiten cámaras adicionales
Ejecute una captura de realidad mixta y compruebe si hay problemas inusuales de alineación, contenido que falta o rendimiento. Actualice los sombreadores y el código según corresponda.
Si hay ciertas escenas que no admiten la representación en una cámara adicional, puede deshabilitar la holographicViewConfiguration de PhotoVideoCamera.
Deshabilitación de MRC en la aplicación
Aplicación 2D
Las aplicaciones 2D pueden optar por ocultar su contenido visual cuando la captura de realidad mixta se ejecuta mediante:
- Presente con la marca de DXGI_PRESENT_RESTRICT_TO_OUTPUT
- Creación de la cadena de intercambio de la aplicación con la marca DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED
- Con la actualización de mayo de 2019 de Windows 10, estableciendo isScreenCaptureEnabled de ApplicationView
Aplicación inmersiva
Las aplicaciones inmersivas pueden optar por excluir su contenido visual de la captura de realidad mixta mediante:
- Establecimiento de IsContentProtectionEnabled de HolographicCameraRenderingParameter para deshabilitar la captura de realidad mixta para su fotograma asociado
- Establecimiento de IsHardwareContentProtectionEnabled de HolographicCamera para deshabilitar la captura de realidad mixta para su cámara holográfica asociada
Teclado de contraseña
Con la actualización de mayo de 2019 de Windows 10, el contenido visual se excluye automáticamente de la captura de realidad mixta cuando una contraseña o un teclado pin están visibles.
Saber cuándo está activo MRC
Una aplicación puede usar la clase AppCapture para saber cuándo se ejecuta la captura de realidad mixta del sistema (para audio o vídeo).
Nota:
La API GetForCurrentView de AppCapture puede devolver null si la captura de realidad mixta no está disponible en el dispositivo. También es importante anular el registro del evento CaptureingChanged cuando se suspenda la aplicación; de lo contrario, MRC puede entrar en un estado bloqueado.
Integración de la funcionalidad de MRC desde dentro de la aplicación
La aplicación de realidad mixta puede iniciar la captura de fotos o vídeos de MRC desde dentro de la aplicación, y el contenido capturado está disponible para la aplicación sin almacenarse en el "roll de cámara" del dispositivo. Puede crear una grabadora MRC personalizada o aprovechar la interfaz de usuario de captura de cámara integrada.
MRC con interfaz de usuario de cámara integrada
Los desarrolladores pueden usar camera Capture UI API para obtener una foto o vídeo de realidad mixta capturada por el usuario con unas pocas líneas de código.
Esta API inicia la interfaz de usuario de cámara de MRC integrada, donde los usuarios pueden tomar una foto o vídeo y devuelven la captura resultante a la aplicación. Puede crear una grabadora de captura de Mixed Reality personalizada si necesita agregar su propia interfaz de usuario de cámara o acceso de nivel inferior para capturar secuencias.
MRC con captura de pantalla
Con la actualización de mayo de 2021 de HoloLens 2 (Windows Holographic, versión 21H1 compilación 20346.1002), los desarrolladores pueden usar la API de captura de pantalla para solicitar una secuencia de fotogramas de vídeo de realidad mixta.
Creación de una grabadora de MRC personalizada
Aunque el usuario siempre puede desencadenar una foto o un vídeo mediante el servicio de captura mrC del sistema, es posible que una aplicación quiera crear una aplicación de cámara personalizada que incluya hologramas en la secuencia de cámara como MRC. Esto permite que la aplicación inicie las capturas de la entrada del usuario, compile la interfaz de usuario de grabación personalizada o personalice la configuración de MRC para nombrar algunos ejemplos.
HoloStudio agrega una cámara MRC personalizada mediante efectos MRC
Otras aplicaciones pueden hacerlo mediante las API de captura de Windows Media para controlar la cámara y agregar un efecto MRC Video y Audio para incluir hologramas virtuales y audio de aplicación en vídeos y todavías.
Las aplicaciones tienen dos opciones para agregar el efecto:
- La API anterior: Windows.Media.Capture.MediaCapture.AddEffectAsync()
- La nueva API recomendada de Microsoft (devuelve un objeto, lo que permite manipular propiedades dinámicas): Windows.Media.Capture.MediaCapture.AddVideoEffectAsync() / Windows.Media.Capture.MediaCapture.AddAudioEffectAsync() que requieren que la aplicación cree su propia implementación de IVideoEffectDefinition e IAudioEffectDefinition. Consulte la aplicación de ejemplo de MRC para obtener ejemplos.
Nota
Visual Studio no reconocerá el espacio de nombres Windows.Media.MixedRealityCapture, pero las cadenas siguen siendo válidas.
Efecto de vídeo mrC (Windows.Media.MixedRealityCapture.MixedRealityCaptureVideoEffect)
Nombre de propiedad | Tipo | Valor predeterminado | Descripción |
---|---|---|---|
StreamType | UINT32 (MediaStreamType) | 1 (VideoRecord) | Describir para qué secuencia de captura se usa este efecto. El audio no está disponible. |
HologramCompositionEnabled | boolean | true | Marca para habilitar o deshabilitar hologramas en la captura de vídeo. |
RecordingIndicatorEnabled | boolean | true | Marca para habilitar o deshabilitar el indicador de grabación en pantalla durante la captura de hologramas. |
VideoStabilizationEnabled | boolean | false | Marca para habilitar o deshabilitar la estabilización de vídeo con tecnología del rastreador de HoloLens. |
VideoStabilizationBufferLength | UINT32 | 0 | Establezca cuántos fotogramas históricos se usan para la estabilización de vídeo. 0 es de latencia 0 y casi "libre" desde una perspectiva de potencia y rendimiento. Se recomienda 15 para obtener la máxima calidad (a costa de 15 fotogramas de latencia y memoria). |
GlobalOpacityCoefficient | FLOAT | 0.9 (HoloLens) 1.0 (casco envolvente) | Establezca el coeficiente de opacidad global del holograma en intervalo de 0,0 (totalmente transparente) a 1,0 (totalmente opaco). |
BlankOnProtectedContent | boolean | false | Marca para habilitar o deshabilitar la devolución de un marco vacío si hay una aplicación para UWP 2d que muestra contenido protegido. Si esta marca es false y una aplicación para UWP 2d muestra contenido protegido, la aplicación para UWP 2d se reemplazará por una textura de contenido protegida en los auriculares y en la captura de realidad mixta. |
ShowHiddenMesh | boolean | false | Marca para habilitar o deshabilitar que muestra la malla de área oculta de la cámara holográfica y el contenido vecino. |
OutputSize | Size | 0, 0 | Establezca el tamaño de salida deseado después de recortar para la estabilización de vídeo. Se elige un tamaño de recorte predeterminado si se especifica 0 o un tamaño de salida no válido. |
OutputSubtype | String | Nv12 | Establezca el subtipo de salida deseado después de la composición del holograma o la estabilización de vídeo. Admite Nv12 y Argb32MediaEncodingSubtypes. |
PreferredHologramPerspective | UINT32 | Representación desde la configuración de cámara en el Portal de dispositivos Windows | Enumeración que se usa para indicar qué configuración de vista de cámara holográfica se debe capturar: 0 (Mostrar) significa que no se pedirá a la aplicación que se represente desde la cámara de fotos o vídeo, 1 (PhotoVideoCamera) pedirá a la aplicación que se represente desde la cámara de fotos y vídeo (si la aplicación la admite). Solo se admite en HoloLens 2 |
Nota:
Puedes cambiar el valor predeterminado de PreferredHologramPerspective en el Portal de dispositivos Windows; para ello, ve a la página Mixed Reality Captura y desactiva La representación de la cámara. El valor predeterminado es 1 (PhotoVideoCamera), pero se puede desactivar para establecerlo en 0 (Pantalla).
El valor predeterminado de PreferredHologramPerspective era 0 (Mostrar) antes de la actualización de junio de 2020 (Windows Holographic, versión 2004, compilación 19041.1106 y Windows Holographic, versión 1903, compilación 18362.1064).
La compatibilidad con OutputSubtype se agregó con la actualización de mayo de 2021 (Windows Holographic, versión 21H1, compilación 20346.1002).
Efecto de audio mrC (Windows.Media.MixedRealityCapture.MixedRealityCaptureAudioEffect)
Nombre de propiedad | Tipo | Valor predeterminado | Descripción |
---|---|---|---|
MixerMode | UINT32 | 2 (micrófono y audio del sistema) | Enumeración usada para indicar qué orígenes de audio se deben usar: 0 (solo audio mic), 1 (solo audio del sistema), 2 (micrófono y audio del sistema) |
LoopbackGain | FLOAT | Configuración De ganancia de audio de la aplicación en el Portal de dispositivos Windows | Ganancia para aplicar al volumen de audio del sistema. Oscila entre 0,0 y 5,0. Solo se admite en HoloLens 2 |
MicrophoneGain | FLOAT | Configuración De ganancia de audio de micrófono en el Portal de dispositivos Windows | Ganancia para aplicar al volumen del micrófono. Oscila entre 0,0 y 5,0. Solo se admite en HoloLens 2 |
Nota:
Para cambiar el valor predeterminado de LoopbackGain o MicrophoneGain en el Portal de dispositivos Windows, vaya a la página captura de Mixed Reality y ajuste el control deslizante junto a su configuración respectiva. Ambos valores se establecen de forma predeterminada en 1.0, pero se pueden establecer en cualquier valor entre 0,0 y 5,0.
Con el Portal de dispositivos Windows para configurar los valores de ganancia predeterminados se agregó con la actualización de junio de 2020 (Windows Holographic, versión 2004, compilación 19041.1106 y Windows Holographic, versión 1903, compilación 18362.1064).
Limitaciones simultáneas de MRC
Debe tener en cuenta ciertas limitaciones cuando varias aplicaciones acceden a MRC al mismo tiempo.
Acceso a la cámara de fotos y vídeos
En HoloLens 1, MRC no podrá capturar una foto o capturar vídeo mientras un proceso está grabando vídeo o tomando una foto. La inversa también es true: si MRC se está ejecutando, la aplicación no podrá acceder a la cámara.
Con HoloLens 2, es posible compartir el acceso a la cámara. Si no necesita control directo de la resolución o la velocidad de fotogramas, puede inicializar MediaCapture mediante la propiedad SharedMode con SharedReadOnly.
Acceso integrado a la foto y la cámara de vídeo de MRC
Funcionalidad de MRC integrada en Windows 10 (a través de Cortana, menú Inicio, accesos directos de hardware, Miracast, Portal de dispositivos Windows):
- Se ejecutará con ExclusiveControl de forma predeterminada.
Sin embargo, se ha agregado compatibilidad al subsistema MRC para funcionar en modo compartido:
- Si una aplicación solicita acceso ExclusiveControl a la cámara de foto/vídeo, MRC integrado dejará de usar automáticamente la cámara de fotos y vídeo para que la solicitud de la aplicación se realice correctamente.
- Si se inicia MRC integrado mientras una aplicación tiene ExclusiveControl, MRC integrado se ejecutará en modo SharedReadOnly.
Esta funcionalidad de modo compartido tiene ciertas restricciones:
- Foto a través de Cortana, accesos directos de hardware o menú Inicio: requiere la actualización de abril de 2018 de Windows 10 (o posterior)
- Vídeo a través de Cortana, accesos directos de hardware o menú Inicio: requiere la actualización de abril de 2018 de Windows 10 (o posterior)
- Streaming de MRC a través de Miracast: requiere la actualización de octubre de 2018 de Windows 10 (o posterior)
- Streaming de MRC a través del Portal de dispositivos Windows o a través de la aplicación complementaria HoloLens: requiere HoloLens 2
Nota
La resolución y la velocidad de fotogramas de la interfaz de usuario de la cámara mrC integrada pueden reducirse a partir de sus valores normales cuando otra aplicación usa la cámara de fotos y vídeo.
Acceso de MRC para desarrolladores
Se recomienda solicitar siempre un control exclusivo para la cámara al usar MRC. Esto garantizará que la aplicación tenga control total de la configuración de la cámara siempre que conozca las limitaciones mencionadas anteriormente.
- Creación de un objeto de captura multimedia mediante la configuración de inicialización
- Establezca la propiedad SharingMode en exclusiva.
Precaución
Asegúrese de leer cuidadosamente los comentarios sharingMode antes de continuar.
- Configurar la cámara de la manera que quiera
- Inicie la aplicación, capture fotogramas de vídeo con la API de inicio y, a continuación, habilite MRC.
Precaución
Si inicia MRC antes de iniciar la aplicación, no podemos garantizar que la característica funcionará según lo previsto.
Puede encontrar una muestra completa del proceso anterior en el ejemplo de seguimiento facial holográfico.
Nota:
Antes de la actualización de abril de 2018 de Windows 10, la grabadora mrC personalizada de una aplicación era mutuamente excluyente con MRC del sistema (capturando fotos, capturando vídeos o streaming desde el Portal de dispositivos Windows).