Otimização corta draw calls pela raiz em projeto estilo Resident Evil Village e reduz frame time de 13,73 ms para 12,03 ms

Uma correção estrutural no cenário eliminou geometria duplicada e reduziu o custo de renderização em um projeto 3D com estética de Resident Evil Village: o frame time caiu de 13,73 ms para 12,03 ms em um comparativo controlado, com menos chamadas de render e números gerais menores ainda no editor, antes mesmo de iniciar a execução do jogo.

O gargalo central estava no uso de paredes duplicadas para representar as duas faces (lado interno e externo). Em termos de GPU/CPU, isso dobra o volume de objetos na tela e pressiona o sistema de render commands, também conhecidos como draw calls (as “ordens” enviadas para a placa de vídeo desenhar cada conjunto de malhas e materiais).

Explicacao sobre paredes duplicadas e impacto em draw calls e desempenho em jogo 3D

Discussao sobre duplicacao de paredes no cenario e aumento de draw calls que prejudica a performance.

Na prática, cada elemento renderizado exige que a GPU recupere texturas e materiais, execute shaders (programas que definem como a superfície é desenhada) e sincronize o trabalho com o processador. Esse ciclo se repete frame a frame; quando a cena carrega objetos demais dentro do enquadramento, o custo por quadro cresce e o desempenho desaba, principalmente em hardware mais fraco.

A correção adotada foi reconstruir todas as paredes com duas faces em uma única malha, evitando a necessidade de duplicação. Além de cortar o excesso de geometria, a solução padronizou uma espessura consistente para impedir light leaking (vazamento de luz), um artefato comum quando paredes finas deixam a iluminação atravessar superfícies que não representam o comportamento do mundo real.

Medição controlada: câmera fixa para isolar o impacto

Para medir o ganho sem interferência de movimentação ou streaming de conteúdo, a análise foi feita com câmera estacionária e leitura das métricas no viewport. O objetivo é reduzir variáveis: com o enquadramento travado, qualquer melhora tende a refletir diretamente a mudança de geometria e a queda de trabalho de renderização.

Captura de comparacao com camera fixa medindo draws e FPS no editor durante teste de otimizacao

Preparacao de comparativo antes e depois com camera estacionaria e leitura de draws e FPS no viewport.

Mesmo com parte do carregamento acontecendo em runtime (elementos entrando e saindo conforme a navegação), uma cena pesada já é suficiente para comprometer o frame time. Por isso, o foco inicial foi remover desperdício óbvio: paredes em dobro em um cenário com grande volume de superfícies repetidas.

Resultados: queda mensurável no custo por frame

O comparativo consolidou o efeito direto da correção: o tempo por quadro passou de 13,73 ms para 12,03 ms. Em termos simples, o motor levou menos tempo para desenhar cada frame, porque menos coisas precisaram ser chamadas para render e o pipeline ficou mais leve.

Comparativo de metricas mostrando frame time antigo 13.73 ms e novo 12.03 ms apos reduzir paredes

Exibicao de resultados com reducao de frame time e queda nos numeros de renderizacao apos otimizar paredes.

O ajuste ainda abre espaço para novas etapas: combinar paredes em menos chamadas por meio de instancing e outras técnicas de agrupamento. Mesmo com dois materiais no conjunto atual (o que tende a aumentar chamadas separadas por material), a otimização já mostrou impacto relevante apenas com a reorganização da malha.

Por que isso importa para Unreal Engine e projetos 3D

O problema não é “gráfico bonito” e sim arquitetura de cena. Em pipelines comuns no Unreal Engine, é frequente priorizar aparência e esquecer draw calls e volume de geometria. O resultado costuma ser um jogo visualmente forte, mas com custo alto de render, stutter e queda de FPS ao entrar em áreas densas.

Para ver o comparativo completo e as métricas em ação, o material oficial está disponível no link abaixo.

Fonte: Neriverso