
Este es el segundo de una serie de artículos que desglosan 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:
Las herramientas gráficas de Unity te permiten crear gráficos optimizados en cualquier estilo, en una variedad de plataformas, desde móviles hasta consolas de alta gama y escritorio. Este proceso generalmente depende de tu dirección artística y pipeline de renderizado, así que antes de comenzar, te recomendamos revisar los pipelines de renderizado disponibles.
Optimizar la iluminación de la escena no es una ciencia exacta, sino un proceso iterativo. Involucra prueba y error y el proceso generalmente depende de la dirección artística y el pipeline de renderizado.
Antes de comenzar a iluminar tus escenas, necesitarás elegir uno de los pipelines de renderizado disponibles. Un pipeline de renderizado realiza una serie de operaciones que toman el contenido de una escena para mostrarlos en pantalla.
Unity proporciona tres pipelines de renderizado preconstruidos con diferentes capacidades y características de rendimiento, o puedes crear el tuyo propio.
1. El Pipeline de Renderizado Universal (URP) es un Pipeline de Renderizado Scriptable (SRP) preconstruido. URP proporciona flujos de trabajo amigables para artistas para crear gráficos optimizados en una variedad de plataformas, desde móviles hasta consolas y PCs de alta gama. URP es el sucesor del Pipeline de Renderizado Integrado, proporcionando características gráficas y de renderizado no disponibles con el pipeline anterior. Para mantener el rendimiento, hace concesiones para reducir el costo computacional de la iluminación y el sombreado. Elige URP si deseas alcanzar la mayoría de las plataformas objetivo, incluyendo móviles y VR.
Obtén una visión completa de las capacidades en URP en el e-book Introducción a el Pipeline de Renderizado Universal para creadores avanzados de Unity (edición Unity 6).
2. El Pipeline de Renderizado de Alta Definición (HDRP) es otro SRP preconstruido diseñado para gráficos de alta fidelidad y vanguardia. HDRP está pensado para hardware de alta gama como PC, Xbox y PlayStation. Es el pipeline de renderizado recomendado para crear gráficos fotorealistas con el más alto nivel de realismo en tu juego, con iluminación avanzada, reflejos y sombras. HDRP utiliza iluminación y materiales basados en la física y soporta herramientas de depuración mejoradas.
Obtén una visión completa de las capacidades de HDRP en el libro electrónico Iluminación y entornos en el High Definition Render Pipeline.
3. El Built-in Render Pipelinees el pipeline de renderizado más antiguo y de propósito general de Unity con personalización limitada. Este pipeline seguirá siendo soportado a lo largo del ciclo de Unity 6.x.

En el renderizado hacia adelante, la tarjeta gráfica proyecta la geometría y la divide en vértices. Esos vértices se descomponen aún más en fragmentos, o píxeles, que se renderizan en la pantalla para crear la imagen final.
El pipeline pasa cada objeto, uno a la vez, a la API gráfica. El renderizado hacia adelante tiene un costo por cada luz. Cuantas más luces haya en tu escena, más tiempo tomará el renderizado.
El renderizador hacia adelante del Built-in Pipeline dibuja cada luz en una pasada separada por objeto. Si tienes múltiples luces impactando el mismo GameObject, esto puede crear un sobre-dibujo significativo, donde las áreas superpuestas necesitan dibujar el mismo píxel más de una vez. Minimiza el número de luces en tiempo real para reducir el sobre-dibujo.
En lugar de renderizar una pasada por luz, el URP elimina las luces por objeto. Esto permite que la iluminación se calcule en una sola pasada, resultando en menos llamadas de dibujo en comparación con el renderizador hacia adelante del Built-In Render Pipeline.
Hacia adelante +
El renderizado Forward+ mejora el renderizado Forward estándar al eliminar luces espacialmente en lugar de por objeto. Esto aumenta el número total de luces que se pueden utilizar en el renderizado de un cuadro. En el renderizado diferido, admite la API de RenderPass nativa, lo que permite combinar los pases de G-buffer y de iluminación en un solo pase de renderizado.

En el sombreado diferido, la iluminación no se calcula por objeto.
El sombreado diferido, en cambio, pospone el cálculo de la iluminación a una etapa posterior. El sombreado diferido utiliza dos pases.
En el primer pase, o el pase de geometría G-Buffer, Unity renderiza los GameObjects. Este pase recupera varios tipos de propiedades geométricas y las almacena en un conjunto de texturas. Las texturas del G-buffer pueden incluir:
En el segundo pase, o pase de iluminación, Unity renderiza la iluminación de la escena basada en el G-buffer. Imagina iterar sobre cada píxel y calcular la información de iluminación basada en el buffer en lugar de los objetos individuales. Así, agregar más luces que no proyectan sombras en el sombreado diferido no incurre en la misma pérdida de rendimiento que con el renderizado hacia adelante.
Aunque elegir un camino de renderizado no es una optimización en sí, puede afectar cómo optimizas tu proyecto. Las otras técnicas y flujos de trabajo en esta sección pueden variar dependiendo de qué pipeline de renderizado y qué camino de renderizado hayas elegido.

Tanto HDRP como URP admiten Shader Graph, una interfaz visual para la creación de shaders. Esto permite a algunos usuarios crear efectos de sombreado complejos que anteriormente podían estar fuera de alcance. Utiliza los más de 150 nodos en el sistema de gráficos visuales para crear más sombreadores. También puedes crear tus propios nodos personalizados con la API.
Comienza cada Shader Graph con un nodo maestro compatible, que determina la salida del gráfico. Agrega nodos y operadores con la interfaz visual y construye la lógica del sombreado.
Este Shader Graph luego pasa al backend del pipeline de renderizado. El resultado final es un sombreado ShaderLab, funcionalmente similar a uno escrito en HLSL o Cg.
Optimizar un Shader Graph sigue muchas de las mismas reglas que se aplican a los sombreadores HLSL/Cg tradicionales. Cuanto más procesamiento realice tu Shader Graph, más impactará el rendimiento de tu aplicación.
Si estás limitado por la CPU, optimizar tus sombreadores no mejorará la tasa de fotogramas, pero puede mejorar la duración de la batería en plataformas móviles.
Si estás limitado por la GPU, sigue estas pautas para mejorar el rendimiento con Shader Graphs:
- Reduce tus nodos: Elimina nodos no utilizados. No cambies ningún valor predeterminado ni conectes nodos a menos que esos cambios sean necesarios. Shader Graph compila automáticamente cualquier característica no utilizada. Cuando sea posible, hornea valores en texturas. Por ejemplo, en lugar de usar un nodo para aclarar una textura, aplica el brillo adicional en el propio activo de textura.
- Usa un formato de datos más pequeño: Cambia a una estructura de datos más pequeña cuando sea posible. Considera usar Vector2 en lugar de Vector3 si no impacta tu proyecto. También puedes reducir la precisión si la situación lo permite (por ejemplo, medio en lugar de float).
- Reducir operaciones matemáticas: Las operaciones de sombreado se ejecutan muchas veces por segundo, así que optimiza cualquier operador matemático cuando sea posible. Intenta mezclar resultados en lugar de crear una rama lógica. Usa constantes y combina valores escalares antes de aplicar vectores. Finalmente, convierte cualquier propiedad que no necesite aparecer en el Inspector en Nodos en línea. Todos estos aumentos de velocidad incrementales pueden ayudar a tu presupuesto de fotogramas.
- Rama de vista previa: A medida que tu gráfico se hace más grande, puede volverse más lento para compilar. Simplifica tu flujo de trabajo con una rama separada y más pequeña que contenga solo las operaciones que deseas previsualizar en este momento, luego itera más rápido en esta rama más pequeña hasta que logres los resultados deseados.
Si la rama no está conectada al nodo maestro, puedes dejar la rama de vista previa en tu gráfico de forma segura. Unity elimina nodos que no afectan la salida final durante la compilación.
- Optimizar manualmente: Incluso si eres un programador gráfico experimentado, aún puedes usar un Shader Graph para establecer un poco de código base para un sombreado basado en scripts. Selecciona el activo Shader Graph, luego selecciona Copiar Sombreadodel menú contextual.
Crea un nuevo Shader HLSL/Cg y luego pega el Shader Graph copiado. Esta es una operación unidireccional, pero te permite obtener un rendimiento adicional con optimizaciones manuales.

Elimina todos los sombreadores que no uses de la lista de sombreadores Siempre Incluidos en la Configuración de Gráficos (Editar > Configuración del Proyecto > Gráficos). Agrega aquí los shaders que necesitarás durante la vida de la aplicación.

Las variantes de shader pueden ser útiles para características específicas de la plataforma, pero aumentan los tiempos de compilación y el tamaño del archivo.
Puedes usar las directivas de pragma de compilación de shader para compilar el shader de manera diferente para las plataformas de destino. Luego, usa una palabra clave de shader (o un nodo Shader Graph Keyword) para crear variantes de shader con ciertas características habilitadas o deshabilitadas.
Puedes evitar que las variantes de shader se incluyan en tu compilación si sabes que no son necesarias.
Analiza el Editor.log para el tiempo y tamaño del shader. Localiza las líneas que comienzan con “Shader compilado” y “Shader comprimido.” En un registro de ejemplo, tu shader de PRUEBA puede mostrarte:
Shader compilado 'PRUEBA Estándar (configuración especular)' en 31.23s
d3d9 (programas internos totales: 482, únicos: 474)
d3d11 (programas internos totales: 482, únicos: 466)
metal (programas internos totales: 482, únicos: 480)
glcore (programas internos totales: 482, únicos: 454)
Shader comprimido 'PRUEBA Estándar (configuración especular)' en d3d9 de 1.04MB a 0.14MB
Shader comprimido 'PRUEBA Estándar (configuración especular)' en d3d11 de 1.39MB a 0.12MB
Shader comprimido 'PRUEBA Estándar (configuración especular)' en metal de 2.56MB a 0.20MB
Shader comprimido 'PRUEBA Estándar (configuración especular)' en glcore de 2.04MB a 0.15MB
Esto te dice algunas cosas sobre este shader:
- El shader se expande en 482 variantes debido a #pragma multi_compile y shader_feature.
- Unity comprime el shader incluido en los datos del juego a aproximadamente la suma de los tamaños comprimidos: 0.14+0.12+0.20+0.15 = 0.61MB.
- En tiempo de ejecución, Unity mantiene los datos comprimidos en memoria (0.61MB), mientras que los datos para tu API gráfica actualmente utilizada están descomprimidos. Por ejemplo, si tu API actual es Metal, eso representaría 2.56MB.
Después de una compilación, Project Auditor puede analizar el Editor.log para mostrar una lista de todos los shaders, palabras clave de shaders y variantes de shaders compiladas en un proyecto. También puede analizar el Player.log después de que se ejecute el juego. Esto te muestra qué variantes la aplicación realmente compiló y utilizó en tiempo de ejecución.
Utiliza esta información para construir un sistema de eliminación de shaders scriptables y reducir el número de variantes. Esto puede mejorar los tiempos de compilación, los tamaños de compilación y el uso de memoria en tiempo de ejecución.
Lee el Stripping scriptable shader variants artículo del blog para ver este proceso en detalle.
El anti-aliasing ayuda a suavizar la imagen, reducir los bordes dentados y minimizar el aliasing especular.
Si estás utilizando renderizado Forward con el Pipeline de Renderizado Integrado, Multisample Anti-aliasing (MSAA) está disponible en la Configuración de calidad. MSAA produce un anti-aliasing de alta calidad, pero puede ser costoso. El MSAA Sample Count del menú desplegable (Ninguno, 2X, 4X, 8X) define cuántas muestras utiliza el renderizador para evaluar el efecto.
Si estás utilizando renderizado Forward con el URP o HDRP, puedes habilitar MSAA en el Activo del Pipeline de Renderizado.
Alternativamente, puedes agregar anti-aliasing como un efecto de post-procesamiento. Esto aparece en el componente de la Cámara bajo Anti-aliasing:
- El anti-aliasing aproximado rápido (FXAA) suaviza los bordes a nivel de píxel. Este es el anti-aliasing menos intensivo en recursos y borra ligeramente la imagen final.
- El anti-aliasing morfológico subpixel (SMAA) mezcla píxeles en función de los bordes de una imagen. Esto tiene resultados mucho más nítidos que FXAA y es adecuado para estilos artísticos planos, de dibujos animados o limpios.
En HDRP, también puedes usar FXAA y SMAA con la configuración de Post Anti-aliasing en la cámara. URP y HDRP también ofrecen una opción adicional:
- El anti-aliasing temporal (TAA) suaviza los bordes utilizando fotogramas del búfer de historial. Esto funciona de manera más efectiva que FXAA pero requiere vectores de movimiento para funcionar. TAA también puede mejorar la oclusión ambiental y los volumétricos. Generalmente es de mayor calidad que FXAA, pero consume más recursos y puede producir artefactos de ghosting ocasionales.

El Post-Procesamiento Espacial-Temporal (STP) está diseñado para mejorar la calidad visual en una amplia gama de plataformas como móviles, consolas y PCs. STP es un escalador de anti-aliasing espaciotemporal que funciona con los pipelines de renderizado HDRP y URP, ofreciendo escalado de contenido de alta calidad sin necesidad de cambios en el contenido existente. Esta solución está particularmente optimizada para el rendimiento de la GPU, asegurando tiempos de renderizado más rápidos y facilitando lograr un alto rendimiento mientras se mantiene la calidad visual.
Para habilitar STP en el URP:
- Selecciona el Activo URP activo en la ventana del Proyecto.
- En el Inspector, navega a Calidad > Filtro de Escalado y selecciona Post-Procesamiento Espacial-Temporal.

La opción más rápida para crear iluminación es una que no necesita ser calculada por fotograma. Para hacer esto, usa Iluminación Global (GI) para "hornear" la iluminación estática solo una vez, en lugar de calcularla en tiempo real.
Agrega iluminación dramática a tu geometría estática usando Iluminación Global (GI). Marca objetos con Contribuir GI para que puedas almacenar iluminación de alta calidad en forma de lightmaps.
El proceso de generar un entorno con lightmaps toma más tiempo que simplemente colocar una luz en la escena en Unity, pero esto:
- Funciona más rápido, 2-3 veces más rápido para luces de dos por píxel
- Se ve mejor – GI puede calcular iluminación directa e indirecta que parece realista. El lightmapper suaviza y elimina el ruido del mapa resultante.
Las sombras y la iluminación horneadas pueden renderizarse sin la misma pérdida de rendimiento que la iluminación y sombras en tiempo real.
Las escenas complejas pueden requerir largos tiempos de horneado. Si tu hardware soporta el Lightmapper GPU Progresivo, esta opción puede acelerar drásticamente la generación de tu lightmap, hasta diez veces en algunos casos.
Sigue esta guía para comenzar con Lightmapping en Unity.

Un componente de Probe de Reflexión puede crear reflexiones realistas, pero esto puede ser muy costoso en términos de lotes. Usa cubemaps de baja resolución, máscaras de culling y compresión de texturas para mejorar el rendimiento en tiempo de ejecución. Usa Tipo: Horneado para evitar actualizaciones por cuadro.
Si usas Tipo: En Tiempo Real es necesario en URP, evita Cada Cuadro si es posible. Ajusta el Modo de Actualización y la configuración de División de Tiempo para reducir la tasa de actualización. También puedes controlar la actualización con la opción Via Scripting y renderizar el probe desde un script personalizado.
Si usas Tipo: En Tiempo Real es necesario en HDRP, usa el modo On Demand. También puedes modificar la Configuración de Cuadro en Configuración del Proyecto > Configuración Predeterminada de HDRP. Reduce la calidad y las características bajo Realtime Reflection para mejorar el rendimiento.
Reduce la calidad y las características bajo Reflexión en tiempo real para mejorar el rendimiento.

Unity 6 introduce Volúmenes de Probes Adaptativos (APVs) que proporcionan una solución sofisticada para manejar la iluminación global en Unity, permitiendo una iluminación dinámica y eficiente en escenas complejas. Los APVs pueden optimizar tanto el rendimiento como la calidad visual, particularmente en dispositivos móviles y de gama baja, mientras ofrecen capacidades avanzadas para plataformas de gama alta.
Los APVs ofrecen una variedad de características para mejorar la iluminación global, particularmente en escenas dinámicas y grandes. URP ahora soporta muestreo por vértice para mejorar el rendimiento en dispositivos de gama baja, mientras que las partículas VFX se benefician de la iluminación indirecta horneada en volúmenes de probes.
Los datos de APV pueden ser transmitidos desde el disco a la CPU y GPU, optimizando la información de iluminación para grandes entornos. Los desarrolladores pueden hornear y mezclar múltiples escenarios de iluminación, permitiendo transiciones en tiempo real como ciclos de día/noche. El sistema también soporta oclusión del cielo, se integra con la API Ray Intersector para cálculos de probes más eficientes, y ofrece control sobre la densidad de muestreo de Light Probe para reducir fugas de luz y acelerar iteraciones. La nueva API de horneado en C# también permite el horneado independiente de APV de mapas de luz o probes de reflexión.
Para comenzar a usar APVs, consulta la charla Iluminación eficiente e impactante con Volúmenes de Probes Adaptativos de GDC 2023.

La proyección de sombras se puede desactivar por MeshRenderer y luz. Desactiva las sombras siempre que sea posible para reducir las llamadas de dibujo.
También puedes crear sombras falsas usando una textura difusa aplicada a una malla simple o cuadrado debajo de tus personajes. De lo contrario, puedes crear sombras de blob con shaders personalizados.
En particular, evita habilitar sombras para luces puntuales. Cada luz puntual con sombras requiere seis pasadas de mapa de sombras por luz – compara eso con una sola pasada de mapa de sombras para una luz puntual. Considera reemplazar las luces puntuales con focos donde las sombras dinámicas sean absolutamente necesarias. Si puedes evitar las sombras dinámicas, utiliza un cubemap como una Light.cookie con tus luces puntuales en su lugar.

En algunos casos, puedes aplicar trucos simples en lugar de agregar múltiples luces adicionales. Por ejemplo, en lugar de crear una luz que brille directamente hacia la cámara para dar un efecto de iluminación de contorno, utiliza un Shader que simule la iluminación de contorno (ver Surface Shader examples para una implementación de esto en HLSL).
Para escenas complejas con muchas luces, separa tus objetos usando capas, luego confina la influencia de cada luz a una Culling Mask específica.

El Lightmapper GPU está listo para producción en Unity 6. Acelera drásticamente la generación de datos de iluminación aprovechando la GPU, ofreciendo tiempos de horneado significativamente más rápidos en comparación con el lightmapping tradicional en CPU. Introduce un nuevo backend de horneado de luz que simplifica la base de código y ofrece resultados más predecibles. Además, el requisito mínimo de GPU se ha reducido a 2GB, e incluye una nueva API para mover posiciones de sondas de luz en tiempo de ejecución, lo cual es particularmente útil para contenido generado proceduralmente, junto con varias mejoras en la calidad de vida.


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.