Gimp 2.6.12: modifica el canal alfa conservando el color

Esto es para un videojuego en el que una máscara de especularidad está en el canal alfa del mapa normal. Necesito crear una imagen en la que el valor alfa de algunos píxeles sea 0 (para indicar que no hay especularidad), pero en la que se conserven los valores de color de esos píxeles (manteniendo los datos normales).

Encontré una manera de hacer esto manualmente usando imagemagick, colocando mi canal alfa deseado en una imagen separada y luego fusionándolos. Así es cómo:

convert ground_0045_nm.tga alpha.tga -alpha off -compose copy_opacity -composite result.tga

Esto da como resultado una imagen con los canales de color de ground_0045_nm.tga y el canal alfa de alpha.tga. (No pude incrustar ejemplos, lo siento).

Lo que estoy buscando es una forma de hacer esto en GIMP.

El enfoque obvio sería pegar el canal alfa deseado en una máscara de capa y luego aplicarlo. Desafortunadamente, GIMP parece desechar los datos de color de los píxeles transparentes si hago esto. Lo que significa que si desactivo el canal alfa, veo una textura blanca en su mayoría en blanco.

También puedo abrir mi imagen correcta, producida con imagemagick, y GIMP parece desechar los datos de color en el momento de la carga.

Sin embargo, puedo verificar que mi imagen es correcta al cargarla en el motor del juego y piratear los sombreadores GLSL para mostrar el mapa normal directamente.

¿Hay alguna forma de evitar este comportamiento de GIMP? Sospecho que esto puede ser un error de GIMP.

Respuestas (2)

Esta no es una opción estándar para los programas de imágenes, como descubrió. Sin embargo, GIMP, incluido GIMP 2.6 , tiene esa opción, pero para archivos .png (podrá ver la opción para "conservar información de color para píxeles transparentes" en el cuadro de diálogo exportar a .PNG).

Para un archivo TGA, sus opciones son: editar el complemento del archivo TGA en GIMP y copiar la funcionalidad desde el complemento .PNG. O use otro programa para convertir un archivo PNG a TGA que conserva la información de datos de píxeles (tal vez imagemagick lo haga).

Aparte de eso, no sé qué tecnologías está usando para su juego, pero es 2015, y usar el formato de archivo TGA solo porque es fácil obtener acceso al valor de píxel sin ninguna otra biblioteca en su código suena extraño. Las imágenes PNG son compatibles con la mayoría de los lenguajes y marcos; debe considerar seriamente cambiar el formato de archivo de imagen que está utilizando, si no fuera por otra cosa, para obtener una reducción de 5 a 50 veces en el tamaño de los archivos de imagen.

Además, debe considerar actualizar a GIMP 2.8 - 2.6 es una tecnología de más de 5 años.

Me encantaría que cambiáramos a PNG, sucederá cuando integremos SDL. Sin duda está en nuestra lista de tareas pendientes. Sin embargo, TGA con compresión RLE no es tan malo desde la perspectiva del tamaño, y tenemos compatibilidad con JPEG, que se usa para la mayoría de las texturas. Puedo intentar hurgar en la fuente de GIMP para agregar esa función para TGA, estoy seguro de que aceptarán el parche.

GIMP 2.6.12 está desactualizado, esta podría ser la causa de su problema. Además, en general, GIMP no hace ninguna promesa con respecto a los valores de color de los píxeles completamente transparentes, pero en este caso, y con 2.8.14, no puedo reproducir su problema.

Cargar un archivo TGA y pegar el contenido de un archivo TGA diferente en una máscara de capa y luego exportar la imagen (ya sea con o sin aplicar la máscara, ya que esto no es realmente necesario) da como resultado un archivo TGA transparente con todos los colores. valores para píxeles transparentes intactos.

Entonces, la respuesta a su pregunta podría ser: actualice a GIMP 2.8.x

Encontré un PPA para GIMP 2.8, pero no creo que la actualización solucione el problema.
Entonces podrías hacer algo diferente a mí.