Devo atribuir a cada personagem seu próprio VBO ou devo agrupá-los em um único VBO?


10

Estou fazendo um jogo em primeira pessoa em 3D. Devo atribuir a cada personagem seu próprio VBO ou devo agrupar todos os caracteres em um único VBO? Quais são os prós / contras?


Esta é uma pergunta duplicada. Do que, não tenho muita certeza, mas é uma bobagem.
30711 DeadMG

É semelhante a isso , mas não acredito que seja uma duplicata per se, para começar, é Open-GL (não tenho certeza se existem diferenças específicas), enquanto a outra pergunta é sobre deformáveis ​​em DirectX11 (provavelmente usando o mosaico, o que muda as coisas).
Thomas Russell

Respostas:


11

Essa é realmente uma escolha entre desempenho e flexibilidade, mas vou listar minhas opiniões sobre isso.

Um único VBO

Os lados positivos são:

  • Apenas uma chamada para desenhar sua cena. Isso aumenta o desempenho. Embora seu aplicativo possa exigir várias chamadas de sorteio, você ainda pode ter um único VBO e deixar a contagem e o deslocamento decidirem seu desenho.
  • Não exigindo alterações de estado entre seus objetos. Isso aumenta o desempenho.

e os lados negativos são:

  • Difícil de gerenciar, embora isso dependa de como você escreve seu código, se ele foi projetado corretamente, etc.
  • Ao dizer que é difícil gerenciar, quero dizer coisas como atualizar o VBO, definir o deslocamento correto para cada objeto etc.

VBO individual: s

Os lados positivos são:

  • Fácil de implementar.
  • Mais fácil de gerenciar desde o início.

e os lados negativos são:

  • Muitas mudanças de estado. Isso diminui o desempenho.
  • Muitas chamadas de sorteio. Isso diminuirá o desempenho.

Sumário

Eu recomendo que você crie um perfil do seu aplicativo; obtenha seu gargalo real nos dados que você pode ver. A otimização prematura pode ser mostrada (neste caso) como desnecessária. No entanto, dito isso, se você descobrir uma perda real de desempenho em seu aplicativo, dado o cenário individual da VBO: s , poderá começar a implementar uma única VBO.

No entanto, contanto que não seja necessário (o número de objetos é baixo, não há muitas alterações de estado no geral, etc.) eu recomendaria usar VBO: s individuais, a menos que você veja que isso não vai funcionar.

Editar

Eu esqueci de mencionar que ficaria tudo bem com várias chamadas de empate. O mais importante em tempos críticos de desempenho é manter as mudanças de estado no mínimo. Você pode simplesmente definir o número de índices a serem processados ​​e um deslocamento para cada chamada de empate, e isso é bom. Mas, no entanto, mantenha as mudanças de estado o mais baixas possível e faça o menor número possível de chamadas, esse é o grande olá desta resposta, ou pelo menos o que tentei dizer.


Se você está fazendo apenas uma chamada, isso o atrapalha para alterações de estado por malha (não por vértice) (uniformes etc.). Também força um tudo ou nenhum para desenhar tudo. Claro que você pode decompô-lo para que haja apenas 1 chamada múltipla de VBO, mas e se você quiser adicionar uma nova malha?
Deceleratedcaviar

1
@ Daniel: Uma nova malha deve simplesmente ser atualizada / adicionada ao VBO. Eu esqueci de mencionar que ficaria tudo bem com várias chamadas de empate. O mais importante em tempos críticos de desempenho é manter as mudanças de estado no mínimo. Você pode simplesmente definir o número de índices a serem processados ​​e um deslocamento para cada chamada de empate, e isso é bom. Mas, no entanto, mantenha as mudanças de estado o mais baixas possível e faça o menor número possível de chamadas, esse é o grande olá desta resposta, ou pelo menos o que tentei dizer. :-)
Wroclai 31/07

Lote, lote, lote em 2005 chegou à conclusão de que você pode comprar entre 10k e 25k lotes em uma CPU de 1 GHz antes de ficar completamente vinculado à CPU processando apenas as chamadas de empate. Como isso se traduz em algumas centenas de lotes por quadro de 60Hz, colocar tudo em um único VB não é essencial, mas certamente ajuda se você agrupar geometria com características semelhantes (vida útil, taxa de atualização, atributos) no mesmo VB.
Lars Viklund #

1
Eu acho que você também deve levar em consideração o descarte de frustum.
Tara
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.