¿Debería crearse un muro como plano o como caja?

22

¿Cuáles son los beneficios de que una pared sea un avión o una caja? ¿Debo usar un avión con un colisionador de caja en lugar de un colisionador de malla?

Pichi Wuana
fuente

Respuestas:

15

Habrá un par de cosas diferentes que deberá considerar.

Nota: los beneficios de las optimizaciones que se describen a continuación solo importan realmente con una tonelada de paredes. En ese punto, sería aconsejable considerar una solución diferente, como la partición de espacio binario (BSP) para hacer sus paredes en su juego. Esto haría que sus niveles estén altamente optimizados para el renderizado (si está diseñado correctamente) y para la física (ya que tiene una muy buena definición de qué colisiona y qué no).

Representación

Una caja tardará más en renderizarse que un avión. Tiene más vértices y triángulos, lo que significa que el sombreador de vértices y el rasterizador tendrán que ejecutarse sobre más datos. Por lo tanto, solo use un cuadro cuando lo necesite en términos de visibilidad. Elimina las caras según sea necesario para lo que el jugador necesitará ver.

Física

Siempre debe usar un BoxCollideropuesto a un MeshCollidercuando pueda. MeshColliders tiene que aplicar colisiones por cara (o como un casco convexo) de la malla y hacer que la emisión de rayos y la física sean más lentas (pero es una cantidad insignificante para una sola caja). Otra cosa BoxColliderses que es mucho más difícil para el jugador atravesarlos cuando van muy rápido. Incluso con colisiones continuas, si todavía tiene cosas que atraviesan las paredes, siempre puede expandir elBoxColliders

Productividad

Si es mucho más rápido trabajar con planos MeshColliders(porque no necesita ajustar todo BoxColliderspara que coincida con sus dimensiones), puede estar bien usarlos si obtiene el rendimiento que desea.

Coburn
fuente
10

Ampliando un poco los puntos de "Coburn" :

Renderizado : si renderiza el muro solo como un plano, entonces el muro solo será visible desde un lado, ya que el plano (o más exactamente sus caras) solo tiene un lado renderizado. Entonces, si el jugador puede moverse alrededor de la pared, necesitaría varios planos para cubrir todos los lados, lo que significa que terminará con una caja de todos modos.

Física : los colisionadores de geometría simple (esferas, cajas, etc.) siempre son más rápidos de calcular en comparación con los colisionadores de malla completa, ya que no todas las caras de la malla deben verificarse individualmente. En cambio, se pueden usar rayos "simples" o cálculos de distancia (por ejemplo, distancia al centro de la esfera menos el tamaño de la esfera).

Para otros motores de física que tienen un "colisionador de avión" separado (que Unity no tiene), no hay uno "mejor". Un avión puede ser un poco más rápido en cuanto al rendimiento, pero luego puede encontrarse con el problema de los objetos rápidos que lo atraviesan sin chocar realmente. Luego se queda con colisionadores más gruesos (por lo tanto, caja en lugar de plano) o pasar a Detección de colisión continua (CCD), como se explica aquí .

Philip Allgaier
fuente
Casi siempre puede desactivar la eliminación de la cara posterior.
Bálint
2
@ Bálint True. Luego, el usuario puede ver la pared también desde el otro lado, aunque con una iluminación incorrecta en ese caso (luz enviada por las fuentes desde el otro lado / habitación, en lugar de la que está parada).
Philip Allgaier
En su segundo punto, en realidad no especificó si es un profesional o un estafador y para qué. Un plano parece geométricamente más simple que una caja, entonces, ¿ese es tu punto?
Bakuriu
@Bakuriu Hasta donde yo sé, Unity no tiene un "colisionador de avión", por lo que "caja" es lo más cercano. Agregué una nota para otros motores de física.
Philip Allgaier
4

Una cosa más sobre el renderizado: cuando tiene su propia implementación de mapeo de sombras, los muros hechos de cajas pueden ser superiores a los muros hechos de planos debido al peter-panning que puede aparecer con planos.

Aquí hay una explicación del síntoma:

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

Djindjidj
fuente
¿Qué es el peter-panning?
Pichi Wuana
¿siguió el enlace que le proporcioné? debe explicarse por sí mismo.
Djindjidj
0

Siempre me dijeron que si vas a tener sombras, es mejor hacerlo sólido para ayudar con el sangrado leve porque la diferencia de profundidad es muy pequeña y sangrará.

Podría estar equivocado, pero hago todas mis paredes y cosas como esas de dos lados, una pared solo tendrá unos pocos vértices, por lo que no debería ser un gran ahorro tener un avión.

Hay algunas cosas que dejo a los lados, pero es principalmente la parte inferior o superior de las cosas que tienen muchas cosas a su alrededor para ayudar con el sangrado leve.

Hago lo mismo para la física, no todos pensé realmente en eso, pero me pareció correcto usar una pared como una pared y un avión como avión, pero eso soy solo yo

Justin William Stanley Bryant
fuente