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 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)
HoloLens 2 dodaje możliwość renderowania aplikacji immersyjnej z kamery PV podczas uruchamiania przechwytywania rzeczywistości mieszanej. Aby zapewnić prawidłowe renderowanie aplikacji, aplikacja musi wyrazić zgodę na korzystanie z tej funkcji.
Renderowanie z kamery PV oferuje następujące ulepszenia domyślnego środowiska MRC:
- Wyrównanie hologramu do środowiska fizycznego i rąk do niemal 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 elementu PhotoVideoCamera HolographicViewConfiguration
- Obsługa dodatkowego renderowania HolographicCamera
- Sprawdź, czy cieniowania i kod są poprawnie renderowane z tego dodatkowego narzędzia HolographicCamera
Włączanie polecenia PhotoVideoCamera HolographicViewConfiguration w programie DirectX
Aby wyrazić zgodę na renderowanie z kamery PV, aplikacja po prostu umożliwia 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 wyrazi zgodę na renderowanie z kamery PV i przechwytywanie rzeczywistości mieszanej rozpoczyna się:
- Zdarzenie CameraAdded w 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 zaległych 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 uruchomione.
Właściwość ViewConfiguration została dodana do platformy HolographicCamera, aby ułatwić identyfikację konfiguracji, do której należy kamera.
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ć funkcję HolographicViewConfiguration w aplikacji PhotoVideoCamera.
Wyłączanie usługi 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 za pomocą flagi DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED
- Po aktualizacji Windows 10 maja 2019 r. ustawienie elementu ApplicationView's IsScreenCaptureEnabled
Aplikacja immersywna
Aplikacje immersyjne mogą wybrać, czy ich zawartość wizualna jest wykluczona z przechwytywania rzeczywistości mieszanej przez:
- Ustawianie elementu IsContentProtectionEnabled elementu HolographicCameraRenderingParameter w celu wyłączenia przechwytywania rzeczywistości mieszanej dla skojarzonej ramki
- Ustawianie elementu IsHardwareContentProtectionEnabled holographicCamera w celu wyłączenia przechwytywania rzeczywistości mieszanej dla skojarzonej kamery holograficznej
Klawiatura haseł
Dzięki aktualizacji z Windows 10 maja 2019 r. zawartość wizualna jest automatycznie wykluczona z przechwytywania rzeczywistości mieszanej, gdy jest widoczna klawiatura hasła lub przypinania.
Wiedza o tym, kiedy usługa MRC jest aktywna
Klasa AppCapture może być używana przez aplikację, aby wiedzieć, kiedy jest uruchomione przechwytywanie rzeczywistości mieszanej systemu (w przypadku dźwięku 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 CapturingChanged po zawieszeniu aplikacji, w przeciwnym razie mrC może dostać się do stanu zablokowanego.
Integrowanie funkcji MRC z poziomu aplikacji
Aplikacja rzeczywistości mieszanej może uruchomić zdjęcie MRC lub przechwytywanie 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 kamer.
MrC z wbudowanym interfejsem użytkownika aparatu
Deweloperzy mogą używać interfejsu API interfejsu użytkownika 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 wynikową przechwytywanie aplikacji. Możesz utworzyć niestandardowy rejestrator Mixed Reality Capture, 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 HoloLens 2 maja 2021 r. (Windows Holographic, wersja 21H1 kompilacja 20346.1002), deweloperzy mogą użyć interfejsu API przechwytywania ekranu, aby zażądać strumienia ramek wideo rzeczywistości mieszanej.
Tworzenie niestandardowego rejestratora MRC
Chociaż użytkownik zawsze może wyzwolić 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 tak samo 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 usłudze 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 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 (VideoRecord) | Opisz strumień przechwytywania, dla którego jest używany ten efekt. Dźwięk nie jest dostępny. |
HologramCompositionEnabled | boolean | TRUE | Flaga umożliwiająca włączanie lub wyłączanie hologramów w przechwytywaniu wideo. |
RecordingIndicatorEnabled | boolean | TRUE | Flaga włączania lub wyłączania wskaźnika nagrywania na ekranie podczas przechwytywania hologramu. |
VideoStabilizationEnabled | boolean | FALSE | Flaga włączania lub wyłączania stabilizacji wideo obsługiwanej przez tracker HoloLens. |
VideoStabilizationBufferLength | UINT32 | 0 | Ustaw liczbę ramek historycznych używanych do stabilizacji wideo. 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 | float | 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 nieprzezroczysty). |
BlankOnProtectedContent | boolean | FALSE | Flaga umożliwiająca włączenie lub wyłączenie zwracania pustej ramki, jeśli istnieje aplikacja platformy UWP z chronioną zawartością. 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 | FALSE | Flaga umożliwiająca włączenie lub wyłączenie wyświetlania ukrytej siatki obszaru kamery holograficznej 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 wartość 0 lub nieprawidłowy rozmiar danych wyjściowych. |
OutputSubtype | Ciąg | Nv12 | Ustaw żądany podtyp danych wyjściowych po utworzeniu hologramu i/lub stabilizacji wideo. Obsługuje typy Nv12 i Argb32MediaEncodingSubtypes. |
PreferredHologramPerspective | UINT32 | Renderowanie z ustawień aparatu w portalu urządzeń z systemem Windows | Wyliczenie używane do wskazania, która konfiguracja widoku kamery holograficznej powinna zostać przechwycona: 0 (Wyświetlacz) 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 w HoloLens 2 |
Uwaga
Możesz zmienić wartość domyślną elementu PreferredHologramPerspective w portalu urządzeń z systemem Windows, przechodząc do strony przechwytywania Mixed Reality i usuwając zaznaczenie pola Renderowanie z aparatu. Ustawienie jest domyślnie ustawione na 1 (PhotoVideoCamera), ale można je usunąć, aby ustawić wartość 0 (Wyświetl).
Wartość domyślna preferredHologramPerspective to 0 (Display) przed aktualizacją z czerwca 2020 r. (Windows Holographic, wersja 2004 kompilacja 19041.1106 i Windows Holographic, wersja 1903 kompilacji 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 | float | Ustawienie Uzyskiwanie dźwięku aplikacji w portalu urządzeń z systemem Windows | Zysk, aby zastosować do dźwięku systemowego. Zakresy od 0,0 do 5,0. Obsługiwane tylko w HoloLens 2 |
MikrofonGain | float | Ustawienie Uzyskiwanie dźwięku mikrofonu w portalu urządzeń z systemem Windows | Zysk, aby zastosować do głośności mikrofonu. Zakresy od 0,0 do 5,0. Obsługiwane tylko w HoloLens 2 |
Uwaga
Możesz zmienić wartość domyślną loopbackGain lub MicrophoneGain w portalu urządzeń z systemem Windows, przechodząc do strony Mixed Reality Przechwytywanie 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 aktualizację z czerwca 2020 r. (Windows Holographic, wersja 2004 kompilacja 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 mrC nie będzie przechwytywanego zdjęcia lub przechwytywania wideo podczas nagrywania wideo lub robienia zdjęcia. Odwrotna wartość jest również prawdziwa: jeśli funkcja MRC jest uruchomiona, aplikacja nie będzie mogła uzyskać dostępu do aparatu.
Dzięki HoloLens 2 można 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 funkcją SharedReadOnly.
Wbudowany dostęp do kamery wideo i zdjęć MRC
Funkcje MRC wbudowane w 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
Dodano jednak obsługę podsystemu MRC do działania w trybie udostępnionym:
- Jeśli aplikacja żąda dostępu ExclusiveControl do aparatu fotograficznego/wideo, wbudowane narzędzie MRC automatycznie przestanie używać aparatu fotograficznego/wideo, aby żądanie aplikacji zakończyło się powodzeniem
- Jeśli wbudowana funkcja MRC jest uruchamiana, gdy aplikacja ma funkcję ExclusiveControl, wbudowane kontrolery MRC będą 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 z Windows 10 kwietnia 2018 r. (lub nowszej)
- Wideo za pośrednictwem Cortany, skrótów sprzętowych lub menu Start: wymaga aktualizacji z Windows 10 kwietnia 2018 r. (lub nowszej)
- Przesyłanie strumieniowe mrC przez Miracast: wymaga aktualizacji z Windows 10 października 2018 r. (lub nowszej)
- Przesyłanie strumieniowe mrC za pośrednictwem portalu urządzeń z systemem Windows lub za pośrednictwem aplikacji towarzyszącej HoloLens: wymaga 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 narzędzia MRC zawsze zażądać wyłącznej kontroli aparatu. Zapewni to aplikacji pełną kontrolę nad ustawieniami aparatu, o ile masz świadomość ograniczeń wymienionych powyżej.
- Tworzenie obiektu przechwytywania multimediów przy użyciu ustawień inicjowania
- Ustaw właściwość SharingMode na wyłączność
Przestroga
Przed kontynuowaniem należy uważnie przeczytać uwagi SharingMode .
- Konfigurowanie aparatu w żądany sposób
- Uruchom aplikację, przechwyć ramki wideo za pomocą interfejsu API uruchamiania, a następnie włącz usługę MRC
Przestroga
Jeśli uruchomisz usługę MRC przed uruchomieniem aplikacji, nie możemy zagwarantować, że funkcja będzie działać zgodnie z oczekiwaniami.
Pełną próbkę powyższego procesu można znaleźć w przykładzie śledzenia twarzy holograficznej.
Uwaga
Przed aktualizacją Windows 10 kwietnia 2018 r. niestandardowy rejestrator MRC aplikacji wzajemnie wykluczał się z systemem MRC (przechwytywanie zdjęć, przechwytywanie filmów wideo lub przesyłanie strumieniowe z portalu urządzeń z systemem Windows).