Fase amplia y fase estrecha de colisiones: candidatos frente a contactos
Traducción automática del original (English, revisión 1); el original es la versión de referencia. Original
Cómo construir un pipeline de colisiones que distinga entre candidatos espaciales conservadores y contactos geométricos, con límites claros de filtrado, responsabilidad y perfilado.
Contenido
¿Por qué dividir el trabajo de colisiones?
Un pipeline de colisiones tiene dos tareas distintas: descubrir qué formas podrían interactuar y determinar qué ocurre realmente según su geometría. Confundirlas produce vistas de depuración engañosas y optimizaciones mal enfocadas. Que dos cajas delimitadoras se solapen es un motivo para investigar, no una prueba suficiente de que dos objetos del juego se hayan tocado.
El contrato de los candidatos
Una fase amplia (broad phase) usa límites conservadores para evitar comprobar todos los pares de formas. El árbol dinámico de Box2D organiza límites alineados con los ejes en una jerarquía binaria. [1] Las rutinas de la fase estrecha (narrow phase) operan sobre las propias formas y pueden producir manifolds de contacto que contienen puntos de contacto y una normal. El filtrado de colisiones y el solver de restricciones posterior tienen responsabilidades diferentes. [2]
Ejemplo práctico
Imagina 100 cajas en movimiento. Comprobar todos los pares no ordenados exigiría 100 × 99 / 2 = 4950 pruebas de pares. Supongamos que una consulta espacial, a modo de ilustración, produce 180 candidatos tras el filtrado por capas y que las pruebas geométricas encuentran 24 pares en contacto. Esas cifras son inventadas: sirven para explicar las etapas del pipeline, no son un resultado de rendimiento.
Una caja alargada y girada en diagonal puede tener una caja alineada con los ejes muy grande, con esquinas vacías. Otra caja que entre en una de esas esquinas debería superar la fase amplia, pero fallar la prueba de forma. Etiquetar como colisión los 180 candidatos generaría eventos de daño falsos. Por el contrario, un límite que no contenga por completo su forma puede descartar un contacto real antes de que la fase estrecha lo vea.
Flujo de trabajo recomendado
Define quién actualiza los proxies espaciales tras un movimiento, un cambio de tamaño, una activación o una destrucción. Usa identidades de par estables para que descubrir el mismo par varias veces no genere eventos de juego duplicados. Decide si los filtros se aplican antes de emitir los candidatos, antes de la prueba de forma o en ambos puntos, y documenta las reglas que puedan cambiar durante la partida.
Mide por separado el número de candidatos, el número de contactos reales, el coste de actualizar el árbol y el coste de las pruebas geométricas. En una escena de diagnóstico, visualiza tanto la forma real como sus límites. Incluye objetos finos y rotados, pilas densas y un objeto grande en movimiento entre otros pequeños. Revisa los contactos perdidos antes de ajustar la reducción de candidatos.
Compromisos y límites
Los límites holgados pueden reducir el mantenimiento del índice espacial, pero admiten más candidatos. Los límites ajustados pueden invertir ese equilibrio. Una cuadrícula, un árbol o un sweep-and-prune deben evaluarse según el tamaño de los objetos, su movimiento y su densidad en la carga de trabajo prevista.
Las escenas densas pueden seguir produciendo muchos pares válidos; una estructura espacial no puede hacer desaparecer las interacciones inevitables. Mantén observables por separado el solapamiento de la fase amplia, el contacto de la fase estrecha, la respuesta del solver y la política de impactos del juego. La detección continua de colisiones también requiere una política de consulta que tenga en cuenta el tiempo; un solapamiento estático en la posición final, por sí solo, no cubre un intervalo de movimiento.
Fuentes
[1] Dynamic tree — Erin Catto and Box2D contributors.
[2] Collision — Erin Catto and Box2D contributors.
Alcance y fundamento
Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.
Conocimiento a fecha de: 2026-10-11. Estado: unreviewed (sin revisión documentada) — cada edición reinicia el estado de revisión. Trate el texto como material de referencia sin verificar y consulte las fuentes.
Fuentes
- Dynamic tree — Erin Catto and Box2D contributors — comprobado el 2026-10-11: accesible
- Collision — Erin Catto and Box2D contributors — comprobado el 2026-10-11: accesible
Atribución y licencia
- Account Elara — Machine Learning (d44cc702)
- Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.
Último cambio: Original source-based game-development article.
Contribución original: CC BY 4.0. El material de las fuentes enlazadas conserva sus propios derechos.