2012-01-26 8 views
7

Desde los juegos más antiguos hasta los más modernos, parece que aún se puede ver a través de las paredes o, con mayor frecuencia, del suelo en algunas posiciones de la cámara. ¿Por qué la colisión es difícil de calcular de manera efectiva en los motores gráficos? ¿Se está acumulando/perdiendo precisión acumulando una vista errónea?¿Por qué la colisión es difícil de calcular de manera efectiva en los motores gráficos?

+6

"ve a través de las paredes o, con mayor frecuencia, el suelo en algunas posiciones de la cámara". no es un problema de colisión es un problema de recorte; simplemente no filtró correctamente las cosas que no debería poder ver desde esa ubicación desde la escena renderizada. –

+0

¿Estás preguntando sobre el parpadeo de algunas partes de la "pared" en la imagen o sobre el posicionamiento de la cámara dentro de la pared ...? – Sorceror

Respuesta

2

Esto no es realmente colisión en el sentido explícito. La posición de la cámara probablemente no está realmente "adentro" de la pared o el suelo en esas situaciones, pero está simplemente muy cerca de ella.

En infografía 3D La cámara tiene un concepto de un avión cerca de y un plano muy. Solo la geometría ubicada entre estos dos planos será visible, mientras que el resto será recortado. Si está demasiado cerca de algo y alinea la cámara correctamente, es probable que algunas partes de la geometría estén demasiado cerca de la cámara como lo define el plano cercano y, como resultado, no se renderizará la geometría.

Ahora, la distancia a este plano cercano puede ser establecida por los desarrolladores, y puede configurarse para ser muy corta, lo suficientemente corta como para garantizar que situaciones como estas no puedan ocurrir. Sin embargo, el buffer de profundidad o z buffer que se utiliza para determinar qué objetos están más cerca de la cámara durante el renderizado y qué objetos renderizar y cuáles no procesar, está estrechamente relacionado con las distancias del plano cercano y lejano.

En hardware de gráficos, el búfer de profundidad se representa utilizando una cantidad fija de bits para cada píxel, por ejemplo 32 bits. Estos 32 bits deben ser suficientes para representar con exactitud toda la extensión entre el plano cercano y el plano lejano. Tampoco es lineal, pero usará más precisión cerca de la cámara. Como resultado, la elección de una distancia muy pequeña cerca del plano reducirá en gran medida la precisión global de la memoria intermedia de profundidad. Esto puede provocar un parpadeo molesto en toda la escena, dondequiera que dos objetos estén muy cerca el uno del otro.

Puede leer más sobre este tema here y section 12.040 here.

+1

Rezo todos los días para que todas las tarjetas gráficas tengan una precisión de búfer z de 32 bits :-D .. Muchas de ellas solo admiten 24 bits o menos (como todas esas "antiguas" tarjetas gráficas integradas de Intel). – Sorceror

1

No se trata de dificultad (por supuesto, no es fácil calcular la colisión/recorte de objetos no convexos), pero todavía tiene solo unos ~ 33ms para calcular el fotograma completo, por lo que debe hacerse algún compromiso (malla de colisión no es lo mismo que la malla que realmente ves). Si no hay tiempo para una solución precisa (para cumplir con todas las condiciones (distancia de la cámara, objeto que debe verse, evitar colisiones), debe recurrir a una solución "fácil" como ver a través de la pared.

Cuestiones relacionadas