Udostępnij za pośrednictwem


Tryby renderowania

Usługa Remote Rendering oferuje dwa główne tryby działania, tryb TileBasedComposition i Tryb DepthBasedComposition . Te tryby określają sposób dystrybucji obciążenia na wielu procesorach GPU na serwerze. Tryb musi być określony w czasie połączenia i nie można go zmienić w czasie wykonywania.

Oba tryby mają zalety, ale także z nieodłącznymi ograniczeniami funkcji, dlatego wybór najbardziej odpowiedniego trybu jest specyficzny dla przypadku użycia.

Tryby

Dwa tryby zostały omówione bardziej szczegółowo.

Tryb "TileBasedComposition"

W trybie TileBasedComposition każdy zaangażowany procesor GPU renderuje określone podrektangle (kafelki) na ekranie. Główny procesor GPU komponuje końcowy obraz z kafelków, zanim zostanie wysłany jako ramka wideo do klienta. W związku z tym wszystkie jednostki GPU wymagają posiadania tego samego zestawu zasobów do renderowania, więc załadowane zasoby muszą mieścić się w pamięci pojedynczego procesora GPU.

Jakość renderowania w tym trybie jest nieco lepsza niż w trybie DepthBasedComposition , ponieważ usługa MSAA może pracować nad pełnym zestawem geometrii dla każdego procesora GPU. Poniższy zrzut ekranu pokazuje, że antyaliasing działa prawidłowo dla obu krawędzi, podobnie:

MSAA in TileBasedComposition

Ponadto w tym trybie każda część może zostać przełączona do przezroczystego materiału lub przełączona w tryb wyświetlania za pośrednictwem elementu HierarchicalStateOverrideComponent

Tryb "DepthBasedComposition"

W trybie DepthBasedComposition każdy zaangażowany procesor GPU renderuje się w rozdzielczości pełnoekranowej, ale tylko podzestaw siatk. Ostateczna kompozycja obrazu na głównym procesorze GPU dba o to, aby części zostały prawidłowo scalone zgodnie z ich szczegółowymi informacjami. Oczywiście ładunek pamięci jest dystrybuowany między procesory GPU, co pozwala na renderowanie modeli, które nie mieszczą się w pamięci pojedynczego procesora GPU.

Każdy pojedynczy procesor GPU używa usługi MSAA do ochrony zawartości lokalnej. Jednak może istnieć nieodłączny alias między krawędziami z różnych procesorów GPU. Ten efekt jest ograniczany przez przetwarzanie końcowego obrazu, ale jakość MSAA jest nadal gorsza niż w trybie TileBasedComposition .

Artefakty MSAA przedstawiono na poniższej ilustracji: MSAA in DepthBasedComposition

Antialiasing działa prawidłowo między rzeźbą a zasłoną, ponieważ obie części są renderowane na tym samym procesorze GPU. Z drugiej strony krawędź między kurtyną a ścianą pokazuje alias, ponieważ te dwie części składają się z różnych procesorów GPU.

Największym ograniczeniem tego trybu jest to, że części geometryczne nie mogą być przełączane na przezroczyste materiały dynamicznie ani tryb przejściowy dla elementu HierarchicalStateOverrideComponent. Inne funkcje zastępowania stanu (kontur, odcień koloru, ...) działają jednak. Również materiały oznaczone jako przezroczyste w czasie konwersji działają prawidłowo w tym trybie.

Wydajność

Cechy wydajności obu trybów różnią się w zależności od przypadku użycia i trudno jest uzasadnić lub przedstawić ogólne zalecenia. Jeśli ograniczenia nie są ograniczone przez ograniczenia wymienione powyżej (pamięć lub przezroczystość/przezroczystość/patrzenie), zaleca się wypróbowanie obu trybów i monitorowanie wydajności przy użyciu różnych pozycji aparatu.

Ustawianie trybu renderowania

Tryb renderowania używany na serwerze renderowania zdalnego jest określony podczas RenderingSession.ConnectAsync za pośrednictwem .RendererInitOptions

async void ExampleConnect(RenderingSession session)
{
    RendererInitOptions parameters = new RendererInitOptions();

    // Connect with one rendering mode
    parameters.RenderMode = ServiceRenderMode.TileBasedComposition;
    await session.ConnectAsync(parameters);

    session.Disconnect();

    // Wait until session.IsConnected == false

    // Reconnect with a different rendering mode
    parameters.RenderMode = ServiceRenderMode.DepthBasedComposition;
    await session.ConnectAsync(parameters);
}

Dokumentacja interfejsu API

Następne kroki