Przechwytywanie rzeczywistości mieszanej dla deweloperów (DirectX)
Uwaga
Zobacz Renderowanie z kamery PV poniżej, aby uzyskać wskazówki dotyczące nowej funkcji MRC dla urządzenia HoloLens 2.
Przed rozpoczęciem pracy w tym miejscu zalecamy zapoznanie się z artykułem omówieniem przechwytywania rzeczywistości mieszanej.
Renderowanie z kamery PV (zgoda)
Urządzenie HoloLens 2 dodaje możliwość renderowania aplikacji immersyjnej z kamery PV podczas uruchamiania przechwytywania rzeczywistości mieszanej. Aby upewnić się, że aplikacja obsługuje dodatkowe renderowanie poprawnie, aplikacja musi wyrazić zgodę na tę funkcję.
Renderowanie z kamery PV oferuje następujące ulepszenia w domyślnym środowisku MRC:
- Wyrównanie hologramu do środowiska fizycznego i rąk w pobliżu interakcji powinno być dokładne na wszystkich odległościach. Unikaj przesunięcia w odległościach innych niż punkt koncentracji uwagi, jak można zobaczyć w domyślnym mrC.
- Prawe oko w zestawie słuchawkowym nie zostanie naruszone, ponieważ nie będzie używane do renderowania hologramów dla danych wyjściowych MRC.
Istnieją trzy kroki umożliwiające renderowanie z kamery PV:
- Włączanie konfiguracji PhotoVideoCamera HolographicViewConfiguration
- Obsługa dodatkowego renderowania HolographicCamera
- Sprawdź, czy cieniowania i kod są poprawnie renderowane z tej dodatkowej aplikacji HolographicCamera
Włączanie konfiguracji PhotoVideoCamera HolographicViewConfiguration w programie DirectX
Aby wyrazić zgodę na renderowanie z kamery PV, aplikacja po prostu włącza HolographicViewConfiguration PhotoVideoCamera:
var display = Windows.Graphics.Holographic.HolographicDisplay.GetDefault();
var view = display.TryGetViewConfiguration(Windows.Graphics.Holographic.HolographicViewConfigurationKind.PhotoVideoCamera);
if (view != null)
{
view.IsEnabled = true;
}
Obsługa dodatkowego renderowania HolographicCamera w programie DirectX
Gdy aplikacja ma zgodę na renderowanie z kamery PV i przechwytywania rzeczywistości mieszanej rozpoczyna się:
- Zdarzenie CameraAdded holographicSpace zostanie wyzwolone. To zdarzenie można odroczyć, jeśli aplikacja nie może w tej chwili obsłużyć aparatu.
- Po zakończeniu wydarzenia bez wybitnych odroczenia holographicCamera pojawi się na następnej liście AddedCameras holographicFrame.
Gdy przechwytywanie rzeczywistości mieszanej zostanie zatrzymane (lub jeśli aplikacja wyłączy konfigurację widoku podczas przechwytywania rzeczywistości mieszanej): holographicCamera pojawi się na następnej liście HolographicFrame RemovedCameras, a zdarzenie CameraRemoved HolographicSpace zostanie wyzwolone.
Właściwość ViewConfiguration została dodana do platformy HolographicCamera, aby ułatwić identyfikację konfiguracji, do którego należy aparat.
Weryfikowanie cieniowania i obsługi kodu dodatkowych kamer
Uruchom przechwytywanie rzeczywistości mieszanej i sprawdź, czy nietypowe wyrównanie, brak zawartości lub problemy z wydajnością. Zaktualizuj cieniowania i kod zgodnie z potrzebami.
Jeśli istnieją pewne sceny, które nie mogą obsługiwać renderowania do dodatkowej kamery, możesz wyłączyć HolographicViewConfiguration photoVideoCamera.
Wyłączanie funkcji MRC w aplikacji
Aplikacja 2D
Aplikacje 2D mogą zdecydować, że ich zawartość wizualna jest zaciemniana, gdy przechwytywanie rzeczywistości mieszanej jest uruchamiane przez:
- Prezentowanie flagi DXGI_PRESENT_RESTRICT_TO_OUTPUT
- Tworzenie łańcucha wymiany aplikacji z flagą DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED
- Za pomocą Aktualizacja systemu Windows 10 z maja 2019 ustawienie właściwości IsScreenCaptureEnabled elementu ApplicationView
Aplikacja immersywna
Aplikacje immersyjne mogą zdecydować, że ich zawartość wizualna jest wykluczona z przechwytywania rzeczywistości mieszanej przez:
- Ustawianie wartości IsContentProtectionEnabled elementu HolographicCameraRenderingParameter w celu wyłączenia przechwytywania rzeczywistości mieszanej dla skojarzonej ramki
- Ustawianie holographicCamera IsHardwareContentProtectionEnabled, aby wyłączyć przechwytywanie rzeczywistości mieszanej dla skojarzonej kamery holograficznej
Klawiatura haseł
W przypadku Aktualizacja systemu Windows 10 z maja 2019 zawartość wizualna jest automatycznie wykluczana z przechwytywania rzeczywistości mieszanej, gdy jest widoczna klawiatura hasła lub pinezki.
Wiedza, kiedy funkcja MRC jest aktywna
Klasa AppCapture może być używana przez aplikację, aby wiedzieć, kiedy jest uruchomiona funkcja przechwytywania rzeczywistości mieszanej systemu (w przypadku audio lub wideo).
Uwaga
Interfejs API GetForCurrentView aplikacji AppCapture może zwrócić wartość null, jeśli przechwytywanie rzeczywistości mieszanej nie jest dostępne na urządzeniu. Ważne jest również, aby anulować rejestrowanie zdarzenia PrzechwytywanieChanged po zawieszeniu aplikacji, w przeciwnym razie usługa MRC może przejść do stanu zablokowanego.
Integrowanie funkcji MRC z poziomu aplikacji
Aplikacja rzeczywistości mieszanej może uruchomić przechwytywanie zdjęć MRC lub wideo z poziomu aplikacji, a przechwycona zawartość jest udostępniana aplikacji bez przechowywania w urządzeniu "Roll aparatu". Możesz utworzyć niestandardowy rejestrator MRC lub skorzystać z wbudowanego interfejsu użytkownika przechwytywania aparatu.
Funkcja MRC z wbudowanym interfejsem użytkownika aparatu
Deweloperzy mogą używać interfejsu API przechwytywania aparatu, aby uzyskać przechwycone przez użytkownika zdjęcie rzeczywistości mieszanej lub wideo z zaledwie kilkoma wierszami kodu.
Ten interfejs API uruchamia wbudowany interfejs użytkownika aparatu MRC, w którym użytkownicy mogą robić zdjęcie lub wideo i zwraca wynikowe przechwytywanie do aplikacji. Możesz utworzyć niestandardowy rejestrator przechwytywania rzeczywistości mieszanej, jeśli musisz dodać własny interfejs użytkownika aparatu lub dostęp niższego poziomu do przechwytywania strumieni.
MrC z przechwytywaniem ekranu
Dzięki aktualizacji urządzenia HoloLens 2 maja 2021 r. (Windows Holographic, wersja 21H1 kompilacja 20346.1002), deweloperzy mogą zażądać strumienia klatek wideo rzeczywistości mieszanej za pomocą interfejsu API przechwytywania ekranu.
Tworzenie niestandardowego rejestratora MRC
Chociaż użytkownik może zawsze wyzwalać zdjęcie lub wideo przy użyciu systemowej usługi przechwytywania MRC, aplikacja może chcieć utworzyć niestandardową aplikację aparatu, która zawiera hologramy w strumieniu aparatu, podobnie jak MRC. Dzięki temu aplikacja może rozpocząć przechwytywanie danych wejściowych użytkownika, utworzyć niestandardowy interfejs użytkownika rejestrowania lub dostosować ustawienia mrC, aby wymienić kilka przykładów.
HoloStudio dodaje niestandardową kamerę MRC przy użyciu efektów MRC
Inne aplikacje mogą to zrobić za pomocą interfejsów API przechwytywania w systemie Windows Media w celu kontrolowania aparatu i dodawania efektu MRC Video and Audio w celu uwzględnienia wirtualnych hologramów i dźwięku aplikacji w filmach i filmach wideo.
Aplikacje mają dwie opcje dodawania efektu:
- Starszy interfejs API: Windows.Media.Capture.MediaCapture.AddEffectAsync()
- Nowy zalecany interfejs API firmy Microsoft (zwraca obiekt, co umożliwia manipulowanie właściwościami dynamicznymi): Windows.Media.Capture.MediaCapture.AddVideoEffectAsync() / Windows.Media.Capture.MediaCapture.AddAudioEffectAsync(), które wymagają utworzenia własnej implementacji interfejsu IVideoEffectDefinition i IAudioEffectDefinition. Zobacz przykładową aplikację MRC.
Uwaga
Przestrzeń nazw Windows.Media.MixedRealityCapture nie zostanie rozpoznana przez program Visual Studio, ale ciągi są nadal prawidłowe.
Efekt wideo MRC (Windows.Media.MixedRealityCapture.MixedRealityCaptureVideoEffect)
Nazwa właściwości | Typ | Wartość domyślna | opis |
---|---|---|---|
StreamType | UINT32 (MediaStreamType) | 1 (WideoRekord) | Opisz strumień przechwytywania, dla którego jest używany ten efekt. Dźwięk nie jest dostępny. |
HologramCompositionEnabled | boolean | PRAWDA | Flaga umożliwiająca włączanie lub wyłączanie hologramów w przechwytywaniu wideo. |
RecordingIndicatorEnabled | boolean | PRAWDA | Flaga włączania lub wyłączania wskaźnika nagrywania na ekranie podczas przechwytywania hologramu. |
VideoStabilizationEnabled | boolean | FAŁSZ | Flaga włączania lub wyłączania stabilizacji wideo obsługiwanej przez monitor HoloLens. |
VideoStabilizationBufferLength | UINT32 | 0 | Ustaw liczbę ramek historycznych używanych do stabilizacji wideo. Wartość 0 to opóźnienie 0 i prawie "wolne" z perspektywy zasilania i wydajności. 15 jest zalecane w przypadku najwyższej jakości (kosztem 15 ramek opóźnienia i pamięci). |
GlobalOpacityCoefficient | liczba zmiennoprzecinkowa | 0.9 (HoloLens) 1.0 (immersywny zestaw słuchawkowy) | Ustaw globalny współczynnik nieprzezroczystości hologramu w zakresie od 0,0 (w pełni przezroczysty) do 1,0 (w pełni nieprzezroczyste). |
BlankOnProtectedContent | boolean | FAŁSZ | Flaga włączania lub wyłączania zwracania pustej ramki, jeśli istnieje aplikacja platformy UNIWERSALNEJ systemu Windows z zawartością chronioną. Jeśli ta flaga jest fałszywa, a aplikacja platformy UWP 2d wyświetla chronioną zawartość, aplikacja platformy UWP 2d zostanie zastąpiona przez chronioną teksturę zawartości zarówno w zestawie słuchawkowym, jak i w przechwytywaniu rzeczywistości mieszanej. |
ShowHiddenMesh | boolean | FAŁSZ | Flaga umożliwiająca włączenie lub wyłączenie wyświetlania ukrytej siatki obszaru aparatu holograficznego i sąsiedniej zawartości. |
OutputSize | Rozmiar | 0, 0 | Ustaw żądany rozmiar danych wyjściowych po przycinaniu na potrzeby stabilizacji wideo. Domyślny rozmiar przycinania jest wybierany, jeśli określono 0 lub nieprawidłowy rozmiar danych wyjściowych. |
OutputSubtype | String | Nv12 | Ustaw żądany podtyp danych wyjściowych po utworzeniu hologramu i/lub stabilizacji wideo. Obsługuje typy Nv12 i Argb32 MediaEncodingSubtypes. |
PreferredHologramPerspective | UINT32 | Renderowanie z aparatu w portalu urządzeń z systemem Windows | Wyliczenie używane do wskazania, która konfiguracja widoku aparatu holograficznego powinna zostać przechwycona: 0 (Wyświetlanie) oznacza, że aplikacja nie zostanie poproszona o renderowanie z aparatu fotograficznego/wideo, 1 (PhotoVideoCamera) poprosi aplikację o renderowanie z aparatu fotograficznego/wideo (jeśli aplikacja ją obsługuje). Obsługiwane tylko na urządzeniu HoloLens 2 |
Uwaga
Możesz zmienić wartość domyślną preferredHologramPerspective w portalu urządzeń z systemem Windows, przechodząc do strony Przechwytywanie rzeczywistości mieszanej i usuwając zaznaczenie opcji Renderowanie z aparatu. Ustawienie jest domyślnie ustawione na 1 (PhotoVideoCamera), ale można je usunąć, aby ustawić wartość 0 (Display).
Wartość domyślna preferredHologramPerspective to 0 (Display) przed aktualizacją z czerwca 2020 r. (Windows Holographic, wersja 2004 build 19041.1106 i Windows Holographic, wersja 1903, kompilacja 18362.1064).
Dodano obsługę parametru OutputSubtype z aktualizacją z maja 2021 r. (Windows Holographic, wersja 21H1 kompilacja 20346.1002).
Efekt audio MRC (Windows.Media.MixedRealityCapture.MixedRealityCaptureAudioEffect)
Nazwa właściwości | Typ | Wartość domyślna | opis |
---|---|---|---|
MikserMode | UINT32 | 2 (Mikrofon i dźwięk systemowy) | Wyliczenie używane do wskazania, które źródła audio powinny być używane: 0 (tylko dźwięk mikrofonowy), 1 (tylko dźwięk systemowy), 2 (mikrofon i dźwięk systemowy) |
Pętla zwrotnaGain | liczba zmiennoprzecinkowa | Ustawienie Zysk dźwięku aplikacji w portalu urządzeń z systemem Windows | Zysk do zastosowania do dźwięku systemowego. Zakresy od 0,0 do 5,0. Obsługiwane tylko na urządzeniu HoloLens 2 |
MikrofonGain | liczba zmiennoprzecinkowa | Ustawienie Zysk dźwięku mikrofonu w portalu urządzeń z systemem Windows | Zysk do zastosowania do głośności mikrofonu. Zakresy od 0,0 do 5,0. Obsługiwane tylko na urządzeniu HoloLens 2 |
Uwaga
Możesz zmienić wartość domyślną loopbackGain lub MicrophoneGain w portalu urządzeń z systemem Windows, przechodząc do strony przechwytywania rzeczywistości mieszanej i dostosowując suwak obok odpowiednich ustawień. Oba ustawienia są domyślnie ustawione na 1.0, ale można ustawić dowolną wartość z zakresu od 0,0 do 5,0.
Za pomocą portalu urządzeń z systemem Windows do skonfigurowania domyślnych wartości zysków dodano z aktualizacją z czerwca 2020 r. (Windows Holographic, wersja 2004 build 19041.1106 i Windows Holographic, wersja 1903 kompilacji 18362.1064).
Jednoczesne ograniczenia usługi MRC
Należy pamiętać o pewnych ograniczeniach, gdy wiele aplikacji uzyskuje dostęp do usługi MRC w tym samym czasie.
Dostęp do aparatu fotograficznego/wideo
Na urządzeniu HoloLens 1 funkcja MRC nie może przechwycić zdjęcia ani przechwycić wideo, podczas gdy proces nagrywa wideo lub robi zdjęcie. Odwrotnie jest również prawdziwe: jeśli funkcja MRC jest uruchomiona, aplikacja nie będzie mogła uzyskać dostępu do aparatu.
Dzięki urządzeniu HoloLens 2 możesz udostępnić dostęp do aparatu. Jeśli nie potrzebujesz bezpośredniej kontroli nad rozdzielczością lub szybkością klatek, możesz zainicjować metodę MediaCapture przy użyciu właściwości SharedMode z elementem SharedReadOnly.
Wbudowany dostęp do zdjęć MRC i kamery wideo
Funkcje MRC wbudowane w system Windows 10 (za pośrednictwem Cortany, Menu Start, skrótów sprzętowych, Miracast, Portal urządzeń z systemem Windows):
- Domyślnie będzie działać z funkcją ExclusiveControl
Obsługa została jednak dodana do podsystemu MRC w celu działania w trybie współużytkowym:
- Jeśli aplikacja żąda dostępu ExclusiveControl do aparatu fotograficznego/wideo, wbudowana funkcja MRC automatycznie przestanie używać aparatu fotograficznego/wideo, aby żądanie aplikacji powiodło się
- Jeśli wbudowana funkcja MRC jest uruchamiana, gdy aplikacja ma funkcję ExclusiveControl, wbudowana funkcja MRC będzie działać w trybie SharedReadOnly
Ta funkcja trybu udostępnionego ma pewne ograniczenia:
- Zdjęcie za pośrednictwem Cortany, skrótów sprzętowych lub menu Start: wymaga aktualizacji systemu Windows 10 z kwietnia 2018 r. (lub nowszej)
- Wideo za pośrednictwem Cortany, skrótów sprzętowych lub menu Start: wymaga aktualizacji systemu Windows 10 z kwietnia 2018 r. (lub nowszej)
- Przesyłanie strumieniowe mrC przez Miracast: wymaga Aktualizacja systemu Windows 10 z października 2018 (lub nowszej)
- Przesyłanie strumieniowe mrC za pośrednictwem portalu urządzeń z systemem Windows lub za pośrednictwem aplikacji towarzyszącej Urządzenia HoloLens: wymaga urządzenia HoloLens 2
Uwaga
Rozdzielczość i szybkość klatek wbudowanego interfejsu użytkownika aparatu MRC może zostać zmniejszona z normalnych wartości, gdy inna aplikacja korzysta z aparatu fotograficznego/wideo.
Dostęp MRC dla deweloperów
Zalecamy, aby w przypadku korzystania z funkcji MRC zawsze żądać kontroli wyłącznych dla aparatu. Dzięki temu aplikacja ma pełną kontrolę nad ustawieniami aparatu, o ile wiesz o ograniczeniach wymienionych powyżej.
- Tworzenie obiektu przechwytywania multimediów przy użyciu ustawień inicjowania
- Ustaw właściwość SharingMode na wyłączność
Uwaga
Przed kontynuowaniem uważnie przeczytaj uwagi SharingMode.
- Konfigurowanie aparatu w żądany sposób
- Uruchom aplikację, przechwyć ramki wideo przy użyciu interfejsu API uruchamiania, a następnie włącz funkcję MRC
Uwaga
Jeśli uruchomisz usługę MRC przed uruchomieniem aplikacji, nie możemy zagwarantować, że funkcja będzie działać zgodnie z oczekiwaniami.
Pełny przykład powyższego procesu można znaleźć w przykładzie holograficznego śledzenia twarzy.
Uwaga
Przed aktualizacją systemu Windows 10 z kwietnia 2018 r. niestandardowy rejestrator MRC aplikacji wzajemnie wykluczał się z systemowym mrC (przechwytywanie zdjęć, przechwytywanie filmów wideo lub przesyłanie strumieniowe z portalu urządzeń z systemem Windows).