Converta PNG para DDS no formato DXT5 e visualize resultados em tempo real usando python

Se você tem certeza de que entende o que esperar do formato DXT5, verifique: no spoiler, a animação está à esquerda, uma imagem PNG de 4x4 pixels à direita - convertida em DDS (DXT5)
Se isso não o surpreender, fique à vontade para seguir em frente.

Sim, eu sei exatamente como a conversão para DXT5 acontece.
imagem

Se você estava procurando uma ferramenta ou uma oportunidade em tempo real para ver o que acontecerá com a sua imagem PNG após a conversão para o DXT5 - bem-vindo ao artigo.

Finalidade


Uma visão geral do formato DXT5 e uma ferramenta que permite ver o resultado da conversão em tempo real.

O artigo não foi projetado para profissionais, é apenas para orientação.

Para quem


  • Quem não enfrentou a criação de texturas
  • Desenhar bitmaps: pixelart / 2D
  • Quem se perguntou que tipo de animal como S3TC / DXT
  • Quem não procura maneiras fáceis de criar jogos
  • Quem está tentando criar jogos sem estruturas conhecidas (Unity, etc.)
  • Use um sistema UNIX (porque a ferramenta, que consideraremos posteriormente, foi testada apenas no Ubuntu)

O que é S3TC / DXT


Resumidamente, trata-se de compactação de imagem, para que: a) use menos (v) RAM; b) carregado mais rapidamente na (v) RAM.

Aqui me permito deixar um link para uma placa onde há um breve resumo dos formatos e por que / quando usá-los aqui .

Se você quiser ler com mais detalhes sobre como esse formato pode ser usado em jogos, aqui está um artigo em 4 partes em inglês ou , se você prefere ler quais são as fórmulas da compactação, então há um artigo em russo , em inglês .

Edição


DXT5 (tomei como exemplo, porque o uso no projeto atual) é um formato de compactação com perdas, por isso sacrificamos a cor. Primeiro, as cores não estarão no formato RGB de 8 bits, ou seja, não RGB888, mas no formato RGB565. Ainda há metade do problema com isso. Mas o principal problema (na minha opinião) é que dentro de um texel, que é de 4 por 4 pixels, a saída terá no máximo 4 cores: 2 básicas e 2 adicionais.

Imagine que você é um desenvolvedor (ou designer / artista) que não encontrou o desenvolvimento de jogos antes (como exemplo) e decidiu criar um belo sprite multicolorido no estilo pixelart / 2D, ou apenas uma imagem em segundo plano (novamente, bitmap, não vetor) .

Pegou um mouse / tablet, desenhou. Parece bonito (vamos supor que seja bonito).

imagem

Para convertê-lo em DDS, você precisa usar o GIMP, o Photoshop com plug-ins ou algo semelhante. Mas você verá o resultado somente depois de abrir o arquivo resultante.

Vamos ver o que aconteceu (imagine que vemos apenas o lado direito da imagem, no caso de abrir um arquivo DDS com um GIMP):

imagem

A menina estava definitivamente triste, as flores murchas, o diadema se tornou uma corda. "Hmm", você diz. Agora, se eu vi o que aconteceu antes ... E aqui a ferramenta que eu montei para as minhas necessidades pode ajudar (condicionalmente) - Pyglet PNG to DDS editor

Porque


Para editar / editar o arquivo de origem, seleção de cores aproximadas, preparação de uma paleta aproximada.

Esse "editor" instantaneamente converte uma imagem PNG em DDS e você pode ver imediatamente o que acontece ao converter e inserir um sprite em um jogo.

Porque


Porque eu não encontrei ferramentas que permitam ver em tempo real como será sua imagem / textura.

Isso é tudo?


Nesta fase, sim. Muitas coisas podem ser adicionadas a esse "editor", mas tudo tem seu tempo.

Gostaria de saber mais da comunidade: como você resolve essas situações quando precisa verificar o que acontecerá com a textura na saída.

PS: o editor trabalha relativamente normalmente com imagens de até 512 * 512. Ele flui da memória, mas não muito :) (no código você pode encontrar esse método pelo comentário "!!! ACHTUNG !!!").

Source: https://habr.com/ru/post/pt480214/


All Articles