Compartilhar via


renderização Single-sided

A maioria dos renderizadores usa rejeição trivial para melhorar o desempenho. No entanto, quando as malhas estão cortadas abertas com planos de corte, os usuários costumam examinar o verso dos triângulos. Se esses triângulos forem descartados, o resultado não parecerá convincente.

A maneira de evitar esse problema de modo confiável é renderizar triângulos em dois lados. Não usar a rejeição trivial tem implicações de desempenho, por isso, o Azure Remote Rendering muda para renderização em dois lados, por padrão, apenas no caso de malhas que fazem interseção com um plano de recorte.

A configuração de single-sidedrenderização permite que você personalize esse comportamento.

Cuidado

A configuração de renderização single-sided é um recurso experimental. Ele pode ser removido novamente no futuro. Não mude a configuração padrão, a menos que ela realmente resolva um problema crítico em seu aplicativo.

Pré-requisitos

A configuração de renderização single-sided tem efeito apenas em malhas que foram convertidas com a opção opaqueMaterialDefaultSidedness definida como SingleSided. Por padrão, essa opção fica definida como DoubleSided.

Configuração de renderização Single-sided

Há três modos diferentes:

Normal: Neste modo, as malhas são sempre renderizadas à medida que são convertidas. Isso significa que as malhas convertidas com opaqueMaterialDefaultSidedness definido como SingleSided sempre serão renderizadas com a rejeição trivial habilitada, mesmo quando elas fazem intersecção com um plano de corte.

DynamicDoubleSiding: Neste modo, quando um plano de corte cruza uma malha, ele é automaticamente alternado para renderização de dupla face. Esse modo é o padrão.

AlwaysDoubleSided: Força toda a geometria de face única a ser renderizada frente e verso o tempo todo. Esse modo é mais exposto para que você possa comparar facilmente o impacto no desempenho entre a renderização single-sided e a double-sided.

A alteração das configurações de renderização single-sided pode ser feita da seguinte maneira:

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);
}

Documentação da API

Próximas etapas