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:
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
eFadeLength
: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:
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.