No D3D11, eles ainda têm a capacidade de criar buffers de índice de 16 e 32 bits .
Poucos modelos usarão mais do que o máximo (20k tri) que um buffer de índice USHORT pode suportar, mas pagarei realmente um custo de desempenho ruim por sempre usar um formato INT (32 bits)?
A economia de memória não é muito (2 bytes por índice!). Para um modelo tri de 20k, são apenas 40 kB de memória que estamos economizando para usar o USHORT (em comparação com provavelmente muito mais apenas para os dados de vértice desse mesmo modelo).
Vale realmente a pena usar os buffers de índice USHORT, ou isso é apenas um resquício de quando os computadores tinham menos memória nos anos 90?
index-buffer
bobobobo
fonte
fonte
Respostas:
Você deve considerar que as GPUs ao buscar os dados para alimentar os sombreadores de vértice exigem muitas chamadas pequenas, porque elas podem armazenar apenas alguns triângulos ao mesmo tempo, e a busca de dados na VRAM é uma operação muito lenta. Portanto, suponho que se você usar metade dos bytes para os índices, a GPU poderá buscar duas vezes os índices para o cache renderizar triângulos.
4 MB Pode haver uma pequena quantidade de memória para espaço de armazenamento, mas se você precisar fazer uma chamada complexa para processar apenas alguns bytes, isso poderá afetar o desempenho de maneira perceptível. Atualmente, as placas de vídeo são poderosas o suficiente para torná-las irrelevantes em jogos que não precisam processar muita geometria, você ... poderia fazer alguns benchmarks para renderizar um modelo com os dois tamanhos de índice, se você realmente quiser saber.
Os tempos de carregamento também são mais rápidos com índices de 16 bits e, na verdade, toda gravação ou leitura, a menos que você possa controlar efetivamente o alinhamento da memória e a paginação adequada. Portanto, não se trata apenas da memória necessária, mas de quanto é preciso para lidar com isso. Se você estiver trabalhando com buffers dinâmicos que precisam ser movidos pelo barramento para a GPU em algum momento entre os quadros, use índices de 16 bits quando possível. Se estiver renderizando geometrias ainda menores, é possível agrupar muitos índices em um único buffer de índice de 16 bits para que todos sejam copiados para a GPU em uma única chamada.
Aqui você pode encontrar algumas informações sobre como as GPUs da ATI mais recentes funcionam:
Recursos de treinamento para desenvolvedores da ATI Stream (desculpe por não encontrar o documento exato) Não li muito sobre os da NVidia, mas acho que eles funcionam mais ou menos com uma abordagem semelhante.
fonte
Embora a velocidade da memória e da CPU tenha melhorado ao longo dos anos, os jogos ainda aumentam os limites de hardware e software. Se você está carregando 100 desses modelos, economiza 4 megabytes de memória. Em certas situações, vale a pena economizar o máximo de memória possível. Isso pode ser o suficiente para você carregar outro modelo, ou o suficiente para adicionar mais alguns efeitos sonoros ou outra música. Para a maioria dos jogos AAA, esse tipo de economia é vital para tornar as coisas melhores do que a concorrência.
Claro, tudo depende do jogo e, para muitos projetos, não vale a pena. Mas se você quiser empurrar o hardware o máximo possível, encontrará maneiras de economizar o máximo de memória possível, para ter espaço para adicionar mais coisas legais.
fonte
Não se trata apenas de memória; algum hardware simples não suporta índices de 32 bits e deve executar o pipeline de vértices no software se você os usar. Está ficando mais raro, mas você ainda pode ter uma surpresa desagradável quando se deparar com uma. Os índices de 16 bits também podem ser executados mais rapidamente em geral, o que pode ser importante se você estiver sob pressão de desempenho, mas precisará avaliar e avaliar o benefício de desempenho extra dos índices de 16 bits versus a possibilidade de precisar dividir um modelo porque não há uma resposta única para a correta em todas as situações.
fonte