Udostępnij za pośrednictwem


Single-sided Renderowania

Większość modułów renderujących używa funkcji uścisku twarzy zaplecza w celu zwiększenia wydajności. Jednak gdy siatki są wycinane z płaszczyzn cięcia, użytkownicy często patrzą na tylnej stronie trójkątów. Jeśli te trójkąty są uściśnięte, wynik nie wygląda przekonująco.

Sposobem niezawodnego zapobiegania temu problemowi jest renderowanie trójkątów z podwójną stroną. Ponieważ nieużywanie z tyłu twarzy ma wpływ na wydajność, domyślnie usługa Azure Remote Rendering przełącza się tylko na renderowanie dwustronne dla siatk, które przecinają się z płaszczyzną wycinania.

Ustawienie renderowania single-sided umożliwia dostosowanie tego zachowania.

Uwaga

Ustawienie renderowania single-sided jest funkcją eksperymentalną. Może zostać ponownie usunięty w przyszłości. Nie zmieniaj ustawienia domyślnego, chyba że naprawdę rozwiąże krytyczny problem w aplikacji.

Wymagania wstępne

Ustawienie renderowania single-sided ma wpływ tylko na siatki, które zostały przekonwertowane z opcją ustawioną opaqueMaterialDefaultSidedness na SingleSidedwartość . Domyślnie ta opcja jest ustawiona na DoubleSidedwartość .

Single-sided ustawienie renderowania

Istnieją trzy różne tryby:

Normalny: w tym trybie siatki są zawsze renderowane w miarę ich konwersji. Oznacza to, że siatki przekonwertowane z opaqueMaterialDefaultSidedness zestawem SingleSided na zawsze będą renderowane z włączonym ubojem z tyłu twarzy, nawet gdy przecinają płaszczyznę wycięcia.

DynamicDoubleSiding: w tym trybie, gdy płaszczyzna wycinania przecina siatkę, jest automatycznie przełączana na renderowanie dwustronne. Ten tryb jest trybem domyślnym.

AlwaysDoubleSided: Wymusza renderowanie całej geometrii jednostronnej przez cały czas. Ten tryb jest głównie uwidoczniony, dzięki czemu można łatwo porównać wpływ wydajności między single-sided i double-sided renderowania.

Zmianę ustawień renderowania single-sided można wykonać w następujący sposób:

void ChangeSingleSidedRendering(RenderingSession session)
{
    SingleSidedSettings settings = session.Connection.SingleSidedSettings;

    // Single-sided geometry is rendered as is
    settings.Mode = SingleSidedMode.Normal;

    // Single-sided geometry is always rendered double-sided
    settings.Mode = SingleSidedMode.AlwaysDoubleSided;
}
void ChangeSingleSidedRendering(ApiHandle<RenderingSession> session)
{
    ApiHandle<SingleSidedSettings> settings = session->Connection()->GetSingleSidedSettings();

    // Single-sided geometry is rendered as is
    settings->SetMode(SingleSidedMode::Normal);

    // Single-sided geometry is always rendered double-sided
    settings->SetMode(SingleSidedMode::AlwaysDoubleSided);
}

Dokumentacja interfejsu API

Następne kroki