Em resumo: vegetação densa raramente é morta só pela contagem de triângulos: ela morre por mil draw calls, overdraw de cards alfa descuidados, e sombras que ninguém lembrava que estavam ligadas. Gaste seu esforço nesta ordem: instancing primeiro, distâncias de cull segundo, sombras terceiro, LODs quarto, colocação por densidade quinto, e verifique cada passo com a mesma câmera fixa, uma variável de cada vez, ou você não aprenderá nada. Este guia cobre cada estágio com a assinatura no profiler que te diz que é o seu problema.
Uma floresta real renderiza "de graça" porque a física é massivamente paralela. Sua GPU pode falsear o visual a 60 fps, mas só se você parar de sabotar a maquinaria que os motores já entregam para exatamente este trabalho.
O modelo mental: cinco gargalos, uma ordem
Performance de vegetação não é um problema, são cinco, e eles dominam numa sequência previsível. Draw calls prendem primeiro a CPU; a distância de cull decide quanto você está sequer pedindo à GPU para desenhar; sombras dobram silenciosamente o custo de tudo que as projeta; LODs e overdraw governam a conta por pixel; e a colocação por densidade decide quanto de tudo isso você realmente precisava. Ataque-os fora de ordem e você otimizará algo que não era o gargalo. A ordem abaixo é aquela em que os custos de fato mordem.
Instancing primeiro, todo o resto depois
Uma árvore desenhada 5.000 vezes é radicalmente mais barata que 5.000 árvores individuais: ambos os motores agrupam malhas repetidas em draws instanciados, e seu primeiro trabalho é simplesmente não sabotar essa maquinaria.
O Unreal agrupa via foliage e hierarchical instanced static meshes; o Unity via GPU instancing e detalhes de terreno. O que quebra silenciosamente o agrupamento:
- vegetação colocada como atores/objetos únicos em vez de instâncias;
- variantes de material por instância: use dados por instância (cor, escala) dentro de um material em vez de criar um material por aparência;
- colocação dispersa organizacionalmente, de modo que o motor não consiga cullar clusters como unidades.
O sinal no profiler é inequívoco: draw calls escalando com a contagem de plantas. Se uma vista de floresta mostra milhares de draw calls, conserte isso antes de tocar em qualquer outra coisa: nada mais abaixo nesta lista vai te salvar, porque você está CPU-bound antes de a GPU sequer começar. Vegetação instanciada saudável mantém draw calls na casa das poucas centenas para uma vista de floresta inteira, não importa quantos milhares de plantas haja.
Distâncias de cull são dinheiro grátis
Grama não precisa renderizar a 800 metros: defina distâncias de cull por tipo (cobertura de solo 30–60 m, arbustos 100–200 m, só árvores merecem longas distâncias) com faixas de fade para esconder o pop.
Este é o ajuste de maior valor por minuto de todo o pipeline, e rotineiramente é deixado em "infinito" porque é o padrão e ninguém nota. O raciocínio é perceptivo: cobertura de solo subtende menos de um pixel bem antes de 100 m: não contribui literalmente nada para a imagem final enquanto ainda custa vértices, overdraw e trabalho de sombra a cada frame. Cobertura distante pertence a sistemas mais baratos: a cor do material do terreno, impostores opacos, ou simplesmente o LOD distante da camada de terreno pintado do verde certo.
Faixas de fade (dithered ou alfa) escondem o pop-out para os jogadores nunca verem a distância de cull em si. Ajuste o fade só o suficiente para ser invisível e não mais; um fade longo demais significa que você paga duas representações da mesma planta durante o crossfade.
Sombras: a metade silenciosa da conta
Desligue a projeção de sombra dinâmica para cobertura de solo pequena, mantenha-a para árvores, e limite-a por distância para arbustos: sombras de grama dobram seu custo por ganho visual quase nulo.
Cada lâmina de grama no pass de sombra é desenhada de novo, do ponto de vista da luz. Em cenas densas o pass de sombra frequentemente custa tanto quanto o pass base: o que significa que sombras de grama podem ser a maior linha individual de todo o orçamento de vegetação sendo visualmente indistinguíveis de um simples escurecimento ambiente na base do tufo. O conserto é quase grátis: projeção de sombra desligada para cobertura de solo, ligada para árvores (suas sombras fazem trabalho compositivo real), limitada por distância para o meio-termo. Depois cheque o pass de sombra no seu profiler antes e depois: costuma ser a maior vitória individual depois do instancing, e leva minutos.
LODs: orce a silhueta, não os polígonos
Uma boa cadeia de LOD de vegetação preserva o contorno e massacra o interior: verifique as distâncias de transição a olho, e otimize mais duro o último mesh LOD antes do impostor, porque esse está na tela em todo plano aberto.
Plantas de camada baixa como essas são onde os ajustes de distância de cull e sombra rendem mais: milhares de instâncias, cada uma contribuindo quase nada além de algumas dezenas de metros, cada uma dobrando de custo se projeta uma sombra dinâmica.
Uma cadeia prática para uma árvore herói: malha completa → redução de interior ~50 % (mesma silhueta) → ~15 % com cards mesclados → impostor/billboard opaco. Duas notas que poupam dor real:
- Mesmo em motores com geometria virtualizada, impostores distantes continuam valendo, porque overdraw e sombras seguem sendo custos reais não importa como os triângulos sejam pagos. Geometria virtualizada resolve a contagem de triângulos, não o custo de transparência.
- Transparência é a inimiga à distância. Cards alpha-tested densos empilham overdraw exatamente onde a GPU é mais fraca: os LODs do meio. Prefira folhas em malha de perto e impostores opacos de longe; o meio pesado de alfa é onde o tempo de frame se esconde. Se um LOD é misteriosamente caro, é quase sempre o transparente.
Overdraw: o custo que você não vê
Overdraw é a GPU sombreando o mesmo pixel várias vezes através de superfícies transparentes empilhadas: a maldição específica da vegetação, invisível na imagem final, e muitas vezes a razão de uma cena "leve" estar lenta.
A maioria dos motores tem um modo de visualização de overdraw; ligue-o e olhe um campo de grama. Se brilha branco, você está sombreando cada pixel cinco ou dez vezes enquanto cards alfa sobrepostos se empilham. Mitigações: menos lâminas, maiores, em vez de muitas finas; geometria opaca onde a silhueta permitir; e culleo agressivo dos cards que menos contribuem. Overdraw é o culpado clássico do "minha cena está lenta mas nada parece caro", porque os triângulos são baratos e os pixels são pagos muitas vezes.
Densidade é uma decisão de design, não uma posição de slider
Densa onde o jogador anda e olha, esparsa onde não: uma faixa de 20 m de detalhe rico ao longo da trilha se lê como "exuberante em todo lugar" a uma fração do custo uniforme.
Máscaras de declive e altura fazem parte disso automaticamente (faces íngremes e platôs distantes não precisam de cobertura de solo de forma alguma), e o clustering faz o resto; tufos com vãos renderizam mais barato que preenchimento uniforme e parecem mais naturais, então a vitória de performance e a de beleza apontam na mesma direção. É aqui que o ferramental de colocação ganha seu sustento: pintar densidade com máscaras e regras por espécie, depois assar direto em instâncias nativas do motor, é a diferença entre uma tarde e uma semana. É o núcleo do que o scatter da Numivo faz, e porque assa em folhagem comum e malhas instanciadas, cada técnica deste artigo aplica sem mudança ao resultado. Não há runtime de plugin entre você e as otimizações padrão; a cena assada é só conteúdo do motor.
O loop de profiling
Mesma câmera, mesma vista, uma variável de cada vez: meça o tempo de frame de GPU, os draw calls, o pass de sombra e o overdraw após cada mudança.
Escolha uma "câmera de orçamento" fixa na sua vista mais densa e capture as stats antes e depois de cada passo acima. A disciplina importa porque otimizações de vegetação interagem: uma mudança de distância de cull altera quantas instâncias o pass de sombra vê; uma mudança de LOD altera o overdraw; uma mudança de densidade altera todas de uma vez. Voos aleatórios produzem números aleatórios e discussões infalsificáveis sobre se uma mudança ajudou. Câmeras fixas produzem decisões que você pode defender. Guarde os números numa planilha compartilhada e a linha de tendência te conta a história que uma medição isolada não pode.
Números de campo que vale a pena roubar
- Cull de cobertura de solo: 30–60 m · arbustos: 100–200 m · árvores: linha de visão
- Draw calls para uma vista de floresta instanciada saudável: poucas centenas
- Parcela do pass de sombra em cenas densas: muitas vezes ~metade do custo de vegetação: sombras de grama desligadas é a maior vitória mais barata que existe
- Largura da faixa de dressing da trilha que lê "exuberante em todo lugar": ~20 m
- Número de LOD para uma árvore herói: 3 mesh LODs + impostor opaco
- Alvo de overdraw para grama: menos de ~3× na vista de overdraw, não o 8–10× branco brilhante de cards alfa empilhados
Mini-FAQ
Nanite / geometria virtualizada torna isso obsoleto? Muda quais linhas dominam, não a disciplina. Overdraw de cards alfa, custo de sombra e overhead por instância permanecem todos, e impostores à distância ainda valem. Meça no seu hardware alvo em vez de assumir que a nova tecnologia resolveu seu gargalo específico: pode tê-lo movido, não removido.
Por que minha cena está lenta mesmo em baixa densidade? Os suspeitos de sempre, em ordem: grama projetando sombras dinâmicas, um material único por variante sabotando o agrupamento, distâncias de cull no infinito, ou uma cadeia de LOD alpha-tested empilhando overdraw. Cada um tem uma assinatura de profiler distinta: cheque antes de mudar, ou você consertará o errado.
Quão densa é "densa demais" para o gameplay? A legibilidade em combate limita a densidade antes da performance: se silhuetas somem na bagunça, jogadores culpam o jogo, não o dressing. Densa na vista, moderada na arena é o padrão que sobrevive tanto ao profiler quanto ao playtest.
Devo assar ou manter procedural? Asse para lançar: instâncias assadas perfilam com honestidade e lançam sem dependência de runtime. Mantenha o setup procedural (máscaras, regras, seeds) em controle de versão para poder re-assar após uma mudança de terreno sem refazer o trabalho à mão.
Parecer denso e ser rápido não é uma contradição: é principalmente a disciplina de fazer cinco coisas na ordem certa e provar cada uma com a mesma câmera.