Criação de perfil de uma renderização de gráficos sem um profiler

9

Hoje em dia temos ferramentas bastante avançadas para resolver a renderização, permitindo ver as diferentes etapas, o tempo gasto com chamadas de desenho, etc. Mas sem elas o pipeline de gráficos é uma caixa preta quando se trata de entender o que está acontecendo dentro.

Suponha, por algum motivo, que você não tenha essa ferramenta ou uma ferramenta muito limitada. Como você avaliaria de qualquer maneira o que está demorando na sua renderização?

Estou ciente de truques como descartar chamadas de desenho para ver o tempo da CPU, definindo uma viewport 1x1 para ver o custo da geometria, usando um sombreador de fragmento mudo para destacar a taxa de preenchimento ... Eles já são úteis, idéia do que está acontecendo e não diz nada sobre o nível de paralelismo.

Além disso, obter o tempo gasto em cada fase por chamada de sorteio parece ser difícil, especialmente quando se leva em conta a falta de precisão devido ao ruído durante a medição.

Quais truques você usa quando sua mochila está quase vazia e você ainda precisa fazer o perfil da sua renderização? Como é o seu canivete suíço pessoal?

    
por Julien Guertault 14.07.2011 в 08:34
fonte

2 respostas

4

Tempo de renderização do tempo de frame

Tempo absoluto gasto para código pequeno / estágio / etc. não é tão relevante quanto a otimização / agrupamento / paralelismo / versão do driver da GPU torna quase impossível ter uma medida de código precisa sem os contadores da GPU. (o que você pode obter se você usar com libs de fornecedores)

O que você pode medir facilmente é o impacto de cada mudança de código. Você só terá impacto relativo e é o que você realmente precisa de qualquer maneira. E isso usando apenas o tempo de renderização de quadros.

Idealmente, você deve conseguir editar o código do shader ou do pipeline durante o tempo de execução e ter uma maneira direta de verificar o impacto em uma cena típica, como a comparação de gráficos entre vários caminhos de código. (cuidado com cenas estáticas, senão você terminará com visualizações estáticas altamente otimizadas, mas com desempenho de cenas dinâmicas ruins)

Aqui está a lista de canivetes suíços:

  • estados da cena loader
  • gravador de cenas (caminhos de câmera / adicionar-remover entidades, textura, malha, entrada falsa, etc.) usando estados de cena.
  • saver de estados de cena
  • registrador de tempo do quadro de cena (não apenas a média final, mas o tempo de renderização de cada quadro)
  • recarga de código de shader on-the-fly
  • switch de caminho de código on-the-fly
  • leitor de registro de tempo de quadro + gráficos + estrutura de estatística

Observe que o estado da cena load / save / record é útil para muitas outras coisas, desde depuração para desfazer / refazer a recarga imediata, sem mencionar savegames. Adicione um tomador de screenshots + diff de imagem, e você também pode testar o código gráfico de teste.

Se puder, adicione isso ao seu servidor de IC para que o impacto de código enorme não passe despercebido. (ajuda também os artistas quando eles registram seus ativos, sem avaliar o impacto da renderização) Uma leitura obrigatória sobre o trabalho de teste gráfico de IC relacionado está lá: link

    
por Tuan Kuranes 14.07.2011 / 13:00
fonte
1

Nota: Estou respondendo à pergunta: "Criando um perfil de renderização de gráficos com um criador de perfil", desde aquele que eu estava procurando;)

Estou trabalhando principalmente no Mac e estou usando várias ferramentas:

  • A gDebugger versão 5.8 está disponível no Windows e Mac (esta ferramenta foi comprada pela AMD, a versão v6 é Windows apenas). Ele fornece estatísticas sobre alterações de estado, uso de texturas, chamadas de desenho, etc. Também é útil depurar o mapeamento de texturas e ver como sua cena é desenhada, passo a passo.
  • PVRUniSCoEditor é um editor de shaders. Ele compila em tempo real e fornece detalhes preciosos sobre os ciclos estimados e registra o uso.
  • Instrumentos (de XCode Utilities, OSX apenas), obtém informações do driver OpenGL, é ótimo encontrar gargalos, já que você pode rastrear que parte da GPU é usada em 100% (ladrilhador, renderizador, unidade de textura etc. ..)
  • Adreno Profiler , uma ferramenta do Windows para criar perfis de dispositivos móveis baseados em Adreno. (Muito boa ferramenta se você trabalha em aplicativos Android;))

Qual é o seu truque sobre o "shader fragment shader para destacar a taxa de preenchimento"? (desenhar uma cor simples? ou algo mais avançado?)

    
por Maxime 21.07.2011 / 11:40
fonte