Texturas compactadas vs não compactadas

É verdade que os estúdios usam texturas não compactadas, mas é por uma razão. Eles são feitos para que nossos computadores ou consoles possam executá-los em um FPS mais alto. Se eles tivessem texturas compactadas, teriam que ser descomprimidos durante o jogo, o que usaria mais recursos do sistema. Assim, para otimizar o jogo, eles usam texturas não compactadas e vídeos sem perdas. Nesse caso, um tamanho maior do jogo é melhor do que comprometer a diversão.

Isso também é visto no áudio, ou seja, os arquivos de áudio são mantidos sem perdas pelo mesmo motivo, como o áudio no jogo Titanfall que usa 35 GB de espaço em disco.

Fonte:

Respawn realmente explica por que a instalação de Titanfall é tão grande

-fliptrail

Toda empresa de desenvolvimento de jogos que não é completamente administrada por chimpanzés usa texturas compactadas. No entanto, existem diferentes tipos de compactação e níveis diferentes, dependendo de quantos bits você deseja jogar fora e de quais canais.

E para muitas texturas, especialmente as complexas, ocupadas e naturais, como grama ou rochas, onde não há gradientes largos e suaves, as texturas compactadas podem ser quase indistinguíveis das não compactadas.

Por exemplo, você pode reduzir os canais RGB de 8 bits para 5 bits para vermelho e azul e 6 bits para verde para armazenar todos os 3 canais em 2 bytes (nossos olhos são mais sensíveis ao verde). Além disso, para algumas texturas, você precisa de um bom intervalo de valores alfa, às vezes apenas um pouco, ou às vezes é possível remover completamente o canal alfa.

Em geral, algoritmos de compactação complexos como codificação de comprimento de execução e wavelets (em coisas como PNG e JPG) não são bons, porque o sistema precisa gastar tempo descompactando-os no tempo de carregamento em texturas de 24 ou 32 bits completamente descompactadas. Mau Mau Mau.

Algoritmos de compactação baseados em blocos como DXT, PVRTC, ETC e GNF são muito melhores porque podem ser carregados como estão, sem descompactação e despejados diretamente na memória de vídeo, uma vez que a maioria das GPUs modernas pode lidar com amostragem diretamente de vários formatos compactados. Eles usam muito menos memória e são mais rápidos por causa disso.

A razão pela qual as texturas têm uma resolução tão alta é que, nos jogos em 3D, é possível ajustar a câmera até personagens ou cenários e seria chocante ver texturas muito borradas em um personagem ou parede durante uma cena em close.

Os desenvolvedores certamente comprimem as texturas.

Você está fazendo duas suposições erradas na sua pergunta:

  • A resolução do jogo é 1080p, então as texturas em 4k são “muito grandes”: a resolução de renderização é apenas um fator para decidir o tamanho da textura. A pergunta real que precisa ser respondida é "Qual será o tamanho desse objeto na tela?" Se o jogador nunca conseguir chegar a menos de 10 metros de uma planta com 1 metro de altura e, em resolução 1080p, com uma câmera com um FoV de 90 e um ZNear de 30cm, essa planta nunca será maior que 50-60 pixels, então uma textura de 64 x 64 seria perfeita. Por outro lado, se você realmente se aproximar de um NPC, talvez até dê um zoom (se o jogo tiver esse recurso), esse NPC pode acabar com 10.000 pixels de altura (você só verá um pequeno pedaço dele) , claro). Dependendo da importância desse NPC e dos recursos disponíveis, os desenvolvedores podem muito bem decidir alocar uma textura enorme para ele (ou, mais provavelmente, várias texturas grandes). É típico para jogos AAA usar texturas grandes para o personagem do jogador, a interface do usuário (e encaixar vários elementos de interface na mesma textura), armas, terreno, companheiros, veículos.
  • O tamanho das texturas no disco é grande e, portanto, não é compactado: simplesmente não é possível para um jogo moderno usar bitmaps não compactados; a pegada de memória seria enorme, tanto no disco quanto na memória de vídeo. A compactação DXT é padrão no setor, mas pode não obter a mesma taxa de compactação que o JPG, mas é rápido descompactá-la em tempo real usando apenas a GPU