Uma parede deve ser criada como um avião ou uma caixa?

22

Quais são os benefícios de uma parede ser um avião ou uma caixa? Devo usar um avião com um colisor de caixa em vez de um colisor de malha?

Pichi Wuana
fonte

Respostas:

15

Haverá algumas coisas diferentes que você precisará considerar.

Nota: que os benefícios das otimizações descritas abaixo realmente importam com uma tonelada de paredes. Nesse ponto, pode ser prudente considerar uma solução diferente, como o BSP (binary space particitioning), para criar paredes no seu jogo. Isso tornaria seus níveis altamente otimizados para renderização (se projetados corretamente) e para física (como você tem uma definição muito boa do que colide e do que não colide).

Renderização

Uma caixa vai demorar mais para renderizar do que um avião. Ele tem mais vértices e triângulos, o que significa que o shader de vértice e o rasterizador terão que ser executados sobre mais dados. Portanto, use apenas uma caixa quando precisar em termos de visibilidade. Remova os rostos conforme necessário para o que o jogador precisará ver.

Física

Você deve sempre usar a BoxColliderquando contrário MeshCollider. MeshColliders precisam aplicar colisões por face (ou como um casco convexo) da malha e tornar a transmissão de raios e a física mais lentas (mas é uma quantidade insignificante para apenas uma caixa). Outra coisa BoxCollidersé que é muito mais difícil para o jogador passar por eles quando está indo muito rápido. Mesmo com colisões contínuas, se você ainda está passando pelas paredes através das paredes, sempre pode expandirBoxColliders

Produtividade

Se você trabalha muito mais rápido com aviões MeshColliders(porque não precisa ajustar tudo BoxColliderspara corresponder às suas dimensões), pode ser bom usá-los apenas se você obtiver o desempenho que deseja.

Coburn
fonte
10

Expandindo um pouco "Coburn" é pontos :

Renderização : se você renderizar a parede como apenas um plano, ela será visível apenas de um lado, pois o plano (ou mais exatamente suas faces) terá apenas um lado renderizado. Portanto, se o jogador puder se mover pela parede, você precisará de vários aviões para cobrir todos os lados, o que significa que você acaba com uma caixa de qualquer maneira.

Física : os coletores de geometria simples (esferas, caixas etc.) são sempre mais rápidos de calcular em comparação aos coletores de malha completa, pois nem todas as faces da malha precisam ser verificadas individualmente. Em vez disso, podem ser usados ​​raycasts "simples" ou cálculos de distância (por exemplo, distância ao centro da esfera menos o tamanho da esfera).

Para outros mecanismos de física que possuem um "colisor de avião" separado (o que o Unity não possui), não existe um "melhor". Um avião pode ser um pouco mais rápido em termos de desempenho, mas você pode encontrar objetos rápidos passando por ele sem realmente colidir. Em seguida, você terá colisores mais grossos (então caixa em vez de avião) ou vá para a Detecção Contínua de Colisão (CCD), conforme explicado aqui .

Philip Allgaier
fonte
Você quase sempre pode desativar o backface.
Bálint
2
@ Bálint True. O usuário pode então ver a parede também do outro lado, embora com iluminação incorreta nesse caso (luz enviada pelas fontes do outro lado / sala, em vez da que ele / ela está).
Philip Allgaier
Em seu segundo ponto, você não especificou se é um profissional ou um trapaceiro e para quê. Um avião parece mais simples geometricamente do que uma caixa, então esse é o seu ponto?
Bakuriu 22/09/16
@Bakuriu Até onde eu sei, o Unity não tem um "colisor de avião", então "caixa" é a coisa mais próxima. Eu adicionei uma nota para outros mecanismos de física.
Philip Allgaier
4

Mais uma coisa sobre renderização: quando você tem sua própria implementação de mapeamento de sombra, as paredes feitas de caixas podem ser superiores às paredes feitas de planos devido ao pan-pan que pode aparecer com os planos.

Aqui está uma explicação do sintoma:

http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/#peter-panning

Djindjidj
fonte
O que é peter-panning?
Pichi Wuana 22/09/16
você seguiu o link que eu forneci? deve ser auto-explicativo.
Djindjidj
0

Sempre me disseram que se você tiver sombras, é melhor torná-las sólidas para ajudar com o sangramento leve, porque a diferença de profundidade é pequena e ela sangrará.

Eu posso estar errado, mas eu faço todas as minhas paredes e coisas assim dos dois lados, uma parede terá apenas alguns verts, então não seria uma grande economia ter um avião.

Há algumas coisas que deixo de lado, mas principalmente a parte inferior ou superior das coisas que tem muitas coisas ao seu redor para ajudar com o sangramento leve.

Eu faço o mesmo com a física, nem todos realmente pensaram nisso, mas para mim parecia certo usar uma parede como uma parede e um avião como um avião, mas esse sou apenas eu

Justin William Stanley Bryant
fonte