Aprendiendo a usar mascaras de colisión – UPBGE/BGE
Si eres un desarrollador de juegos con UPBGE o BGE, quizás te hayas enfrentado a varios problemas de rendimiento en algun punto de desarrollo de tu proyecto, siendo mas especificos posiblemente el mayor problema o el que menos se maneja adecuadamente cuando se es un poco inexperto en el tema, es el manejo de las fisicas del juego (physics simulations, particle systems, ragdoll physics, etc), lo cual incluye cualquier simulación fisica e interacción con objetos dentro del motor de juegos
A lo que me refiero con manejar las físicas de forma adecuada en nuestro proyecto de videojuego, es tener conocimiento de como interactuan los objetos entre sí, es decir (hablando únicamente de colisiones) determinar en cada caso, como establecer las colisiones de los objetos en la escena.
Y no es únicamente establecer que sí y que no colisiona, también es importante conocer que internamente el motor de físicas durante la ejecución denuestro juego, constantemente se está analizando todos los objetos para saber si está ocurriendo una colisión.
Un ejemplo sencillo es por ejemplo un nivel de juego donde tenemos dos niveles en un edificio (piso 1 y piso 2), aquí podemos separar por grupos de colisión cada uno de los objetos de la escena. Es decir, por ejemplo, las cajas de metal que estuvieran en el piso 1, dificilmente podrían colisionar con las cajas del piso 2, entonces aquí podemos establecer una mascara de colisión, para indicarle al motor de físicas, que aunque estos dos objetos estén muy cerca, no se deberán hacer cálculos de colisión, ya que como se mencionó anteriormente, estas se encuentran en áreas diferentes y jamás podrían colisionar entre si.
El en el caso descrito anteriormente, sería solo uno de tantos ejemplos para optimizar el uso del motor de físicas, ya que como te podrás imaginar casos de esos hay muchos y son precisamente ese tipo de situaciones las que pueden provocar que tu juego tenga un mal rendimiento por excesivo uso de recursos.
Ejercicio con mascaras de colisión
Comenzaremos con un ejercicio bastante básico, pero que nos ayudará a entender mejor el funcionamiento de esta útil herramienta del BGE/UPBGE
Primero que nada, yo en lo personal utilizo la version UPBGE 0.2.4b del motor de juegos de Blender, pero dejo a tu consideración cual versión usar.
Iniciaremos blender y utilizaremos el cubo que ya está por defecto en la escena. En el caso de UPBGE el escenario principal ya aparece con el cubo y un plano, por lo que utilizaremos esos elementos para hacer nuestro ejemplo.
Si usas otra versión, entonces procura dejar un escenario similar a este para hacer el ejercicio, tal como se muestra en la siguiente imagen:

Y despues de eso modificaremos los parámetros necesarios para que el cubo reaccione a las físicas del juego. Esto es: establecer el cubo como un cuerpo rígido, de esta forma reaccionará a la gravedad y colisionará con el piso (el plano) de la escena.
En el siguiente GIF animado puedes ver el procedimiento a realizar:

Bien, nuestro cubo es ahora un objeto rigido el cual se ve afectado por la fuerza de gravedad en el motor de fisicas. Ahora vamos a enfocarnos en una sección en particular, en el panel de físicas: “Collision Bounds”
En la parte marcada con un recuadro rojo podrás ver algo similar al manejador de layers de blender, y de cierta forma tiene una función similar, pero en este caso sirve para determinar que objetos pueden interactuar entre si.

La parte llamada “Collision Group” es donde determinaremos que objetos pertenecen a cierto grupo de colisión, por ejemplo tomaremos en cuenta para este ejercicio, que el grupo de colisión del primer layer (el que está activo en la imagen superior) es el grupo para el piso, el segundo será para el objeto Cube y el tercero será para el Cube.001.
Máscaras de colisión
Ahora vamos a duplicar el cubo y vamos a determinar los grupos de colisión para cada uno de ellos, al final probamos que las físicas funcionen correctamente presionando la tecla P para activar el motor de juegos, y presionando Esc para detenerlo.

Ahora vamos a establecer las máscaras de colisión para optimizar el funcionamiento de las físicas. En este ejercicio vamos a suponer que los dos cubos que tenemos en la escena por cuestiones del desarrollo del nivel/escenario nunca estarán en un mismo cuarto y por lo tanto no colisionarán, sin embargo el motor de fisicas estará constantemente calculando los objetos que tienen habilitados la colision, aunque no estén haciendo colisiones, por lo que mientras más objetos tengamos en escena obviamente los cálculos son mayores y el rendimiento sería menor.
Bien, teniendo en cuenta la descripción anterior vamos a hacer que los cubos puedan colisionar con el piso pero que no puedan colisionar entre ellos, y para lograr esto ahora dependiendo de cada objeto vamos a determinar que objeto puede colisionar con el otro por medio de la “Collision Mask”.
Máscaras de Colisión
En teoría vamos a determinar que:
- El plano puede colisionar con Cube y Cube.001.
- Cube puede colisionar con el plano.
- Cube.001 puede colisionar con el plano.
Ahora vamos a establecer esto con las máscaras de colisión, pero antes de eso vamos a recordar que objeto pertenece a cada grupo de colision.

Recuerda que cada objeto debe estar correctamente colocado dentro de su grupo de colisión para posteriormente establecer en la máscara de colisión cuales de ellos podran interactuar.
Ahora debemos establecer que máscara de colisión le corresponde a cada objeto. Recordemos que el mismo botón del grupo de colisión corresponde el mismo botón para el grupo de mascara de colisión, es decir por ejemplo, que el botón al que está asignado el plano (collision group, capa 1) es el mismo que está en la parte de mascara de colisión.
De está forma, para determinar que el plano colisionará con los dos cubos deberá estar de la siguiente forma:

Como podrás ver del grupo de colisión solamente esta activa la capa/layer del objeto que corresponde al plano/piso, y del grupo de mascara de colisión solamente tenemos los botones que corresponden a los dos cubos.
La razón por la cual no se selecciona el boton del plano en la parte de mascaras de colisión, es porque el plano no puede hacer colisión consigo mismo, entonces es irrelevante hacerlo.
Ahora toca el turno de hacer el mismo procedimiento con los cubos de la escena, y recuerda que los dos cubos no deben poder interactuar entre si, es decir, no deben poder colisionar excepto con el plano/piso, tal como se muestra en la siguiente imagen:

Y esto a grandes razgos es una descripcion básica de como usar las mascaras de colision en el motor de juegos de blender, espero haya sido de utilidad.
Si tienes alguna duda o si se me pasó un dato importante comentalo abajo