Convierta PNG a DDS en formato DXT5 y vea los resultados sobre la marcha usando python

Si está seguro de que comprende qué esperar del formato DXT5, compruebe usted mismo: en el spoiler, la animación está a la izquierda, una imagen PNG de 4x4 píxeles, a la derecha, convertida a DDS (DXT5)
Si esto no te sorprende, no dudes en seguir adelante.

Sí, sé exactamente cómo ocurre la conversión a DXT5.
imagen

Si estaba buscando una herramienta o una oportunidad sobre la marcha para ver qué sucederá con su imagen PNG después de convertirla a DXT5, bienvenido al artículo.

Propósito


Una descripción general del formato DXT5 y una herramienta que le permite ver el resultado de la conversión sobre la marcha.

El artículo no está diseñado para profesionales, es solo para orientación.

Para quien


  • ¿Quién no se enfrentó a la creación de texturas?
  • Dibujar mapas de bits: pixelart / 2D
  • ¿Quién se preguntó qué tipo de bestia como S3TC / DXT
  • ¿Quién no busca formas fáciles de crear juegos?
  • Quién está tratando de crear juegos sin marcos conocidos (Unity, etc.)
  • Utilice un sistema UNIX (porque la herramienta, que consideraremos más adelante, se probó solo en Ubuntu)

¿Qué es S3TC / DXT?


Muy brevemente, esta es la compresión de imagen, de modo que: a) usa menos (v) RAM; b) cargado más rápido en (v) RAM.

Aquí me permito dejar un enlace a una placa donde hay un breve resumen de los formatos y por qué / cuándo usarlos aquí .

Si desea leer con más detalle acerca de cómo se puede usar este formato en los juegos, aquí hay un artículo en 4 partes en inglés, o si prefiere leer qué fórmulas es la compresión en sí, entonces aquí hay un artículo en ruso , en inglés .

Problema


DXT5 (lo tomé como ejemplo, porque lo uso en el proyecto actual) es un formato de compresión con pérdida, por lo que sacrificamos el color. Primero, los colores no estarán en formato RGB de 8 bits, es decir no RGB888, sino en formato RGB565. Todavía hay la mitad del problema con esto. Pero el problema principal (en mi opinión) es que dentro de un texel, que es de 4 por 4 píxeles, la salida tendrá un máximo de 4 colores: 2 básicos y 2 adicionales.

Imagine que es un desarrollador (o diseñador / artista) que no se ha encontrado con el desarrollo del juego antes (como ejemplo) y decidió crear un hermoso sprite multicolor en el estilo de pixelart / 2D, o simplemente una imagen en el fondo (de nuevo, mapa de bits, no vector) .

Levantó un mouse / tableta, dibujó. Parece hermoso (supongamos que es hermoso).

imagen

Para convertirlo a DDS, debe usar GIMP, Photoshop con complementos o algo similar. Pero verá el resultado solo después de abrir el archivo resultante.

Veamos qué sucedió (imagine que solo vemos el lado derecho de la imagen, en el caso de abrir un archivo DDS con un GIMP):

imagen

La niña definitivamente estaba triste, las flores marchitas, la diadema se convirtió en una cuerda. "Hmm", dices. Ahora, si vi lo que sucedió antes ... Y aquí la herramienta que reuní para mis necesidades puede ayudar (condicionalmente ayuda) - Pyglet PNG to DDS editor

Porque


Para editar / editar el archivo fuente, selección de colores aproximados, preparación de una paleta aproximada.

Este "editor" sobre la marcha convierte una imagen PNG a DDS y puede ver de inmediato lo que sucede al convertir e insertar un sprite en un juego.

Porque


Porque no encontré herramientas que le permitan ver sobre la marcha cómo se verá su imagen / textura.

¿Eso es todo?


En esta etapa, sí. Se pueden agregar muchas cosas a ese "editor", pero todo tiene su tiempo.

Me gustaría saber más de la comunidad: ¿cómo se resuelven estas situaciones cuando se necesita verificar qué sucederá con la textura en la salida?

PD: el editor funciona de manera relativamente normal con imágenes de hasta 512 * 512. Fluye de la memoria, pero no mucho :) (en el código puede encontrar este método con el comentario "!!! ACHTUNG !!!").

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


All Articles