Panda3D/Manual/Compressão de Texturas

Origem: Wikilivros, livros abertos por um mundo aberto.

Voce deve estar familiar com formatos de imagem como JPEG, que pode comprimir dados de imagem dramaticamente e fazer arquivos de imagem muito menores do que eles seriam, em troca de sacrificar um pouco da qualidade da imagem original.

Compressão JPEG apenas é aplicavel ao tamanho da imagem em disco, contudo, assim que que vice carregar uma imagem de textura na memoria, seja ela vindo em JPEG, PNG ou TGA, elas sempre ocupam a mesma quantidade de memoria na sua placa de video ( baseada no tamanho de suas texturas).

Porem existe uma opção diferente, para comprimir imagens de textura dentro da memoria. A maioria das placas de video pode usar varios algoritmos de compressao durante o momento de execução para renderizar diretamente a textura que estava comprimida dentro da memoria. Isso é chamado redução DXT. Não é muti como a compressao JPEG internalmente, mas voce pode pensar nela da mesma forma. Elas possuem algumas coisas em comum: elas reduzem o tamanho da imagem drasticamente ( 4 ou ate 8 vezes menor ), e elas sacrificam parte da qualidade da imagem.

Compressao da textura durante a execução

A forma mais facil de habilitar a compressao de imagens de textura é colocar o seguinte no seu arquivo Config.prc:

compressed-textures 1

Isso falará ao seu driver de graficos para comprimir cada textura assim que ela o carregar. Isso significa que demorará um pouco mais para carregar a textura, mas a textura resultante ocupara muito menos espaço na memoria.

Existe uma importante vantagem em comprimir textura na hora da execução dessa forma: a placa de video sera capaz de comprimir todas as texturas usando qualquer algoritmo de compressao de textura que ela entenda, DXT ou outro. Nem todas as placas suportam algoritmos de compresssao, entao usando essa opção permite que o driver escolha o melhor algoritmo que ele suporte. Se a placa de video não suporta qualquer algoritmo de compressao, ele simplesmente vai carregar a textura sem comprimir. De qualquer forma sua aplicação ainda vai rodar e todas suas texturas serão visiveis.

Formato de arquivo TXO

Panda tem um dormato de arquivo nativo usado para armazenar imagens de textura chamado TXO ( abreviação para "Objeto Textura" ). Isso é similar á arquivos BAM. Um arquivo TXO contem todos os dados da imagem de textura em um formato muito similar a representaçao interna do panda, entao ele carrega na memoria bem rapidamente.

Mais importante, talvez, arquivos TXO podem opcionalmente armazenar imagens de textura pre-comprimidas. Voce pode usar o comando.

egg2bam -txo -ctex model.egg -o model.bam

para converter o modelo para um arquivo BAM, e todas as suas texturas para arquivos TXO, com os dados de imagem pre-comprimidos dentro do arquivo TXO, de forma que não sera preciso comprimi-lo na hora da execução. Voce pode precisar especificar "pandagl" ao inves de "pandadx9" como motor de renderização enquanto voce roda o comando egg2bam - no momento desse texto, existiam problemas usando o driver directx do panda em modo offline como esse. Contudo, os arquivos TXO resultantes serao carregados ou na OpenGL ou no DirectX na hora da execução.

Arquivos TXO tem os mesmo problemas de arquivo BAM: Eles estao ligados á uma versao particular do panda, entao voce precisara regenera-los quando voce faz um upgrade para uma nova versao do panda.

Um grande contratempo ao armazenar imagens de texturas pre-comprimidas dessa forma é que sua aplicação pode nao rodar em todas as placas de video. Nem todas as placas de video suportam todos os tipos de compressao DXT, e se voce tentar carregar um arquivo TXO em uma placa de video que nao o entenda, ele simplesmente nao vai carregar. Então, pre-comprimir todas suas texturas faz a aplicação menos portavel.

Formato de arquivo DDS

Em adição ao formato nativo TXO, existe um relativo padrao chamado DDS, que tem as mesmas propriedades do TXO. Como o TXO voce pode armazenar imagens pre-comprimidas em um arquivo DDS. A maior vantagem do formato DDS é que existem varias ferramentas disponiveis na internet que geram arquivos DDS, incluindo o GIMP e plugins Photoshop. Note contudo que o carregamento de arquivos DDS é uma nova habilidade do panda, e esse arquivos nao eram suportados antes da versai 1.6)

Gerar seus proprios arquivos DDS tem varias vantagens; a maior dentre elas é que voce tem controle total sobe os artefatos de compressao de sua textura. Contudo existem os mesmos problemas de protabilidade que armazenar imagens de texturas pre-comprimidas em arquivos TXO: existe a possibilidade que algumas placas de video nao reconheçam a compressao de textura que voce usou, caso em que ela simplesmente nao vai carregar.

Texture cache

Existe um compromisso enre compressao dinamica e texturas pre-comprimidas: voce pode pedir ao panda que comprima as texturas na hora, e depois salvar a imagem comprimida resultante para um arquivo TXO no disco. A proxima vez que voce carregar aquela textura particular, ela carregara rapidamente de seu arquivo TXO. Ja que o arquivo TXO foi gerado pelo driver de video do usuario final, ela vai presumidamente usar um algoritmo de compressao suportado.

Para habilitar essa habilidade, simplesmente insira as seguintes linhas no seu arquivo Config.prc:

compressed-textures 1 model-cache-dir /c/temp/panda-cache model-cache-compressed-textures 1

Onde model-cache-dir especifica qualquer pasta no disco ( ela sera criada se nenhuma existir ). Note que model-cache-dir ja pode ter sido especificado; a distribuição padrão do panda especifica o model-cache para agilizar o carregamento de arquivos BAM.

Como o formato de arquivo DDS, a variavel model-cache-compressed-textures é uma nova habilidade do panda, e não existia antes da versao 1.6