¿QUÉ ES GPU INSTANCING?

GPU Instancing es una técnica de optimización que Unity proporciona para pintar en pantalla múltiples copias del mismo mesh con poco impacto al rendimiento, y me refiero a muchísimas copias de un mismo objeto, esto sirve por ejemplo para optimizar grandes cantidades de pasto o árboles.

NOTA: Los ejemplos que veremos a continuación hablan del material estándar de Unity. 

Hacer esto es muy sencillo con los materiales que Unity nos proporciona por defecto, basta con activar la casilla "Enable GPU Instancing" en el inspector y ya está.


En este ejemplo, te muestro donde se encuentra la casilla que debes marcar (está en el material) y como el número de draw calls se reduce dramáticamente.


GPU Instancing activado



GPU Instancing desactivado


Aquí podemos comparar el número de Draw Calls entre tener (o no) activo nuestro GPU Instancing.

Recuerda que entre más complejo sea el shader que está utilizando tu material, tendrás más llamadas en tus SetPass/Draw calls. 

EJEMPLO
1 MESH + 1 MATERIAL QUE SOLO EMITE 1 COLOR = 1 DRAWCALL & 1 SET PASS CALL

Es importante tener en cuenta esto ya que puede llegar a ser muy costoso para el rendimiento del juego, los limites se verán marcados por la plataforma destino a la cual va dirigida tu juego o aplicación. Es difícil tener total control sobre esto y por esta razón existen las opciones de calidad gráfica en los videojuegos.


EJEMPLO CON MATERIAL UNLIT + GPU INSTANCING ACTIVO


Con un material mucho más simple (en este caso solo emite color), la demanda de recursos es mucho menos exigente.



REQUISITOS

Hay limitaciones muy claras para que esto funcione, y es que no toda la geometría y materiales pueden ser agrupados de la misma manera, GPU Instancing solo funcionara con los objetos que cumplan las siguientes condiciones:
  • Los objetos deben utilizar el mismo mesh.
  • Los objetos deben compartir el mismo material

NOTAS: 
  • Los objetos con GPU instancing, aunque deban utilizar el mismo mesh, pueden tener distinta escala, rotación y posición. 
  • Existen métodos para que los objetos con gpu instancing activado tengan diferentes propiedades (texturas, color, etc), trataremos esto en otro artículo.
  • Unity solo muestra la opción de GPU Instancing si el material en concreto lo permite, si necesitas un material con cualidades especiales tu puedes programar tu propio shader y hacerlo funcionar con GPU instancing.
  • Si estás haciendo 'batching', unity prioriza el 'static batching' sobre el 'gpu instancing', por lo que si tienes uno de estos objetos marcados como 'static', Unity eliminará el 'gpu instancing' al momento de hacer el batch.  Unity te mostrara un mensaje de alerta en la consola aconsejándote desactivar el modo 'static' de esos objetos.
  • GPU Instancing soporta iluminación global con LightProbes.

RECOMENDACIONES

Puedes combinar la famosa técnica de atlas de texturas con GPU Instancing, simplemente usa tu atlas de texturas en un material y asígnalo a los meshes correspondientes, tendrás algunos draw calls más, eso es inevitable (ya que algunos meshes serán diferentes en orden de pintar el espacio UV correspondiente), pero aún así será bastante óptimo. 



El mesh es distinto (ya que sus coordenadas UV son diferentes), sin embargo, GPU instancing agrupa de igual manera los nuevos objetos que son copias identicas, manteniendo un número de drawcalls bastante óptimo, y por supuesto, están utilizando el mismo material.

EJEMPLO DE COORDENADAS UV COMPARTIENDO LA MISMA TEXTURA


De esta manera, puedes crear cientos de instancias del mismo objeto con un mismo material con un impacto a tu rendimiento realmente bajo, ten en cuenta que esto no hará que puedas correr millones de polígonos en escena como si fuera magia, dependerá de la capacidad del dispositivo, de la cantidad de triángulos que posean tus objetos, de lo pesado que sea el material en cuestión y resolución de pantalla. Sin embargo, aquí tienes una excelente técnica que te permitirá optimizar tu juego o aplicación y ahora podrás crear un campo lleno de pasto como en esos videojuegos que te encantan. 



Para cualquier duda o aclaración, házmelo saber en los comentarios o ponte en contacto directo conmigo aquí. De igual manera, si deseas contribuir a la página puedes hacerlo mediante mi cuenta en Ko-fi:


Comentarios