
Este es el tercero en una serie de artículos que desglosa consejos de optimización para tus proyectos de Unity. Úsalos como guía para ejecutar a tasas de fotogramas más altas con menos recursos. Una vez que hayas probado estas mejores prácticas, asegúrate de revisar las otras páginas de la serie:
Consulta nuestras últimas guías de optimización para desarrolladores y artistas de Unity 6:
Entender las limitaciones de tu hardware objetivo y cómo perfilar la GPU para optimizar el renderizado de tus gráficos. Prueba estos consejos y mejores prácticas para reducir la carga de trabajo en la GPU.
Al perfilar, es útil comenzar con un punto de referencia que te diga qué resultados de perfilado deberías esperar de GPUs específicas.
Consulta GFXBench para una gran lista de diferentes puntos de referencia estándar de la industria para GPUs y tarjetas gráficas. El sitio web proporciona una buena visión general de las GPUs actuales disponibles y cómo se comparan entre sí.
Ver las estadísticas de renderizado
Haz clic en el botón Estadísticas en la esquina superior derecha de la vista del juego. Esta ventana te muestra información de renderizado en tiempo real sobre tu aplicación durante el modo de juego. Usa estos datos para ayudar a optimizar el rendimiento:
- fps: Cuadros por segundo
- CPU Principal: Tiempo total para procesar un cuadro (y actualizar el Editor para todas las ventanas)
- CPU Renderizar: Tiempo total para renderizar un cuadro de la vista del Juego
- Lotes: Grupos de llamadas de dibujo que se dibujarán juntos
- Tris (triángulos) y Verts (vértices): Geometría de malla
- Llamadas SetPass: El número de veces que Unity debe cambiar los pases de shader para renderizar los GameObjects en pantalla; cada pase puede introducir una sobrecarga adicional en la CPU.
Nota: Los fps en el Editor no necesariamente se traducen en rendimiento de la compilación. Recomendamos que perfiles tu compilación para obtener los resultados más precisos. El tiempo de cuadro en milisegundos es una métrica más precisa que cuadros por segundo al hacer pruebas de rendimiento. Aprende más en el e-book Guía definitiva para perfilar juegos de Unity (edición Unity 6).

Para dibujar un GameObject, Unity emite una llamada de dibujo a la API gráfica (por ejemplo, OpenGL, Vulkan o Direct3D). Cada llamada de dibujo es intensiva en recursos. Los cambios de estado entre llamadas de dibujo, como cambiar materiales, pueden causar sobrecarga de rendimiento en el lado de la CPU.
El hardware de PC y consola puede manejar muchas llamadas de dibujo, pero el costo de cada llamada sigue siendo lo suficientemente alto como para justificar intentar reducirlas. En dispositivos móviles, la optimización de llamadas de dibujo es vital. Puedes lograr esto con agrupación de llamadas de dibujo.
La agrupación de llamadas de dibujo minimiza estos cambios de estado y reduce el costo de CPU de renderizar objetos. Unity puede combinar múltiples objetos en menos lotes utilizando varias técnicas:
- Agrupación SRP: Si estás utilizando HDRP o URP, habilita el Agrupador SRP en tu activo de Pipeline bajo Avanzado. Al usar sombreadores compatibles, el Agrupador SRP reduce la configuración de GPU entre llamadas de dibujo y hace que los datos del material sean persistentes en la memoria de la GPU. Esto puede acelerar significativamente tus tiempos de renderizado de CPU. Usa menos Variantes de Sombreador con una cantidad mínima de Palabras Clave para mejorar la agrupación SRP. Consulta esta documentación de SRP para ver cómo tu proyecto puede aprovechar este flujo de trabajo de renderizado.
- Instanciación de GPU: Si tienes un gran número de objetos idénticos (por ejemplo, edificios, árboles, hierba, etc. con la misma malla y material), usa instanciación de GPU. Esta técnica los agrupa utilizando hardware gráfico. Para habilitar la Instanciación de GPU, selecciona tu material en la ventana del Proyecto y, en el Inspector, marca Habilitar Instanciación.
- Agrupación estática: Para geometría no móvil, Unity puede reducir las llamadas de dibujo para cualquier malla que comparta el mismo material. Es más eficiente que la agrupación dinámica, pero utiliza más memoria. Marca todas las mallas que nunca se mueven como Agrupación Estática en el Inspector. Unity combina todas las mallas estáticas en una gran malla en el momento de la construcción. El StaticBatchingUtility también te permite crear estos lotes estáticos tú mismo en tiempo de ejecución (por ejemplo, después de generar un nivel procedural de partes no móviles).
- Agrupamiento Dinámico: Para mallas pequeñas, Unity puede agrupar y transformar vértices en la CPU, y luego dibujarlos todos de una vez. Nota: No utilices esto a menos que tengas suficientes mallas de baja poligonización (no más de 300 vértices cada una y 900 atributos de vértice en total). De lo contrario, habilitarlo desperdiciará tiempo de CPU buscando mallas pequeñas para agrupar.
Puedes maximizar el agrupamiento con algunas reglas simples:
- Usa la menor cantidad de texturas en una escena como sea posible. Menos texturas requieren menos materiales únicos, lo que facilita su agrupamiento. Además, utiliza atlas de texturas siempre que sea posible.
- Siempre hornea lightmaps al tamaño de atlas más grande posible. Menos lightmaps requieren menos cambios de estado de material, pero mantén un ojo en la huella de memoria.
- Ten cuidado de no instanciar materiales involuntariamente. Acceder a Renderer.material en scripts duplica el material y devuelve una referencia a la nueva copia. Esto rompe cualquier agrupamiento existente que ya incluya el material. Si deseas acceder al material del objeto agrupado, utiliza Renderer.sharedMaterial en su lugar.
- Mantén un ojo en el número de conteos de agrupamiento estático y dinámico frente al conteo total de llamadas de dibujo utilizando el Profiler o las estadísticas de renderizado durante las optimizaciones.
Por favor, consulta la documentación de agrupamiento de llamadas de dibujo para más información.

El Depurador de Frames te permite congelar la reproducción en un solo frame y avanzar a través de cómo Unity construye una escena para identificar oportunidades de optimización. Busca GameObjects que se renderizan innecesariamente y desactívalos para reducir las llamadas de dibujo por frame.
Nota: El Frame Debugger no muestra llamadas de dibujo individuales ni cambios de estado. Solo los perfiles nativos de GPU te dan información detallada sobre llamadas de dibujo y tiempos. Sin embargo, el Frame Debugger aún puede ser muy útil para depurar problemas de tuberías o problemas de agrupamiento.
Una ventaja del Frame Debugger de Unity es que puedes relacionar una llamada de dibujo con un GameObject específico en la escena. Esto facilita la investigación de ciertos problemas que pueden no ser posibles en depuradores de fotogramas externos.
Para más información, lee la documentación del Frame Debugger y consulta la sección

La tasa de llenado se refiere al número de píxeles que la GPU puede renderizar en la pantalla cada segundo.
Si tu juego está limitado por la tasa de llenado, esto significa que está intentando dibujar más píxeles por fotograma de los que la GPU puede manejar.
Dibujar sobre el mismo píxel múltiples veces se llama sobre-dibujo. El sobre-dibujo disminuye la tasa de llenado y cuesta ancho de banda de memoria adicional. Las causas más comunes de sobre-dibujo son:
- Geometría opaca o transparente superpuesta
- Sombras complejas, a menudo con múltiples pasadas de renderizado
- Partículas no optimizadas
- Elementos de UI superpuestos
Si bien deseas minimizar su efecto, no hay un enfoque único para resolver problemas de sobre-dibujo. Comienza experimentando con los factores anteriores para reducir su impacto.
Al igual que en otras plataformas, la optimización en consola a menudo significará reducir los lotes de llamadas de dibujo. Hay algunas técnicas que podrían ayudar.
- Usa el recorte de oclusión para eliminar objetos ocultos detrás de objetos en primer plano y reducir el sobre-dibujo. Ten en cuenta que esto requiere procesamiento adicional de la CPU, así que usa el Profiler para asegurarte de que mover trabajo de la GPU a la CPU sea beneficioso.
- la instanciación de GPU también puede reducir tus lotes si tienes muchos objetos que comparten la misma malla y material. Limitar el número de modelos en tu escena puede mejorar el rendimiento. Si se hace de manera artística, puedes construir una escena compleja sin que parezca repetitiva.
- El SRP Batcher puede reducir la configuración de la GPU entre DrawCalls agrupando los comandos de GPU de Bind y Draw. Para beneficiarte de este agrupamiento SRP, usa tantos materiales como necesites, pero restríngelos a un pequeño número de sombreadores compatibles (por ejemplo, sombreadores Lit y Unlit en URP y HDRP).
El recorte de oclusión desactiva los GameObjects que están completamente ocultos (ocluidos) por otros GameObjects. Esto evita que la CPU y la GPU usen tiempo para renderizar objetos que nunca serán vistos por la Cámara.
El recorte ocurre por cámara. Puede tener un gran impacto en el rendimiento, especialmente cuando múltiples cámaras están habilitadas simultáneamente. Unity utiliza dos tipos de recorte, recorte de frustum y recorte de oclusión.
El recorte de frustum se realiza automáticamente en cada Cámara. Evita que los GameObjects que están fuera del frustum de vista sean renderizados, ayudando a optimizar el rendimiento.
Puedes establecer distancias de recorte por capa manualmente a través de Camera.layerCullDistances. Esto te permite recortar pequeños GameObjects a una distancia menor que el farClipPlane predeterminado.
Organiza los GameObjects en Capas. Usa el array layerCullDistances para asignar a cada una de las 32 capas un valor menor que el farClipPlane (o usa 0 para predeterminar al farClipPlane).
Unity culling por capa primero, manteniendo GameObjects solo en las capas que utiliza la Cámara. Después, el culling de frustum elimina cualquier GameObject fuera del frustum de la cámara. El culling de frustum se realiza como una serie de trabajos para aprovechar los hilos de trabajo disponibles.
Cada prueba de culling de capa es muy rápida (esencialmente solo una operación de máscara de bits). Sin embargo, este costo aún podría acumularse con un número muy grande de GameObjects. Si esto se convierte en un problema para tu proyecto, es posible que necesites implementar algún sistema para dividir tu mundo en "sectores" y desactivar sectores que están fuera del frustum de la Cámara para aliviar parte de la presión sobre el sistema de culling de capa/frustum de Unity.
El culling de oclusión elimina cualquier GameObject de la vista del Juego si la Cámara no puede verlos. Usa esta función para evitar el renderizado de objetos ocultos detrás de otros objetos, ya que estos aún pueden renderizarse y costar recursos. Por ejemplo, renderizar otra habitación es innecesario si una puerta está cerrada y la Cámara no puede ver dentro de la habitación.
Habilitar el culling de oclusión puede aumentar significativamente el rendimiento, pero también puede requerir más espacio en disco, tiempo de CPU y RAM. Unity hornea los datos de oclusión durante la construcción y luego necesita cargarlos desde el disco a la RAM mientras carga una escena.
Mientras que el culling de frustum fuera de la vista de la cámara es automático, el culling de oclusión es un proceso horneado. Simplemente marca tus objetos como Estáticos.Occluders o Occludees, luego hornea a través del Ventana > Renderizado > Culling de Oclusión diálogo.
Consulta el tutorial de Trabajando con Culling de Oclusión para más información.

Permitir Resolución Dinámica es una configuración de Cámara que te permite escalar dinámicamente los objetivos de renderizado individuales para reducir la carga de trabajo en la GPU. En casos donde la tasa de fotogramas de la aplicación se reduce, puedes reducir gradualmente la resolución para mantener una tasa de fotogramas consistente.
Unity activa este escalado si los datos de rendimiento sugieren que la tasa de fotogramas está a punto de disminuir como resultado de estar limitado por la GPU. También puedes activar este escalado manualmente con un script. Esto es útil si te acercas a una sección intensiva en GPU de la aplicación. Si se escala gradualmente, la resolución dinámica puede ser casi imperceptible.
Consulta la página del manual de resolución dinámica para obtener información adicional y una lista de plataformas compatibles.
A veces, es posible que necesites renderizar desde más de un punto de vista durante tu juego. Por ejemplo, es común en un juego de FPS dibujar el arma del jugador y el entorno por separado con diferentes campos de visión (FOV). Esto evita que los objetos en primer plano se sientan demasiado distorsionados al ser vistos a través del FOV de gran angular del fondo.
Podrías usar Apilamiento de Cámaras en URP para renderizar más de una vista de cámara. Sin embargo, todavía se realiza un recorte y renderizado significativo para cada cámara. Cada cámara incurre en algún costo adicional, ya sea que esté realizando un trabajo significativo o no. Solo usa los componentes de Cámara necesarios para renderizar. En plataformas móviles, cada cámara activa puede usar hasta 1 ms de tiempo de CPU, incluso cuando no está renderizando nada.

En el URP, en lugar de usar múltiples cámaras, prueba una Función de Renderizado de Objetos Personalizada. Selecciona Añadir Función de Renderizador en el activo Datos del Renderizador. Elige Renderizar Objeto.
Al sobrescribir cada Objeto de Renderizado, puedes:
- Asociarlo con un Evento e inyectarlo en un momento específico del bucle de renderizado
- Filtrar por Cola de Renderizado (Transparente u Opaco) y LayerMask
- Afectar la configuración de Profundidad y Stencil
- Modificar la configuración de la Cámara (Campo de Visión y Desplazamiento de Posición)

En HDRP, puedes usar pases personalizados para un efecto similar. Configurar un Pase Personalizado usando un Volumen de Pase Personalizado es análogo a usar un Volumen HDRP.
Un Pase Personalizado te permite:
- Cambiar la apariencia de los materiales en tu escena
- Cambiar el orden en que Unity renderiza los GameObjects
- Leer los buffers de la Cámara en shaders
Usar Volúmenes de Pase Personalizado en HDRP puede ayudarte a evitar el uso de Cámaras adicionales y la sobrecarga asociada a ellas. Los pases personalizados tienen flexibilidad adicional en cómo pueden interactuar con los shaders. También puedes extender la clase Pase Personalizado con C#.

A medida que los objetos se alejan, Nivel de Detalle (LOD) puede ajustar o cambiar para usar mallas de menor resolución con materiales y shaders más simples. Esto fortalece el rendimiento de la GPU.
Consulta el curso Trabajando con LODs en Unity Learn para más detalles.

Perfila tus efectos de post-procesamiento para ver su costo en la GPU. Algunos efectos de pantalla completa, como el Bloom y la profundidad de campo, pueden ser costosos, pero experimenta hasta que encuentres un equilibrio feliz entre calidad visual y rendimiento.
El post-procesamiento tiende a no fluctuar mucho en tiempo de ejecución. Una vez que hayas determinado tus Sobrescrituras de Volumen, asigna a tus efectos de posprocesamiento una porción estática de tu presupuesto total de fotogramas.

La teselación subdivide las formas en versiones más pequeñas de esa forma. Esto puede mejorar el detalle a través de una geometría aumentada. Aunque hay ejemplos donde la teselación tiene sentido, como en la corteza de árbol realista, en general, evita la teselación en consolas. Pueden ser costosos para la GPU.
Al igual que los sombreadores de teselación, los sombreadores de geometría y de vértices pueden ejecutarse dos veces por fotograma en la GPU: una vez durante el pre-paso de profundidad y nuevamente durante el paso de sombra.
Si deseas generar o modificar datos de vértices en la GPU, un shader de cómputo es a menudo una mejor opción que un shader de geometría. Realizar el trabajo en un shader de cómputo significa que el shader de vértices que realmente renderiza la geometría puede ser comparativamente rápido y simple.
Aprende más sobre conceptos básicos de shaders.
Cuando envías una llamada de dibujo a la GPU, ese trabajo se divide en muchas frentes de onda que Unity distribuye a través de los SIMDs disponibles dentro de la GPU.
Cada SIMD tiene un número máximo de frentes de onda que pueden estar en ejecución al mismo tiempo. La ocupación de frentes de onda se refiere a cuántos frentes de onda están actualmente en uso en relación con el máximo. Esto mide qué tan bien estás utilizando el potencial de la GPU. Las herramientas de análisis de rendimiento específicas de la consola muestran la ocupación de frentes de onda en gran detalle.
En el ejemplo a continuación, los frentes de onda del shader de vértices aparecen en verde. Los frentes de onda del shader de píxeles aparecen en azul. En el gráfico inferior, muchos frentes de onda del shader de vértices aparecen sin mucha actividad del shader de píxeles. Esto muestra una subutilización del potencial de la GPU.
Si estás haciendo mucho trabajo de shader de vértices que no resulta en píxeles, eso puede indicar una ineficiencia. Si bien una baja ocupación de frentes de onda no es necesariamente mala, es una métrica para comenzar a optimizar tus shaders y verificar otros cuellos de botella. Por ejemplo, si tienes un estancamiento debido a operaciones de memoria o de cómputo, aumentar la ocupación puede ayudar al rendimiento. Por otro lado, demasiados frentes de onda en vuelo pueden causar un uso ineficiente de la caché y disminuir el rendimiento.

Si tienes intervalos en los que estás subutilizando la GPU, Async Compute te permite mover trabajo útil de shaders de cómputo en paralelo a tu cola de gráficos. Esto hace un mejor uso de esos recursos de la GPU.
Por ejemplo, durante la generación de mapas de sombras, la GPU realiza un renderizado solo de profundidad. Muy poco trabajo de shader de píxeles ocurre en este punto, y muchos frentes de onda permanecen desocupados.
Si puedes sincronizar algo de trabajo de shader de cómputo con el renderizado solo de profundidad, esto hace un mejor uso general de la GPU. Los frentes de onda no utilizados podrían ayudar con la oclusión ambiental en espacio de pantalla o cualquier tarea que complemente el trabajo actual.
Mira esta sesión sobre Optimización del rendimiento para consolas de alta gama de Unite.

El Drawer Residente de la GPU (disponible tanto para URP como para HDRP) es un sistema de renderizado impulsado por la GPU diseñado para optimizar el tiempo de CPU, ofreciendo beneficios de rendimiento significativos. Soporta renderizado multiplataforma y está diseñado para funcionar de inmediato con proyectos existentes.
El sistema se puede habilitar dentro del Activo del Pipeline de Renderizado HDRP o URP. Selecciona Dibujo Instanciado para habilitarlo. También puedes seleccionar si deseas habilitarlo solo en modo de juego o también en modo de edición.
Cuando habilitas el Drawer Residente de la GPU, los juegos que están limitados por la CPU debido a un alto número de llamadas de dibujo pueden mejorar en rendimiento a medida que se reduce la cantidad de llamadas de dibujo. Las mejoras que verás dependen de la escala de tus escenas y la cantidad de instancias que utilices. Cuantos más objetos instanciables renderices, mayores serán los beneficios que verás.
Al seleccionar la opción de Dibujo Instanciado, es posible que recibas un mensaje en la interfaz de usuario advirtiéndote que la configuración de 'BatchRenderGroup Variants' debe ser 'Keep All'. Ajustar esta opción en la configuración gráfica completa la configuración para el Dibujador Residente de GPU.
Para aprender más, consulta nuestro hilo de discusión aquí.

El recorte de oclusión de GPU, disponible tanto para URP como para HDRP, funciona en conjunto con el Dibujador Residente de GPU. Aumenta significativamente el rendimiento al reducir la cantidad de sobre-dibujo por cada cuadro, lo que significa que el renderizador no está desperdiciando recursos dibujando cosas que no se ven.
Para activar el recorte de oclusión de GPU, localiza el activo del pipeline de renderizado y activa la casilla de verificación de Oclusión de GPU.
Para habilitar el Recorte de Oclusión de GPU en Modo de Depuración en Unity 6, ve a Ventana > Renderizado > Recorte de Oclusión. Aquí, puedes visualizar cómo se están recortando los objetos al alternar varias opciones de visualización.


Puedes encontrar muchas más prácticas recomendadas y consejos para desarrolladores y creadores avanzados de Unity en el centro de prácticas recomendadas de Unity. Elige entre más de 30 guías, creadas por expertos de la industria, ingenieros de Unity y artistas técnicos, que te ayudarán a desarrollar de manera eficiente con las herramientas y sistemas de Unity.