Udostępnij za pośrednictwem


Kamera

Aby upewnić się, że zawartość lokalnie i zdalnie renderowana może być bezproblemowo złożona, różne właściwości aparatu muszą pozostać zsynchronizowane między serwerem a klientem. Przede wszystkim transformacja i projekcja aparatu. Na przykład zawartość renderowana lokalnie musi używać tej samej transformacji aparatu i projekcji, z którą została renderowana najnowsza ramka zdalna.

Local and remote camera

Na powyższej ilustracji aparat lokalny został przeniesiony w porównaniu z ramką zdalną wysłaną przez serwer. W związku z tym zawartość lokalna musi być renderowana z tej samej perspektywy co ramka zdalna, a na koniec wynikowy obraz jest ponownie projektowany w lokalnej przestrzeni aparatu, co zostało szczegółowo wyjaśnione w późnym etapie ponownego projektu.

Opóźnienie między zdalnym i lokalnym renderowaniem oznacza, że każda zmiana tych ustawień jest stosowana z opóźnieniem. W związku z tym żadna nowa wartość nie może być używana natychmiast w tej samej ramce.

Odległości bliskiej i dalekiej płaszczyzny można ustawić na ustawieniach aparatu. Na urządzeniu HoloLens 2 pozostałe dane przekształcania i projekcji są definiowane przez sprzęt. W przypadku korzystania z symulacji pulpitu są one ustawiane za pośrednictwem danych wejściowych jego Update funkcji.

Zmienione wartości można używać lokalnie natychmiast po nadejściu pierwszej ramki zdalnej, która została z nimi renderowana. Na urządzeniu HoloLens 2 dane, które mają być używane do renderowania, są dostarczane przez element HolographicFrame tak samo jak w każdej innej aplikacji holograficznej. W symulacji klasycznej są one pobierane za pośrednictwem danych wyjściowych Update funkcji.

ustawienia Aparat

W ustawieniach aparatu można zmienić następujące właściwości:

Bliski i daleki samolot:

Aby upewnić się, że nie można ustawić nieprawidłowych zakresów, właściwości NearPlane i FarPlane są tylko do odczytu, a osobna funkcja SetNearAndFarPlane istnieje, aby zmienić zakres. Te dane zostaną wysłane na serwer na końcu ramki. Podczas ustawiania tych wartości parametr NearPlane musi być mniejszy niż FarPlane. W przeciwnym razie wystąpi błąd.

Ważne

W aparacie Unity jest to obsługiwane automatycznie podczas zmieniania głównego aparatu w pobliżu i na dalekich płaszczyznach.

EnableDepth:

Czasami warto wyłączyć zapis buforu głębokości obrazu zdalnego na potrzeby debugowania. Wyłączenie głębokości spowoduje również zatrzymanie wysyłania danych głębokości przez serwer, co zmniejsza przepustowość.

Napiwek

W a unity jest dostarczany składnik debugowania o nazwie EnableDepthComponent , który może służyć do przełączania tej funkcji w interfejsie użytkownika edytora.

Odwrotność:

Uwaga

To ustawienie jest ważne tylko wtedy, gdy EnableDepth jest ustawione na truewartość . W przeciwnym razie to ustawienie nie ma wpływu.

Bufory głębokości zwykle rejestrują wartości z w zakresie zmiennoprzecinkowym [0; 1], z 0 oznaczając głębokość bliskiej płaszczyzny i 1 oznaczającą głębokość dalekiej płaszczyzny. Istnieje również możliwość odwrócenia tego zakresu i rekordu wartości głębokości w zakresie [1; 0], czyli głębokość bliskiej płaszczyzny staje się 1, a głębokość dalekiej płaszczyzny staje się 0. Ogólnie rzecz biorąc, ten ostatni poprawia rozkład dokładności zmiennoprzecinkowych w nieliniowym zakresie z.

Ostrzeżenie

Typowym podejściem jest odwrócenie wartości bliskiej płaszczyzny i dalekiej płaszczyzny na obiektach kamery. Nie powiedzie się to w przypadku usługi Azure Remote Rendering z powodu błędu podczas próby w pliku CameraSettings.

Interfejs API usługi Azure Remote Rendering musi wiedzieć o konwencji buforu głębokości lokalnego modułu renderowania, aby poprawnie utworzyć zdalną głębię w lokalnym buforze głębokości. Jeśli zakres buforu głębokości wynosi [0; 1] pozostaw tę flagę jako false. Jeśli używasz buforu głębokości odwróconej z [1; 0] zakres, ustaw flagę InverseDepth na true.

Uwaga

W przypadku aparatu Unity poprawne ustawienie jest już stosowane przez RenderingConnection element , więc nie ma potrzeby ręcznej interwencji.

Zmianę ustawień aparatu można wykonać w następujący sposób:

void ChangeCameraSetting(RenderingSession session)
{
    CameraSettings settings = session.Connection.CameraSettings;

    settings.SetNearAndFarPlane(0.1f, 20.0f);
    settings.EnableDepth = false;
    settings.InverseDepth = false;
}
void ChangeCameraSetting(ApiHandle<RenderingSession> session)
{
    ApiHandle<CameraSettings> settings = session->Connection()->GetCameraSettings();

    settings->SetNearAndFarPlane(0.1f, 20.0f);
    settings->SetEnableDepth(false);
    settings->SetInverseDepth(false);
}

Dokumentacja interfejsu API

Następne kroki