Single-sided Renderização
A maioria dos renderizadores usa o abate de back-face para melhorar o desempenho. No entanto, quando as malhas são cortadas com planos cortados, os usuários muitas vezes olham para o lado de trás dos triângulos. Se esses triângulos forem eliminados, o resultado não parece convincente.
A maneira de evitar esse problema de forma confiável é renderizar triângulos de dupla face. Como não usar o abate de back-face tem implicações de desempenho, por padrão, a Renderização Remota do Azure só alterna para renderização de dupla face para malhas que estão se cruzando com um plano de corte.
A single-sided configuração de renderização permite personalizar esse comportamento.
Atenção
A single-sided configuração de renderização é um recurso experimental. Ele pode ser removido novamente no futuro. Não altere a configuração padrão, a menos que ela realmente resolva um problema crítico em seu aplicativo.
Pré-requisitos
A single-sided configuração de renderização só tem um efeito para malhas que foram convertidas com a opaqueMaterialDefaultSidedness
opção definida como SingleSided
. Por padrão, essa opção é definida como DoubleSided
.
Single-sided configuração de renderização
Existem três modos diferentes:
Normal: Neste modo, as malhas são sempre renderizadas à medida que são convertidas. Isso significa que malhas convertidas com set to SingleSided
sempre serão renderizadas com opaqueMaterialDefaultSidedness
o abate de back-face habilitado, mesmo quando cruzam um plano cortado.
DynamicDoubleSiding: Neste modo, quando um plano de corte cruza uma malha, ele é automaticamente alternado para renderização de dupla face. Este modo é o modo padrão.
AlwaysDoubleSided: Força toda a geometria de um lado a ser processada de dupla face em todos os momentos. Esse modo é exposto principalmente para que você possa comparar facilmente o impacto no desempenho entre single-sided e double-sided renderização.
A alteração das configurações de renderização pode ser feita da single-sided 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
- C# RenderingConnection.SingleSidedSettings propriedade
- C++ RenderingConnection::SingleSidedSettings()