Partilhar via


Cortar planos

Um plano de corte é um recurso visual que corta pixels em um lado de um plano virtual, revelando o interior de malhas. A imagem abaixo demonstra o efeito. A esquerda mostra a malha original, à direita pode-se olhar para dentro da malha:

Cut plane

CutPlaneComponent

Você adiciona um plano de corte à cena criando um CutPlaneComponent. A localização e orientação do plano é determinada pela entidade proprietária do componente.

void CreateCutPlane(RenderingSession session, Entity ownerEntity)
{
    CutPlaneComponent cutPlane = (CutPlaneComponent)session.Connection.CreateComponent(ObjectType.CutPlaneComponent, ownerEntity);
    cutPlane.Normal = Axis.X; // normal points along the positive x-axis of the owner object's orientation
    cutPlane.FadeColor = new Color4Ub(255, 0, 0, 128); // fade to 50% red
    cutPlane.FadeLength = 0.05f; // gradient width: 5cm
}
void CreateCutPlane(ApiHandle<RenderingSession> session, ApiHandle<Entity> ownerEntity)
{
    ApiHandle<CutPlaneComponent> cutPlane = session->Connection()->CreateComponent(ObjectType::CutPlaneComponent, ownerEntity)->as<CutPlaneComponent>();;
    cutPlane->SetNormal(Axis::X); // normal points along the positive x-axis of the owner object's orientation
    Color4Ub fadeColor;
    fadeColor.channels = { 255, 0, 0, 128 }; // fade to 50% red
    cutPlane->SetFadeColor(fadeColor);
    cutPlane->SetFadeLength(0.05f); // gradient width: 5cm
}

Propriedades CutPlaneComponent

As seguintes propriedades são expostas em um componente de plano de corte:

  • Enabled: Você pode desligar temporariamente os planos cortados desativando o componente. Os planos de corte desativados não incorrem em sobrecarga de renderização e também não contam para o limite global de planos de corte.

  • Normal: Especifica qual direção (+X,-X,+Y,-Y,+Z,-Z) é usada como o plano normal. Esta direção é relativa à orientação da entidade proprietária. Mova e gire a entidade proprietária para o posicionamento exato.

  • FadeColor e FadeLength:

    Se o valor alfa de FadeColor for diferente de zero, os pixels próximos ao plano de corte desaparecerão em direção à parte RGB de FadeColor . A força do canal alfa determina se ele irá desaparecer totalmente em direção à cor de desvanecimento ou apenas parcialmente. FadeLength define a que distância esse fade ocorrerá.

  • ObjectFilterMask: Uma máscara de bits de filtro que determina qual geometria é afetada pelo plano de corte. Consulte o parágrafo seguinte para obter informações detalhadas.

Planos de corte seletivo

É possível configurar planos de corte individuais para que afetem apenas a geometria específica. A imagem a seguir ilustra como essa configuração pode parecer na prática:

Selective cut planes

A filtragem funciona através da comparação lógica de máscara de bits entre uma máscara de bits no lado do plano de corte e uma segunda máscara de bits definida na geometria. Se o resultado de uma operação lógica AND entre as máscaras não for zero, o plano de corte afetará a geometria.

  • A máscara de bits no componente de plano de corte é definida por meio de sua ObjectFilterMask propriedade
  • A máscara de bits em uma subhierarquia de geometria é definida por meio do HierarchicalStateOverrideComponent

Exemplos:

Máscara de filtro de plano cortado Máscara de filtro de geometria Resultado da lógica AND Plano de corte afeta a geometria?
(0000 0001) == 1 (0000 0001) == 1 (0000 0001) == 1 Sim
(1111 0000) == 240 (0001 0001) == 17 (0001 0000) == 16 Sim
(0000 0001) == 1 (0000 0010) == 2 (0000 0000) == 0 Não
(0000 0011) == 3 (0000 1000) == 8 (0000 0000) == 0 Não

Gorjeta

Definir um plano ObjectFilterMask de corte como 0 significa que ele não afetará nenhuma geometria porque o resultado do lógico AND nunca pode ser não-nulo. O sistema de renderização não considerará esses planos em primeiro lugar, portanto, este é um método leve para desativar planos de corte individuais. Estes aviões cortados também não contam para o limite de 8 aviões ativos.

Limitações

  • A Renderização Remota do Azure dá suporte a um máximo de oito planos de corte ativos. Você pode criar mais componentes de plano de corte, mas se você tentar ativar mais simultaneamente, ele ignorará a ativação. Desative outros planos primeiro se quiser alternar quais componentes devem afetar a cena.
  • Os planos de corte são uma característica puramente visual, eles não afetam o resultado de consultas espaciais. Se você quiser lançar o raio em uma malha cortada, você pode ajustar o ponto inicial do raio para estar no plano de corte. Desta forma, o raio só pode atingir partes visíveis.

Considerações de desempenho

Cada plano de corte ativo incorre em um pequeno custo durante a renderização. Desative ou exclua planos cortados quando eles não forem necessários.

Documentação da API

Próximos passos