En resumen: la vegetación densa rara vez muere solo por el recuento de triángulos: muere por mil draw calls, overdraw de tarjetas alfa descuidadas, y sombras que nadie recordaba que estaban activas. Gasta tu esfuerzo en este orden: instancing primero, distancias de cull segundo, sombras tercero, LODs cuarto, colocación por densidad quinto, y verifica cada paso con la misma cámara fija, una variable a la vez, o no aprenderás nada. Esta guía cubre cada etapa con la firma en el profiler que te dice que es tu problema.
Un bosque real se renderiza «gratis» porque la física es masivamente paralela. Tu GPU puede falsear el aspecto a 60 fps, pero solo si dejas de sabotear la maquinaria que los motores ya traen para exactamente este trabajo.
El modelo mental: cinco cuellos de botella, un orden
El rendimiento de la vegetación no es un problema, son cinco, y dominan en una secuencia predecible. Los draw calls atan primero la CPU; la distancia de cull decide cuánto le estás pidiendo siquiera a la GPU que dibuje; las sombras duplican silenciosamente el coste de todo lo que las proyecta; los LODs y el overdraw gobiernan la factura por píxel; y la colocación por densidad decide cuánto de todo eso necesitabas de verdad. Atácalos en desorden y optimizarás algo que no era el cuello de botella. El orden de abajo es aquel en que los costes de verdad muerden.
Instancing primero, todo lo demás después
Un árbol dibujado 5.000 veces es radicalmente más barato que 5.000 árboles individuales, porque ambos motores agrupan mallas repetidas en draws instanciados, y tu primer trabajo es simplemente no sabotear esa maquinaria.
Unreal agrupa mediante foliage y hierarchical instanced static meshes; Unity mediante GPU instancing y detalles de terreno. Lo que rompe silenciosamente el agrupamiento:
- vegetación colocada como actores/objetos únicos en lugar de instancias;
- variantes de material por instancia: usa datos por instancia (color, escala) dentro de un material en vez de crear un material por aspecto;
- colocación dispersa organizativamente, de modo que el motor no pueda cullear clústeres como unidades.
La señal en el profiler es inequívoca: draw calls que escalan con el número de plantas. Si una vista de bosque muestra miles de draw calls, arréglalo antes de tocar cualquier otra cosa. Nada más abajo en esta lista te salvará, porque estás CPU-bound antes de que la GPU siquiera arranque. La vegetación instanciada sana mantiene draw calls en los cientos bajos para toda una vista de bosque, sin importar cuántos miles de plantas haya.
Las distancias de cull son dinero gratis
La hierba no necesita renderizarse a 800 metros: pon distancias de cull por tipo (cubresuelo 30–60 m, arbustos 100–200 m, solo los árboles ganan largas distancias) con rangos de fade para ocultar el pop.
Es el ajuste de mayor valor por minuto de todo el pipeline, y rutinariamente se deja en «infinito» porque ahí está por defecto y nadie lo nota. El razonamiento es perceptivo: el cubresuelo subtiende menos de un píxel mucho antes de los 100 m: no contribuye literalmente nada a la imagen final mientras sigue costando vértices, overdraw y trabajo de sombra cada frame. La cobertura lejana pertenece a sistemas más baratos: el color del material del terreno, impostores opacos, o simplemente el LOD lejano de la capa de terreno pintado del verde correcto.
Los rangos de fade (dithered o alfa) ocultan el pop-out para que los jugadores nunca vean la distancia de cull en sí. Ajusta el fade lo justo para ser invisible y no más: un fade demasiado largo significa que pagas dos representaciones de la misma planta durante el crossfade.
Sombras: la mitad silenciosa de la factura
Apaga la proyección de sombras dinámicas para el cubresuelo pequeño, mantenla para los árboles, y limítala por distancia para los arbustos, porque las sombras de hierba duplican tu coste por una ganancia visual casi nula.
Cada brizna de hierba en el pase de sombras se dibuja de nuevo, desde el punto de vista de la luz. En escenas densas el pase de sombras suele costar tanto como el pase base, lo que significa que las sombras de hierba pueden ser la partida individual más grande de todo el presupuesto de vegetación siendo visualmente indistinguibles de un simple oscurecimiento ambiental en la base del macizo. El arreglo es casi gratis: proyección de sombra apagada para el cubresuelo, encendida para los árboles (sus sombras hacen trabajo compositivo real), limitada por distancia para lo intermedio. Luego comprueba el pase de sombras en tu profiler antes y después: suele ser la mayor victoria individual tras el instancing, y lleva minutos.
LODs: presupuesta la silueta, no los polígonos
Una buena cadena de LOD de vegetación preserva el contorno y masacra el interior: verifica las distancias de transición a ojo, y optimiza más duro el último mesh LOD antes del impostor, porque ese está en pantalla en cada plano amplio.
Las plantas de capa baja como estas son donde los ajustes de distancia de cull y sombra rinden más: miles de instancias, cada una aportando casi nada más allá de unas decenas de metros, cada una duplicándose en coste si proyecta una sombra dinámica.
Una cadena práctica para un árbol héroe: malla completa → reducción de interior ~50 % (misma silueta) → ~15 % con tarjetas fusionadas → impostor/billboard opaco. Dos notas que ahorran dolor real:
- Incluso en motores con geometría virtualizada, los impostores lejanos siguen valiendo la pena, porque overdraw y sombras siguen siendo costes reales sin importar cómo se paguen los triángulos. La geometría virtualizada resuelve el recuento de triángulos, no el coste de transparencia.
- La transparencia es la enemiga a distancia. Las tarjetas alpha-tested densas apilan overdraw justo donde la GPU es más débil, es decir, los LODs del medio. Prefiere hojas en malla de cerca e impostores opacos de lejos; el medio cargado de alfa es donde se esconde el tiempo de frame. Si un LOD es misteriosamente caro, casi siempre es el transparente.
Overdraw: el coste que no puedes ver
El overdraw es la GPU sombreando el mismo píxel varias veces a través de superficies transparentes apiladas: la maldición específica de la vegetación, invisible en la imagen final, y a menudo la razón de que una escena «ligera» vaya lenta.
La mayoría de motores tienen un modo de visualización de overdraw; enciéndelo y mira un campo de hierba. Si brilla blanco, estás sombreando cada píxel cinco o diez veces mientras se apilan tarjetas alfa solapadas. Mitigaciones: menos briznas, más grandes, en vez de muchas finas; geometría opaca donde la silueta lo permita; y culleo agresivo de las tarjetas que menos aportan. El overdraw es el culpable clásico del «mi escena va lenta pero nada parece caro», porque los triángulos son baratos y los píxeles se pagan muchas veces.
La densidad es una decisión de diseño, no una posición de deslizador
Densa donde el jugador camina y mira, escasa donde no: una banda de 20 m de detalle rico a lo largo del sendero se lee como «frondoso por todas partes» a una fracción del coste uniforme.
Las máscaras de pendiente y altura hacen parte de esto automáticamente (las caras empinadas y las mesetas lejanas no necesitan cubresuelo en absoluto), y el clustering hace el resto: los macizos con huecos se renderizan más barato que el relleno uniforme y lucen más naturales, así que la victoria de rendimiento y la de belleza apuntan en la misma dirección. Aquí es donde el herramental de colocación se gana el sustento: pintar densidad con máscaras y reglas por especie, y luego hornear directo a instancias nativas del motor, es la diferencia entre una tarde y una semana. Es el núcleo de lo que hace el scatter de Numivo, y como hornea a follaje ordinario y mallas instanciadas, cada técnica de este artículo aplica sin cambios al resultado. No hay runtime de plugin entre tú y las optimizaciones estándar; la escena horneada es solo contenido del motor.
El bucle de profiling
Misma cámara, misma vista, una variable a la vez: mide el tiempo de frame de GPU, los draw calls, el pase de sombras y el overdraw tras cada cambio.
Elige una «cámara de presupuesto» fija en tu vista más densa y captura las stats antes y después de cada paso de arriba. La disciplina importa porque las optimizaciones de vegetación interactúan: un cambio de distancia de cull altera cuántas instancias ve el pase de sombras; un cambio de LOD altera el overdraw; un cambio de densidad los altera todos a la vez. Los vuelos aleatorios producen números aleatorios y discusiones infalsificables sobre si un cambio ayudó. Las cámaras fijas producen decisiones que puedes defender. Guarda los números en una hoja compartida y la línea de tendencia te cuenta la historia que una medición aislada no puede.
Cifras de campo que vale la pena robar
- Cull de cubresuelo: 30–60 m · arbustos: 100–200 m · árboles: línea de visión
- Draw calls para una vista de bosque instanciada sana: cientos bajos
- Cuota del pase de sombras en escenas densas: a menudo ~la mitad del coste de vegetación; apagar las sombras de hierba es la mayor victoria más barata que hay
- Anchura de la banda de dressing del sendero que lee «frondoso por todas partes»: ~20 m
- Número de LOD para un árbol héroe: 3 mesh LODs + impostor opaco
- Objetivo de overdraw para hierba: menos de ~3× en la vista de overdraw, no el 8–10× blanco brillante de tarjetas alfa apiladas
Mini-FAQ
¿Nanite / la geometría virtualizada vuelve esto obsoleto? Cambia qué partidas dominan, no la disciplina. El overdraw de las tarjetas alfa, el coste de sombras y el overhead por instancia permanecen todos, y los impostores a distancia siguen rindiendo. Mide en tu hardware objetivo en vez de asumir que la nueva tecnología resolvió tu cuello de botella específico: quizá lo movió, no lo eliminó.
¿Por qué va lenta mi escena incluso a baja densidad? Los sospechosos habituales, en orden: hierba proyectando sombras dinámicas, un material único por variante saboteando el agrupamiento, distancias de cull en infinito, o una cadena de LOD alpha-tested apilando overdraw. Cada uno tiene una firma de profiler distinta: comprueba antes de cambiar, o arreglarás el equivocado.
¿Qué tan densa es «demasiado densa» para el gameplay? La legibilidad en combate limita la densidad antes que el rendimiento: si las siluetas desaparecen en el desorden, los jugadores culpan al juego, no al dressing. Densa en la vista, moderada en la arena es el patrón que sobrevive tanto al profiler como al playtest.
¿Hornear o mantener procedural? Hornea para publicar: las instancias horneadas se perfilan con honestidad y se publican sin dependencia de runtime. Guarda el setup procedural (máscaras, reglas, semillas) en control de versiones para poder re-hornear tras un cambio de terreno sin rehacer el trabajo a mano.
Con aspecto denso y rápido no es una contradicción: es sobre todo la disciplina de hacer cinco cosas en el orden correcto y probar cada una con la misma cámara.