Acquisizione di realtà mista per sviluppatori (DirectX)

Nota

Per indicazioni su una nuova funzionalità MRC per HoloLens 2, vedere Eseguire il rendering dalla fotocamera PV di seguito.

Prima di iniziare, è consigliabile esaminare l'articolo panoramica dell'acquisizione di realtà mista .

Rendering dalla fotocamera PV (consenso esplicito)

HoloLens 2 aggiunge la possibilità per un'app immersiva di eseguire il rendering dalla fotocamera PV mentre l'acquisizione della realtà mista è in esecuzione. Per garantire che l'app supporti correttamente il rendering aggiuntivo, l'app deve acconsentire esplicitamente a questa funzionalità.

Il rendering dalla fotocamera PV offre i miglioramenti seguenti rispetto all'esperienza MRC predefinita:

  • L'allineamento dell'ologramma all'ambiente fisico e le mani per le interazioni vicine devono essere accurati a tutte le distanze. Evitare di avere un offset a distanze diverse dal punto di attivazione, come si potrebbe vedere nel mrc predefinito.
  • L'occhio destro nel visore VR non verrà compromesso, perché non verrà usato per eseguire il rendering degli ologrammi per l'output MRC.

Esistono tre passaggi per abilitare il rendering dalla fotocamera PV:

  1. Abilitare PhotoVideoCamera HolographicViewConfiguration
  2. Gestire il rendering aggiuntivo di HolographicCamera
  3. Verificare che gli shader e il rendering del codice vengano visualizzati correttamente da questo dispositivo HolographicCamera aggiuntivo
Abilitare PhotoVideoCamera HolographicViewConfiguration in DirectX

Per acconsentire esplicitamente al rendering dalla fotocamera pv, un'app abilita semplicemente l'holographicViewConfiguration di PhotoVideoCamera:

var display = Windows.Graphics.Holographic.HolographicDisplay.GetDefault();
var view = display.TryGetViewConfiguration(Windows.Graphics.Holographic.HolographicViewConfigurationKind.PhotoVideoCamera);
if (view != null)
{
    view.IsEnabled = true;
}
Gestire il rendering aggiuntivo di HolographicCamera in DirectX

Quando l'app ha il consenso esplicito per il rendering dalla fotocamera pv e dall'acquisizione di realtà mista viene avviata:

  1. Verrà generato l'evento CameraAdded di HolographicSpace. Questo evento può essere posticipato se l'app non è in grado di gestire la fotocamera in questo momento.
  2. Una volta completato l'evento senza rinvii in sospeso, HolographicCamera verrà visualizzato nell'elenco AddedCameras successivo di HolographicFrame.

Quando l'acquisizione di realtà mista viene arrestata (o se l'app disabilita la configurazione della visualizzazione durante l'esecuzione dell'acquisizione in realtà mista): l'oggetto HolographicCamera verrà visualizzato nell'elenco RemovedCameras di HolographicFrame e verrà generato l'evento CameraRemoved di HolographicSpace.

È stata aggiunta una proprietà ViewConfiguration a HolographicCamera per identificare la configurazione a cui appartiene una fotocamera.

Verificare gli shader e il codice supportano fotocamere aggiuntive

Eseguire un'acquisizione di realtà mista e verificare la presenza di problemi di allineamento insolito, contenuto mancante o prestazioni. Aggiornare gli shader e il codice in base alle esigenze.

Se sono presenti alcune scene che non possono supportare il rendering in una fotocamera aggiuntiva, è possibile disabilitare HolographicViewConfiguration di PhotoVideoCamera.

Disabilitazione di MRC nell'app

App 2D

Le app 2D possono scegliere di nascondere il contenuto visivo quando l'acquisizione di realtà mista è in esecuzione tramite:

App immersiva

Le app immersive possono scegliere di avere il contenuto visivo escluso dall'acquisizione di realtà mista tramite:

  • Impostazione di IsContentProtectionEnabled di HolographicCameraRenderingParameter per disabilitare l'acquisizione della realtà mista per il frame associato
  • Impostazione di IsHardwareContentProtectionEnabled di HolographicCamera per disabilitare l'acquisizione della realtà mista per la fotocamera olografica associata

Tastiera password

Con l'aggiornamento di Windows 10 maggio 2019, il contenuto visivo viene automaticamente escluso dall'acquisizione di realtà mista quando è visibile una password o una tastiera pin.

Sapere quando MRC è attivo

La classe AppCapture può essere usata da un'app per sapere quando l'acquisizione di realtà mista di sistema è in esecuzione (per audio o video).

Nota

L'API GetForCurrentView di AppCapture può restituire null se l'acquisizione di realtà mista non è disponibile nel dispositivo. È anche importante annullare la registrazione dell'evento CapturingChanged quando l'app viene sospesa, altrimenti MRC può entrare in uno stato bloccato.

Integrazione della funzionalità MRC dall'interno dell'app

L'app di realtà mista può avviare l'acquisizione di foto o video MRC dall'interno dell'app e il contenuto acquisito viene reso disponibile per l'app senza essere archiviato nel "Roll della fotocamera" del dispositivo. È possibile creare un registratore MRC personalizzato o sfruttare l'interfaccia utente di acquisizione della fotocamera predefinita.

MRC con interfaccia utente della fotocamera predefinita

Gli sviluppatori possono usare l'API dell'interfaccia utente di Acquisizione fotocamera per ottenere una foto o un video di realtà mista acquisita dall'utente con poche righe di codice.

Questa API avvia l'interfaccia utente predefinita della fotocamera MRC in cui gli utenti possono scattare una foto o un video e restituisce l'acquisizione risultante all'app. È possibile creare un registratore di acquisizione Realtà mista personalizzato se è necessario aggiungere la propria interfaccia utente della fotocamera o l'accesso di livello inferiore ai flussi di acquisizione.

MRC con acquisizione dello schermo

Con l'aggiornamento di HoloLens 2 maggio 2021 (Windows Holographic, versione 21H1 build 20346.1002), gli sviluppatori possono usare l'API Acquisizione schermo per richiedere un flusso di fotogrammi video di realtà mista.

Creazione di un registratore MRC personalizzato

Anche se l'utente può sempre attivare una foto o un video usando il servizio di acquisizione MRC di sistema, un'applicazione può voler creare un'app fotocamera personalizzata che includa gli ologrammi nel flusso della fotocamera proprio come MRC. In questo modo l'applicazione può avviare le acquisizioni dall'input dell'utente, compilare l'interfaccia utente di registrazione personalizzata o personalizzare le impostazioni MRC per denominare alcuni esempi.

HoloStudio aggiunge una fotocamera MRC personalizzata usando effetti MRC

HoloStudio aggiunge una fotocamera MRC personalizzata usando effetti MRC

Altre applicazioni possono eseguire questa operazione usando le API di acquisizione di Windows Media per controllare la fotocamera e aggiungere un effetto video e audio MRC per includere gli ologrammi virtuali e l'audio dell'applicazione in still e video.

Le applicazioni hanno due opzioni per aggiungere l'effetto:

Nota

Lo spazio dei nomi Windows.Media.MixedRealityCapture non verrà riconosciuto da Visual Studio, ma le stringhe sono ancora valide.

Effetto video MRC (Windows.Media.MixedRealityCapture.MixedRealityCaptureVideoEffect)

Nome proprietà Tipo Valore predefinito Descrizione
StreamType UINT32 (MediaStreamType) 1 (VideoRecord) Descrivere il flusso di acquisizione usato per questo effetto. L'audio non è disponibile.
HologramCompositionEnabled boolean TRUE Contrassegnare per abilitare o disabilitare gli ologrammi nell'acquisizione video.
RecordingIndicatorEnabled boolean TRUE Contrassegno per abilitare o disabilitare l'indicatore di registrazione sullo schermo durante l'acquisizione dell'ologramma.
VideoStabilizationEnabled boolean FALSE Contrassegnare per abilitare o disabilitare la stabilizzazione video basata sul tracker HoloLens.
VideoStabilizationBufferLength UINT32 0 Impostare il numero di fotogrammi cronologici usati per la stabilizzazione video. 0 è 0-latenza e quasi "libera" dal punto di vista di potenza e prestazioni. 15 è consigliato per la massima qualità (al costo di 15 fotogrammi di latenza e memoria).
GlobalOpacityCoefficient float 0.9 (HoloLens) 1.0 (visore VR immersive) Impostare il coefficiente di opacità globale dell'ologramma compreso tra 0,0 (completamente trasparente) e 1,0 (completamente opaco).
BlankOnProtectedContent boolean FALSE Flag per abilitare o disabilitare la restituzione di un frame vuoto se è presente un'app UWP 2d che mostra contenuto protetto. Se questo flag è false e un'app UWP 2d mostra contenuto protetto, l'app UWP 2d verrà sostituita da una trama di contenuto protetta sia nel visore che nell'acquisizione di realtà mista.
ShowHiddenMesh boolean FALSE Contrassegno per abilitare o disabilitare la visualizzazione della mesh di area nascosta della fotocamera olografica e del contenuto adiacente.
OutputSize Dimensione 0, 0 Impostare le dimensioni di output desiderate dopo il ritaglio per la stabilizzazione video. Se viene specificata una dimensione di output non valida, viene scelta una dimensione di ritaglio predefinita.
OutputSubtype string Nv12 Impostare il sottotipo di output desiderato dopo la composizione dell'ologramma e/o la stabilizzazione video. Supporta Nv12 e Argb32MediaEncodingSubtypes.
PreferredHologramPerspective UINT32 Eseguire il rendering dall'impostazione fotocamera nel portale di dispositivi Windows Enumerazione utilizzata per indicare quale configurazione di visualizzazione fotocamera olografica deve essere acquisita: 0 (Display) significa che l'app non verrà chiesto di eseguire il rendering dalla fotocamera foto/video, 1 (PhotoVideoCamera) chiederà all'app di eseguire il rendering dalla fotocamera foto/video (se l'app lo supporta). Supportato solo in HoloLens 2

Nota

È possibile modificare il valore predefinito di PreferredHologramPerspective nel portale di dispositivi Windows passando alla pagina acquisizione Realtà mista e deselezionando Rendering da fotocamera. L'impostazione predefinita è 1 (PhotoVideoCamera), ma può essere deselezionata per impostarla su 0 (Display).

Il valore predefinito di PreferredHologramPerspective è stato 0 (Display) prima dell'aggiornamento di giugno 2020 (Windows Holographic, versione 2004 19041.1106 e Windows Holographic, versione 1903 build 18362.1064).

Il supporto per OutputSubtype è stato aggiunto con l'aggiornamento di maggio 2021 (Windows Holographic, versione 21H1 build 20346.1002).

Effetto audio MRC (Windows.Media.MixedRealityCapture.MixedRealityCaptureCaptureAudioEffect)

Nome proprietà Tipo Valore predefinito Descrizione
MixerMode UINT32 2 (audio del microfono e del sistema) Enumerazione utilizzata per indicare quali origini audio devono essere usate: 0 (solo audio Mic), 1 (solo audio di sistema), 2 (audio Mic e sistema)
LoopbackGain float Impostazione App Audio Gain nel portale di dispositivi Windows Ottenere l'applicazione al volume audio del sistema. Varia da 0,0 a 5,0. Supportato solo in HoloLens 2
MicrofonoGain float Impostazione Mic Audio Gain nel portale di dispositivi Windows Ottenere l'applicazione al volume del microfono. Varia da 0,0 a 5,0. Supportato solo in HoloLens 2

Nota

È possibile modificare il valore predefinito di LoopbackGain o MicrofonoGain nel portale di dispositivi Windows passando alla pagina Realtà mista Acquisizione e modificando il dispositivo di scorrimento accanto alle rispettive impostazioni. Entrambe le impostazioni predefinite sono 1.0, ma possono essere impostate su qualsiasi valore compreso tra 0,0 e 5.0.

L'uso di Windows Device Portal per configurare i valori di guadagno predefiniti è stato aggiunto con l'aggiornamento di giugno 2020 (Windows Holographic, versione 2004 build 19041.1106 e Windows Holographic, versione 1903 build 18362.1064).

Limitazioni di MRC simultanee

È necessario tenere presente alcune limitazioni quando più app accedono contemporaneamente a MRC.

Accesso alla fotocamera/foto

In HoloLens 1, MRC non riuscirà a acquisire una foto o acquisire video durante la registrazione di un video o l'acquisizione di una foto. Il contrario è anche vero: se MRC è in esecuzione, l'applicazione non riuscirà a ottenere l'accesso alla fotocamera.

Con HoloLens 2, è possibile condividere l'accesso alla fotocamera. Se non è necessario il controllo diretto della risoluzione o della frequenza dei fotogrammi, è possibile inizializzare MediaCapture usando la proprietà SharedMode con SharedReadOnly.

Accesso alle foto e alle telecamere video predefinite

Funzionalità MRC incorporate in Windows 10 (tramite Cortana, Menu Start, collegamenti hardware, Miracast, Windows Device Portal):

  • Eseguirà con ExclusiveControl per impostazione predefinita

Tuttavia, il supporto è stato aggiunto al sottosistema MRC per funzionare in modalità condivisa:

  • Se un'app richiede l'accesso ExclusiveControl alla fotocamera foto/video, MRC predefinito smetterà automaticamente di usare la fotocamera foto/video in modo che la richiesta dell'app avrà esito positivo
  • Se si avvia MRC incorporato mentre un'app dispone di ExclusiveControl, mrC predefinito verrà eseguito in modalità SharedReadOnly

Questa funzionalità in modalità condivisa presenta alcune restrizioni:

  • Foto tramite Cortana, collegamenti hardware o Menu Start: richiede l'aggiornamento di Windows 10 aprile 2018 (o versioni successive)
  • Video tramite Cortana, collegamenti hardware o Menu Start: richiede l'aggiornamento di Windows 10 aprile 2018 (o versioni successive)
  • Streaming MRC su Miracast: richiede l'aggiornamento Windows 10 ottobre 2018 (o versione successiva)
  • Streaming MRC su Windows Device Portal o tramite l'app complementare HoloLens: richiede HoloLens 2

Nota

La risoluzione e la frequenza dei fotogrammi dell'interfaccia utente della fotocamera MRC predefinita potrebbero essere ridotte dai valori normali quando un'altra app usa la fotocamera foto/video.

Accesso MRC per gli sviluppatori

Ti consigliamo sempre di richiedere il controllo esclusivo per la fotocamera quando usi MRC. In questo modo, l'applicazione avrà il controllo completo delle impostazioni per la fotocamera, purché si siano consapevoli delle limitazioni elencate in precedenza.

Attenzione

Assicurarsi di leggere attentamente le osservazioni di SharingMode prima di continuare.

  • Configurare la fotocamera nel modo desiderato
  • Avviare l'app, acquisire fotogrammi video con l'API iniziale, quindi abilitare MRC

Attenzione

Se si avvia MRC prima di avviare l'app, non è possibile garantire che la funzionalità funzioni come previsto.

È possibile trovare un esempio completo del processo precedente nell'esempio di rilevamento del viso olografico.

Nota

Prima dell'aggiornamento di Windows 10 aprile 2018, un registratore MRC personalizzato di un'app è stato a vicenda esclusivo con MRC di sistema (acquisizione di foto, acquisizione di video o streaming dal portale di dispositivi Windows).

Vedi anche