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
- Propriedade C# RenderingConnection. SingleSidedSettings em C#
- RenderingConnection::SingleSidedSettings() em C++