Kamera
Aby se zajistilo, že místně a vzdáleně vykreslovaný obsah je možné bezproblémově složeného, musí různé vlastnosti fotoaparátu zůstat synchronizované mezi serverem a klientem. Nejvýraznější je transformace a projekce kamery. Například místně vykreslený obsah musí používat stejnou transformaci a projekci fotoaparátu, se kterou byl vykreslen nejnovější vzdálený snímek.
Na obrázku výše se místní kamera přesunula ve srovnání se vzdáleným snímkem odeslaný serverem. V důsledku toho se místní obsah musí vykreslit ze stejného pohledu jako vzdálený snímek a nakonec se výsledný obrázek přeprojektuje do prostoru místního fotoaparátu, který je podrobně vysvětlen v pozdější fázi reprojektování.
Zpoždění mezi vzdáleným a místním vykreslováním znamená, že jakákoli změna těchto nastavení se použije se zpožděním. Proto není možné použít žádnou novou hodnotu okamžitě se stejným rámcem.
Na nastavení kamery je možné nastavit nejbližší a vzdálené vzdálenosti letadla. Na HoloLens 2 je zbývající transformační a projekční data definovaná hardwarem. Při použití simulace plochy se nastaví prostřednictvím vstupu jeho Update
funkce.
Změněné hodnoty lze použít místně, jakmile dorazí první vzdálený rámec, který se s nimi vykresloval. Na HoloLens 2 jsou data, která se mají použít k vykreslování, poskytována holographicFrame stejně jako v jakékoli jiné holografické aplikaci. V simulaci plochy se načtou prostřednictvím výstupu Update
funkce.
nastavení Kamera
V nastavení fotoaparátu je možné změnit následující vlastnosti:
Blízko a daleko rovina:
Chcete-li zajistit, aby nebyly nastaveny žádné neplatné rozsahy, jsou vlastnosti NearPlane a FarPlane jen pro čtení a existuje samostatná funkce SetNearAndFarPlane pro změnu rozsahu. Tato data budou odeslána na server na konci rámce. Při nastavování těchto hodnot musí být NearPlane menší než FarPlane. V opačném případě dojde k chybě.
Důležité
V Unity se to zpracovává automaticky při změně hlavní kamery blízko a daleko letadla.
PovolitDepth:
Někdy je užitečné zakázat zápis vzdálené image do vyrovnávací paměti hloubky pro účely ladění. Zakázáním hloubky také zastavíte odesílání podrobných dat serveru, čímž se sníží šířka pásma.
Tip
V Unity je k dispozici ladicí komponenta s názvem EnableDepthComponent , která se dá použít k přepnutí této funkce v uživatelském rozhraní editoru.
InverseDepth:
Poznámka:
Toto nastavení je důležité pouze v případě, že EnableDepth
je nastaveno .true
Jinak toto nastavení nemá žádný vliv.
Hloubkové vyrovnávací paměti obvykle zaznamenávají hodnoty z v rozsahu s plovoucí desetinou čárkou [0; 1], s 0 označující hloubku blízké roviny a 1 označující hloubku daleko roviny. Je také možné invertovat tento rozsah a zaznamenávat hloubkové hodnoty v rozsahu [1; 0], to znamená, že hloubka blízké roviny se změní na 1 a hloubka daleko roviny se změní na hodnotu 0. Obecně platí, že tato funkce zlepšuje rozdělení přesnosti s plovoucí desetinnou čárkou v nelineárním rozsahu z.
Upozorňující
Běžným přístupem je invertování hodnot blízko roviny a vzdálené roviny na objektech kamery. U služby Azure Remote Rendering dojde k selhání s chybou při pokusu o tuto funkci na serveru CameraSettings
.
Rozhraní API služby Azure Remote Rendering potřebuje vědět o konvenci hloubkové vyrovnávací paměti místního rendereru, aby správně nakreslila vzdálenou hloubku do vyrovnávací paměti místní hloubky. Pokud je rozsah hloubkové vyrovnávací paměti [0; 1] nechte tento příznak jako false
. Použijete-li invertovanou hloubkovou vyrovnávací paměť s [1; 0] rozsah, nastavte InverseDepth
příznak na true
.
Poznámka:
Pro Unity je správné nastavení již použito RenderingConnection
, takže není nutné ruční zásah.
Změna nastavení kamery se dá provést takto:
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);
}
Dokumentace k rozhraní API
- KameraNastavení jazyka C#
- KameraNastavení C++
- Funkce C# GraphicsBindingSimD3d11.Update
- C++ GraphicsBindingSimD3d11::Update – funkce