Acquisizione di realtà mista per sviluppatori (DirectX)
Nota
Per indicazioni su una nuova funzionalità MRC per HoloLens 2, vedi 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 di 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:
- Abilitare PhotoVideoCamera HolographicViewConfiguration
- Gestire il rendering aggiuntivo di HolographicCamera
- Verificare il rendering corretto degli shader e del codice da questa holographicCamera aggiuntiva
Abilitare PhotoVideoCamera HolographicViewConfiguration in DirectX
Per acconsentire esplicitamente al rendering dalla fotocamera PV, un'app abilita semplicemente 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 dispone del consenso esplicito per il rendering dalla fotocamera PV e dall'acquisizione di realtà mista viene avviata:
- 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.
- Una volta completato l'evento senza rinvii in sospeso, HolographicCamera verrà visualizzato nell'elenco AddedCameras di HolographicFrame successivo.
Quando l'acquisizione di realtà mista si arresta (o se l'app disabilita la configurazione della visualizzazione mentre è in esecuzione l'acquisizione di realtà mista): HolographicCamera verrà visualizzato nell'elenco RemovedCameras di HolographicFrame successivo 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 un allineamento insolito, contenuto mancante o problemi di 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:
- Presente con il flag DXGI_PRESENT_RESTRICT_TO_OUTPUT
- Creare la catena di scambio dell'app con il flag DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED
- Con il Aggiornamento di Windows 10 (maggio 2019), impostando IsScreenCaptureEnabled di ApplicationView
App immersiva
Le app immersive possono scegliere di escludere il contenuto visivo dall'acquisizione di realtà mista tramite:
- Impostazione di IsContentProtectionEnabled di HolographicCameraRenderingParameter per disabilitare l'acquisizione di realtà mista per il frame associato
- Impostazione di IsHardwareContentProtectionEnabled di HolographicCamera per disabilitare l'acquisizione di realtà mista per la fotocamera olografica associata
Tastiera password
Con il 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 incorporata.
MRC con interfaccia utente predefinita della fotocamera
Gli sviluppatori possono usare l'API dell'interfaccia utente 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 di Realtà mista personalizzato se è necessario aggiungere l'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 di acquisizione dello 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 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
Altre applicazioni possono eseguire questa operazione usando le API windows Media Capture 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:
- API precedente: Windows.Media.Capture.MediaCapture.AddEffectAsync()
- La nuova API consigliata da Microsoft (restituisce un oggetto, rendendo possibile la modifica delle proprietà dinamiche): Windows.Media.Capture.MediaCapture.AddVideoEffectAsync() / Windows.Media.Capture.MediaCapture.AddAudioEffectAsync() che richiedono che l'app crei la propria implementazione di IVideoEffectDefinition e IAudioEffectDefinition. Per esempi, vedere l'app di esempio MRC.
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à | Type | Valore predefinito | Descrizione |
---|---|---|---|
StreamType | UINT32 (MediaStreamType) | 1 (VideoRecord) | Descrivere il flusso di acquisizione usato per questo effetto. L'audio non è disponibile. |
HologramCompositionEnabled | boolean | TRUE | Flag per abilitare o disabilitare gli ologrammi nell'acquisizione video. |
RecordingIndicatorEnabled | boolean | TRUE | Flag per abilitare o disabilitare l'indicatore di registrazione sullo schermo durante l'acquisizione dell'ologramma. |
VideoStabilizationEnabled | boolean | FALSE | Flag 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 è latenza 0 e quasi "libera" dal punto di vista della potenza e delle prestazioni. 15 è consigliato per la massima qualità (a un 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 | Contrassegno per abilitare o disabilitare la restituzione di un frame vuoto se è presente un'app UWP 2d che mostra il 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 protetto sia nel visore VR che nell'acquisizione di realtà mista. |
ShowHiddenMesh | boolean | FALSE | Contrassegno per abilitare o disabilitare la visualizzazione della mesh ad 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 si specifica una dimensione di output non valida, viene scelta una dimensione di ritaglio predefinita se si specifica 0 o una dimensione di output non valida. |
OutputSubtype | String | Nv12 | Impostare il sottotipo di output desiderato dopo la composizione dell'ologramma e/o la stabilizzazione video. Supporta Nv12 e Argb32 MediaEncodingSubtypes. |
PreferredHologramPerspective | UINT32 | Eseguire il rendering dall'impostazione fotocamera nel portale di dispositivi di Windows | Enumerazione usata per indicare quale configurazione della visualizzazione della fotocamera olografica deve essere acquisita: 0 (Display) indica che all'app non verrà richiesto di eseguire il rendering dalla fotocamera/videocamera, 1 (PhotoVideoCamera) chiederà all'app di eseguire il rendering dalla fotocamera/videocamera (se l'app lo supporta). Supportato solo in HoloLens 2 |
Nota
È possibile modificare il valore predefinito di PreferredHologramPerspective in Windows Device Portal passando alla pagina di acquisizione Realtà mista e deselezionando Rendering da fotocamera. L'impostazione predefinita è 1 (PhotoVideoCamera), ma può essere deselezionata per impostarla su 0 (Display).The settings to 1 (PhotoVideoCamera), but can be unchecked to set it to 0 (Display).
Il valore predefinito di PreferredHologramPerspective era 0 (Display) prima dell'aggiornamento di giugno 2020 (Windows Holographic, versione 2004 build 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.MixedRealityCaptureAudioEffect)
Nome proprietà | Type | Valore predefinito | Descrizione |
---|---|---|---|
MixerMode | UINT32 | 2 (Audio microfono e sistema) | Enumerazione usata per indicare quali origini audio devono essere usate: 0 (solo audio microfono), 1 (solo audio di sistema), 2 (audio Mic e system) |
LoopbackGain | float | Impostazione App Audio Gain (Guadagno audio app) nel portale di dispositivi di Windows | Ottenere l'applicazione al volume audio di sistema. È compreso tra 0,0 e 5,0. Supportato solo in HoloLens 2 |
MicrofonoGain | float | Impostazione Mic Audio Gain (Guadagno audio microfono) in Windows Device Portal | Guadagno da applicare al volume microfono. È compreso tra 0,0 e 5,0. Supportato solo in HoloLens 2 |
Nota
È possibile modificare il valore predefinito di LoopbackGain o MicrophoneGain in Windows Device Portal passando alla pagina di acquisizione Realtà mista e modificando il dispositivo di scorrimento accanto alle rispettive impostazioni. Entrambe le impostazioni sono predefinite 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 simultanee di MRC
È necessario tenere presente alcune limitazioni quando più app accedono contemporaneamente a MRC.
Accesso alla fotocamera/videocamera
In HoloLens 1, MRC non riuscirà a acquisire una foto o acquisire video mentre un processo sta registrando video o scattando una foto. Anche il contrario è vero: se MRC è in esecuzione, l'applicazione non riuscirà ad accedere 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 predefinito a foto e videocamera MRC
Funzionalità MRC integrate in Windows 10 (tramite Cortana, Menu Start, collegamenti hardware, Miracast, Windows Device Portal):
- Verrà eseguito con ExclusiveControl per impostazione predefinita
Tuttavia, il supporto è stato aggiunto al sottosistema MRC per operare in modalità condivisa:
- Se un'app richiede l'accesso ExclusiveControl alla fotocamera/videocamera, MRC predefinito smetterà automaticamente di usare la fotocamera/videocamera, in modo che la richiesta dell'app abbia esito positivo
- Se viene avviato MRC incorporato mentre un'app dispone di ExclusiveControl, l'mrc predefinito verrà eseguito in modalità SharedReadOnly
Questa funzionalità in modalità condivisa presenta alcune restrizioni:
- Foto tramite Cortana, tasti di scelta rapida hardware o Menu Start: richiede l'aggiornamento di Windows 10 aprile 2018 (o versione successiva)
- Video tramite Cortana, collegamenti hardware o menu Start: richiede l'aggiornamento di Windows 10 aprile 2018 (o versione successiva)
- Streaming MRC su Miracast: richiede l'Aggiornamento di 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 incorporata potrebbero essere ridotte dai valori normali quando un'altra app usa la fotocamera/videocamera.
Accesso MRC per sviluppatori
Ti consigliamo di richiedere sempre il controllo esclusivo per la fotocamera quando usi MRC. Ciò garantisce che l'applicazione abbia il controllo completo delle impostazioni per la fotocamera, purché tu sia consapevole delle limitazioni elencate in precedenza.
- Creare un oggetto acquisizione multimediale usando le impostazioni di inizializzazione
- Impostare la proprietà SharingMode su esclusiva
Attenzione
Prima di continuare, leggere attentamente le osservazioni di SharingMode.
- 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 si escludono a vicenda con mrc di sistema (acquisizione di foto, acquisizione di video o streaming da Windows Device Portal).