Introducción – ¿Qué es Occlusion Culling en Unity?
El motor Unity tiene un sistema llamado «Occlusion Culling» que permite ocultar automáticamente objetos que la cámara no está viendo de manera directa, un nombre en español para este sistema es «eliminación selectiva».
En este artículo vamos a ver cómo preparar un proyecto en Unity para que se aplique Occlusion Culling, algunos detalles sobre su funcionamiento y parámetros de configuración.
Detalle Importante – En Occlusion Culling se hacen precálculos (BAKE)
Occlusion Culling funciona con los objetos que están marcados como «estáticos» en la escena y es necesario precalcular todos los datos, lo que se conocer como hacer un «bake», esto implica que cada vez que introduzcas un nuevo objeto que deba ser apagado si la cámara no lo está viendo, o si cambias la posición de uno de estos objetos, deberás precalcular nuevamente los datos para Occlusion Culling, si no lo haces algunos objetos que están detrás de cámara o detrás de algún objeto podrían no desaparecer o incluso peor, podrías tener objetos que desaparecen frente a la cámara cuando deberían permanecer visibles.
Dónde se encuentra la ventana de configuración de Occlusion Culling en Unity
La vetana de configuración de Occlusion Culling se encuentra en Window > Rendering > Occlusion Culling, en mi caso suelo colocarla junto al inspector para más comodidad, como se observa en la imagen 2.
Cómo agregar objetos al sistema de Occlusion Culling
Para que un objeto pertenezca a los cálculos de Occlusion Culling y por ende desaparezca cuando la cámara no lo está viendo, hay que marcar cada objeto que el parámetro «Estático» en el inspector, como se observa en la imagen 3. En general los objetos importantes para marcar como estáticos son aquellos que tienen asignado algún tipo de Renderer, como un Mesh Renderer o un Sprite Renderer, ya que estos objetos son los que tienen una representación visual en pantalla.
IMPORTANTE: Los objetos que formen parte del sistema Occlusion Culling no deben cambiar de posición en ningún momento y de hacerlo es necesario volver a calcular los datos como veremos más adelante.
Cómo aplicar Occlusion Culling en Unity
Una vez que el paso previo de marcar todos los objetos estáticos vamos a hacer un «Bake» de la información para aplicar Occlusion Culling, para esto vamos a la ventana «Occlusion» que se observa en la imagen 4, en caso de no ver la ventana consultar más arriba en este artículo.
En principio en esta ventana vamos a configurar dos parámetros, «Smallest Occluder» y «Smallest Hole», el primer parámetro hace referencia al objeto más pequeño de la escena (en unidades de la escena) que podrá obstruir la cámara y hacer que todo lo que está por detrás no se renderice, cuanto más pequeño sea este parámetro más tiempo tomarán los cálculos por lo que habrá que hacer algunas pruebas para determinar un valor apropiado, en principio se pueden considerar los valores de la imagen 4.
PARA APLICAR LOS CÁLCULOS DE OCCLUSION CULLING EN UNITY HACEMOS CLIC EN EL BOTÓN BAKE A LA DERECHA DEL BOTÓN CLEAR.
El parámetro «Smallest Hole» se usa en caso de tener espacios abiertos en un modelo 3D, consideremos el ejemplo que se ilustra en la imagen 5-A, en el cual se ha aplicado Occlusion Culling con los parámetros de la imagen 4.
Como vemos en la imagen 5-B la cámara puede ver a través del agujero, sin embargo el cubo que está seleccionado en la imagen 5-A no es visible, esto se debe a que el sistema de Occlusion Culling está considerando que ese cubo debería estar oculto, ya que el agujero más pequeño está configurado en un tamaño de 0.5 unidades de Unity (imagen 4), mientras que el agujero de la imagen 5-B tiene un ancho de 0.1 por 0.1 unidades de Unity.
Modificando un poco los parámetros teniendo en cuenta estos modelos en particular y el hecho de que deberíamos ser capaces de ver objetos a través de ese agujero, hacemos un nuevo Bake con los parámetros de la imagen 6 y como se observa en la imagen 7 ahora el sistema de Occlusion Culling no oculta ese objeto porque la cámara podría verlo a través de ese agujero.