Recentemente, adicionei um empacotador de textura ao meu projeto que compacta uma certa quantidade de texturas em uma única, como esta:
Assim, por exemplo, este tem 582x1023 pixels de tamanho. O objetivo de adicionar essas texturas compactadas era obviamente melhorar o desempenho, então eu queria procurar o tamanho ideal de textura para texturas OpenGL (usando LWJGL). O que descobri foi que um tamanho máximo de textura com suporte amplo parece ser 1024x1024, de acordo com isso, por exemplo. Isso me parece estranho, porque obviamente muitas texturas soariam maiores que isso, então o que acontece com elas? Tenho certeza de que a maioria das placas gráficas suporta texturas maiores que isso. Posso razoavelmente esperar que a maioria das placas gráficas manipule, por exemplo, texturas de 4096 x 4096 (ou talvez até maiores que isso)?
Para chegar ao meu segundo ponto (espero que isso ainda conte como uma pergunta, mas se resume basicamente ao mesmo problema): as texturas devem ser dimensionadas com uma potência de 2 (256x256, 512x512, 1024x1024, 2048x2048, ..) e devem Almofada texturas compactadas menores que isso para o próximo poder de 2? De acordo com essa pergunta de 2011, não é um requisito, mas pode melhorar o desempenho e evitar pequenos erros, e este de 2012 diz que você definitivamente deve preencher as texturas. Portanto, percebo que essas perguntas já foram feitas antes, mas são razoavelmente datadas para que as respostas mudem e, além disso, cada uma delas responde parcialmente à minha pergunta. Como outros projetos / lidam com isso?
TL; DR: Quais tamanhos de texturas posso esperar para a maioria das placas gráficas? Quais são os tamanhos ideais de textura (ou existem)? Devo preencher a largura das texturas até a próxima potência de 2?
fonte
Respostas:
Vou dar uma facada em responder a isso, apesar de YMMV. Uso a Pesquisa de hardware do Steam ( http://store.steampowered.com/hwsurvey?platform=pc ) para determinar qual é a RAM de vídeo (VRAM) disponível na maioria dos computadores. Olhando para os resultados de 13/10/2015 (hoje), quase 85% das pessoas têm 1024 MB de VRAM.
Sua pergunta é muito ampla, pois não indica o hardware de destino (console, PC, dispositivo portátil, dispositivos móveis?) Vou falar sobre PCs e você pode extrapolar para outras plataformas com base nas especificações de hardware.
Assumindo 32 bits de cor + alfa por pixel, ou seja, 4 bytes por pixel, a VRAM de 1 GB pode conter no máximo ~ 256 milhões de pixels. Isso equivale a 256 texturas de 1K por 1K. Isso pressupõe (incorretamente) que você deseja manter apenas texturas na sua VRAM, enquanto haverá várias outras coisas (por exemplo, dados de malha, se você estiver trabalhando em 3D) para as quais você precisa deixar espaço. Você provavelmente também deseja permitir mais espaço para o mapeamento mip de texturas, o que geralmente funciona melhor se suas texturas são potências de dois.
Os consoles modernos (XBOX One e PS4) têm 4-8 GB de RAM unificada, a maioria dos dispositivos portáteis e dispositivos móveis têm de 1 a 2 GB de RAM unificada, com restrições sobre o quanto você pode alocar como VRAM.
Normalmente, eu criava texturas 2K para que funcionasse na maioria dos PCs, permitindo a opção de diminuir a escala para dispositivos de ponta. Se você estiver escrevendo um jogo em 2D e quiser direcionar telas de alta resolução (4K, iPad retina, etc), poderá usar texturas 4K em segundo plano, mas para a maioria das outras partes, pode ser um exagero.
Espero que isso tenha ajudado e não tenha turvado as águas.
fonte