Relace Remote Renderingu

V Azure Remote Renderingu (ARR) je relace klíčovým konceptem. Tento článek vysvětluje, co přesně je relace.

Přehled

Azure Remote Rendering funguje tak, že přesměruje složité úlohy vykreslování do cloudu. Tyto úlohy vykreslování nemohou být splněny pouze žádným serverem, protože většina cloudových serverů nemá gpu. Vzhledem k množství zahrnutých dat a pevnému požadavku na vytváření výsledků s interaktivním rámcem je zodpovědnost, která server zpracovává požadavek uživatele, který také nemůže být předán jinému počítači za běhu, což může být možné v případě častějšího webového provozu.

To znamená, že když používáte Azure Remote Rendering, musí být cloudový server s potřebnými hardwarovými možnostmi vyhrazený výhradně pro zpracování požadavků na vykreslování. Relace odkazuje na všechno, co se týká interakce s tímto serverem. Začíná počáteční žádostí o rezervaci (zapůjčení) počítače pro vaše použití, pokračuje všemi příkazy pro načítání a manipulaci s modely a končí uvolněním zapůjčení na cloudovém serveru.

Správa relací

Relace můžete spravovat a pracovat s nimi několika způsoby. Jazykově nezávislý způsob vytváření, aktualizace a vypínání relací probíhá prostřednictvím rozhraní REST API pro správu relací. V jazyce C# a C++ jsou tyto operace vystaveny prostřednictvím tříd RemoteRenderingClient a RenderingSession. Pro aplikace Unity existují další utility funkce poskytované komponentou ARRServiceUnity .

Jakmile se připojíte k aktivní relaci, operace, jako je načítání modelů a interakce se scénou, jsou vystaveny prostřednictvím RenderingSession třídy.

Správa více relací současně

Z jednoho zařízení se není možné plně připojit k více relacím. Můžete ale vytvářet, sledovat a vypínat tolik relací, kolik chcete z jedné aplikace. Pokud se aplikace nikdy nepřipojí k relaci, nemusí běžet na zařízení, jako je HoloLens 2. Případ použití takové implementace může být, pokud chcete řídit relace prostřednictvím centrálního mechanismu. Můžete například vytvořit webovou aplikaci, do které se může přihlásit více tabletů a zařízení HoloLens. Aplikace pak může zobrazit možnosti na tabletech, jako je například model CAD, který se má zobrazit. Pokud uživatel provede výběr, tyto informace se předávají všem zařízením HoloLens a vytvoří sdílené prostředí.

Fáze relace

Každá relace prochází několika fázemi.

Spuštění relace

Když požádáte ARR o vytvoření nové relace, první věcí, kterou dělá, je vrátit UUID relace. Toto UUID umožňuje dotazovat se na informace o relaci. UUID a některé základní informace o relaci jsou trvalé po dobu 30 dnů, takže můžete dotazovat na informace i po zastavení relace. V tomto okamžiku bude stav relace hlášen jako Začátek.

V dalším kroku se Azure Remote Rendering pokusí najít server, který může hostovat vaši relaci. Pro toto hledání existují dva parametry. Za prvé, zarezervuje pouze servery ve vaší oblasti. Je to proto, že latence sítě napříč oblastmi může být příliš vysoká, aby se zajistilo slušné prostředí. Druhým faktorem je požadovaná velikost , kterou jste zadali. V každé oblasti existuje omezený počet serverů, které můžou splnit požadavek na velikost Standard nebo Premium. Pokud se tedy všechny servery požadované velikosti aktuálně používají ve vaší oblasti, vytvoření relace se nezdaří. Důvod selhání může být dotazován.

Důležité

Pokud požádáte o velikost serveru Standard a požadavek selže kvůli vysoké poptávce, neznamená to, že požadavek na server Premium selže. Takže pokud je to pro vás možnost, můžete zkusit vrátit se k velikosti serveru Premium .

Když služba najde vhodný server, musí na něj zkopírovat správný virtuální počítač, aby ho převést na hostitele Azure Remote Rendering. Tento proces trvá několik minut. Potom se virtuální počítač spustí a stav relace se převede na Připraveno.

V tomto okamžiku server výhradně čeká na váš vstup. To je také bod, ze kterého se vám služba účtuje.

Připojení relace

Jakmile je relace připravená, můžete se k ní připojit . Během připojení může zařízení odesílat příkazy pro načtení a úpravy modelů. Každý hostitel ARR vždy obsluhuje vždy jen jedno klientské zařízení, takže když se klient připojí k relaci, má výhradní kontrolu nad vykreslovaným obsahem. To také znamená, že výkon vykreslování se nikdy nebude lišit z důvodů mimo vaši kontrolu.

Důležité

I když se k relaci může připojit jenom jeden klient, základní informace o relacích, jako je jejich aktuální stav, se dají dotazovat bez připojení.

Když je zařízení připojené k relaci, pokusy jiných zařízení o připojení selžou. Jakmile se připojené zařízení odpojí dobrovolně nebo kvůli nějakému druhu selhání, relace přijme další žádost o připojení. Všechny předchozí stavy (načtené modely a takové) se zahodí tak, aby další připojující zařízení získalo čistou slate. Relace se tak dají opakovaně používat na různých zařízeních a ve většině případů může být možné skrýt režii při spuštění relace před koncovým uživatelem.

Důležité

Vzdálený server nikdy nezmění stav dat na straně klienta. Klientská aplikace musí provádět všechny mutace dat (například aktualizace transformace a požadavky na načtení). Všechny akce okamžitě aktualizují stav klienta.

Konec relace

Když požádáte o novou relaci, zadáte maximální dobu zapůjčení, obvykle v rozsahu 1 až osm hodin. Jedná se o dobu trvání, během které hostitel přijme váš vstup.

Relace může končit dvěma běžnými důvody. Buď ručně požádáte o zastavení relace, nebo vypršení maximální doby zapůjčení. V obou případech se jakékoli aktivní připojení k hostiteli okamžitě zavře a služba se na daném serveru vypne. Server se pak vrátí do fondu Azure a může se požádat o další účely. Zastavení relace nelze vrátit zpět ani zrušit. Dotazování na stav relace v zastavené relaci buď vrátí stav zastaveno , nebo vypršela jeho platnost v závislosti na tom, jestli byl ručně vypnutý, nebo protože došlo k dosažení maximální doby zapůjčení.

Relace může být také zastavena kvůli nějaké chybě.

Ve všechpřípadechch

Upozorňující

To, jestli se připojujete k relaci a jak dlouho, nemá vliv na fakturaci. To, co za službu platíte, závisí na době trvání relace, což znamená čas, kdy je pro vás server vyhrazený, a požadované hardwarové funkce ( přidělená velikost). Pokud relaci spustíte, připojíte se po dobu pěti minut a pak relaci nezastavíte, aby se pořád spouštěla, dokud nevyprší její zapůjčení, bude se vám účtovat doba zapůjčení celé relace. Naopak maximální doba zapůjčení je většinou bezpečnostní síť. Nezáleží na tom, jestli požádáte o relaci s dobou zapůjčení 8 hodin, pak ji používejte pouze po dobu pěti minut, pokud relaci následně ručně zastavíte.

Prodloužení doby zapůjčení relace

Dobu zapůjčení aktivní relace můžete prodloužit, pokud zjistíte, že ji potřebujete déle.

Příklad kódu

Následující kód ukazuje jednoduchou implementaci spuštění relace, čekání na připravený stav, připojení a následné odpojení a opětovné vypnutí.

RemoteRenderingInitialization init = new RemoteRenderingInitialization();
// fill out RemoteRenderingInitialization parameters...

RemoteManagerStatic.StartupRemoteRendering(init);

SessionConfiguration sessionConfig = new SessionConfiguration();
// fill out sessionConfig details...

RemoteRenderingClient client = new RemoteRenderingClient(sessionConfig);

RenderingSessionCreationOptions rendererOptions = new RenderingSessionCreationOptions();
// fill out rendererOptions...

CreateRenderingSessionResult result = await client.CreateNewRenderingSessionAsync(rendererOptions);

RenderingSession session = result.Session;
RenderingSessionProperties sessionProperties;
while (true)
{
    var propertiesResult = await session.GetPropertiesAsync();
    sessionProperties = propertiesResult.SessionProperties;
    if (sessionProperties.Status != RenderingSessionStatus.Starting &&
        sessionProperties.Status != RenderingSessionStatus.Unknown)
    {
        break;
    }
    // REST calls must not be issued too frequently, otherwise the server returns failure code 429 ("too many requests"). So we insert the recommended delay of 10s
    await Task.Delay(TimeSpan.FromSeconds(10));
}

if (sessionProperties.Status != RenderingSessionStatus.Ready)
{
    // Do some error handling and either terminate or retry.
}

// Connect to server
ConnectionStatus connectStatus = await session.ConnectAsync(new RendererInitOptions());

// Connected!

while (...)
{
    // per frame update

    session.Connection.Update();
}

// Disconnect
session.Disconnect();

// stop the session
await session.StopAsync();

// shut down the remote rendering SDK
RemoteManagerStatic.ShutdownRemoteRendering();

RenderingSession Z RemoteRenderingClient kódu je možné udržovat více instancí, manipulovat s nimi a dotazovat se na to. K jednomu zařízení se ale může současně připojit RenderingSession jenom jedno zařízení.

Životnost virtuálního počítače není svázaná s RemoteRenderingClient instancí ani s RenderingSession instancí. RenderingSession.StopAsync aby se zastavila relace, musí být volána.

ID trvalé relace se dá dotazovat místně a RenderingSession.SessionUuid() ukládat do mezipaměti. Pomocí tohoto ID může aplikace volat RemoteRenderingClient.OpenRenderingSessionAsync vazbu k této relaci.

Pokud RenderingSession.IsConnected je true, RenderingSession.Connection vrátí instanci RenderingConnection, která obsahuje funkce pro načtení modelů, manipulaci s entitami a dotazování informace o vykreslené scéně.

Dokumentace k rozhraní API

Další kroky