Manera no destructiva de editar el canal alfa en la imagen de Photoshop / Gimp

9

Buscando hacer texturas para Unity3d, y estoy atrapado en lo que parece ser una etapa simple. Mi objetivo es crear una imagen RGBA, con información de color para cada píxel, y un canal alfa separado. Estos dos componentes se introducen en Unity como color base y fuerza de reflexión, respectivamente. (Usando material "reflectante / difuso topado").

Si uso herramientas de enmascaramiento en Photoshop, puedo borrar partes de la imagen de salida (transparencia). Sin embargo, me gustaría mantener la información de color RBG original cuando salga, y no solo tener áreas "en blanco". Además, sería bueno si pudiera hacerlo de forma no destructiva, es decir. el canal alfa final depende de una capa estándar, o está construido a partir de un objeto de ruta, etc.

Tengo el mismo problema con The Gimp.

Cualquier ayuda en esto sería muy apreciada.

(Si Photoshop / Gimp no son las herramientas para el trabajo, ¿alguien puede recomendar una mejor?)

eli
fuente

Respuestas:

4

Solución Photoshop

Eliminar una sección de la imagen solo afecta esa capa. Lo que desea hacer es crear un canal separado que almacene su información alfa.

  1. En el panel de herramientas con Capas / Canales / Rutas, elija la pestaña Canales. Aquí verá RGB, rojo, verde y azul.
  2. Cree un nuevo canal usando el botón en la parte inferior del panel, este es su canal alfa. Este es un canal en escala de grises de 8 bits que le brinda 256 niveles de transparencia.
  3. Puede usar los pequeños íconos de "ojo" para activar / desactivar este canal.
  4. Dibuje o copie / pegue su información en el canal.

Nota: Al guardar, debe tener cuidado con los formatos de archivo. Cosas como .Tiff y .TGA guardan el canal alfa completo independientemente de la información de color. Sin embargo, Photoshop no permite esto con PNG, lo que molesta a muchos desarrolladores. No guardará correctamente las imágenes del canal alfa y tiende a eliminar la información de color para áreas totalmente transparentes para comprimir el tamaño del archivo.

Wkerslake
fuente
Este fue exactamente mi problema. Estaba enviando a PNG y no veía ninguna de las bondades del canal "alfa". Gracias, esto es perfecto. ¿Alguien tiene instrucciones para usar el Gimp de manera similar?
eli
1
Es frustrante porque en la versión 5.0 o 5.5 Photoshop en realidad guardaría el canal completo en PNG. Adobe cambió la forma en que los manejó para las versiones posteriores del software. Suspiro ...
wkerslake
4

Creo que la mejor manera de hacer esto en The GIMP es usar una máscara de capa (haga clic con el botón derecho en una capa y cree una máscara).

La capa tendrá entonces dos "imágenes" asociadas: la imagen RGBA y una máscara de capa en escala de grises que actúa como un canal alfa adicional (multiplicativo). Puede hacer clic en cualquiera de estas imágenes para seleccionar cuál se editará.

Si mantiene presionada la tecla CTRL y hace clic en la máscara de capa, verá solo la imagen RGBA (esto deshabilita la máscara). Si mantiene presionada la tecla ALT y hace clic en la máscara de capa, verá solo la máscara de capa.

Cuando exporta una imagen con una máscara de capa activa, la imagen exportada retendrá la información de color incluso de las áreas que la máscara hace completamente transparentes.

Para sus propósitos, puede encontrar efectivo componer su canal alfa en una capa separada (RGBA); luego, cuando haya terminado, puede copiar esta capa en la máscara de capa de la capa original.

Andrew Russell
fuente
Esto está más cerca de lo que necesito. ¡Pero solo afecta a la capa superior! Tengo varias capas en mi imagen y me gustaría poder hacerlo sin aplanarla. Gracias por responder.
eli
Agregue una capa de máscara a cada capa de su imagen.
deft_code
2

En el GIMP, una forma sería dividir la imagen en capas para cada canal. Seleccione "Colores-> Componentes-> Descomponer" y elija RGBA o cualquier canal que desee dividir en capas. Luego edite sus canales alfa y de color individuales como mejor le parezca (deben ser en escala de grises), luego vaya a "Colores-> Componentes-> Componer", elija el diseño de canal deseado y elija las capas que usará para cada canal.

Además, puede usar el diálogo "Canales". Debería ser parte de las cosas predeterminadas de la caja de herramientas, pero si no puede seleccionar "Windows-> Diálogos acoplables-> Canales". Puede alternar la visibilidad de cada canal de color, y al hacer clic y resaltar los nombres de los canales, puede elegir cuáles editar individualmente (parece que conserva el color con alfa, aunque no veo una manera de "ocultar" el alfa mientras edición sin ocultar toda la imagen ...).

Riley Adams
fuente
parece que primero tengo que aplanar la imagen, luego descomponerla, luego editarla y luego recomponerla. ¡Gracias por el consejo! Pero estoy buscando una forma no destructiva.
eli
Ahh, supuse que estabas trabajando con una imagen de una sola capa, por lo que no sería necesario aplanar, pero no importa entonces. ¡Buena suerte!
Riley Adams
2

Para escribir su propio procesador de contenido (como lo sugiere @Andrew Russell) específico para Unity3D, coloque este script en su Assets/Editorcarpeta y combinará cualquier imagen *-Base.*con un *-Alpha.*archivo con un nombre similar y modificará la textura original:

class AlphaCombinerPostprocessor extends AssetPostprocessor {
    function OnPostprocessTexture(texture : Texture2D)
    {
        if (assetPath.Contains("-Base.")) {
            var fn = assetPath.Replace("-Base.","-Alpha.");
            var alpha = AssetDatabase.LoadAssetAtPath(fn,Texture2D);
            if (alpha) {
                Debug.Log("Adding alpha from "+fn);
                var c : Color[] = texture.GetPixels();
                var a : Color[] = alpha.GetPixels();
                if (c.Length != a.Length) {
                    Debug.LogError(fn+" is different size to "+assetPath);
                    return;
                }
                for (var i=0; i<c.Length; i++)
                    c[i].a = a[i].a;
                texture.SetPixels(c);
                texture.Apply(true);
            }
        }
    }
}

Adaptarse a sus propias convenciones de nomenclatura de archivos de activos.

Warwick Allison
fuente
0

Una alternativa es escribir su propio procesador de contenido para realizar la operación que desea. De esa manera, podría simplemente darle un nombre especial a su capa de "reflectividad" (o incluso múltiples capas de reflectividad), y hacer que el procesador de contenido ponga esos datos en el canal alfa por usted. (O, de hecho, implemente cualquier tipo de proceso que desee).

Si estaba usando XNA y The GIMP (esto es lo que uso y estoy familiarizado), entonces sería muy fácil agregar este importador XCF a su canal de contenido y realizar las modificaciones necesarias para procesar capas especialmente nombradas.

Como está utilizando Unity, no XNA, no estoy familiarizado con las opciones de canalización de contenido que tiene disponibles. Pero quizás pueda adaptar el código vinculado para que funcione dentro de su proceso de contenido.

Andrew Russell
fuente