Maneira não destrutiva de editar canal alfa na imagem Photoshop / Gimp

9

Procurando fazer texturas para o Unity3d, e estou preso no que parece ser um estágio simples. Meu objetivo é criar uma imagem RGBA, com informações de cores para cada pixel e um canal alfa separado. Esses dois componentes são alimentados no Unity como cor de base e força de reflexão, respectivamente. (Utilizando material "Reflexivo / Difuso").

Se eu usar ferramentas de mascaramento no Photoshop, posso apagar partes da imagem de saída (transparência). No entanto, eu gostaria de manter as informações de cores originais do RBG na saída e não apenas ter áreas "em branco". Além disso, seria bom se eu pudesse fazê-lo de forma não destrutiva, ou seja. o canal alfa final depende de uma camada padrão ou é construído a partir de um objeto de caminho etc.

Eu tenho o mesmo problema com o Gimp.

Qualquer ajuda neste assunto seria altamente apreciada.

(Se o Photoshop / Gimp não são as ferramentas para o trabalho, alguém pode recomendar uma melhor?)

eli
fonte

Respostas:

4

Solução Photoshop

A exclusão de uma seção da imagem afeta apenas essa camada. O que você quer fazer é criar um canal separado que armazene suas informações alfa.

  1. No painel de ferramentas com Camadas / Canais / Caminhos, escolha a guia Canais. Aqui você verá RGB, Vermelho, Verde e Azul.
  2. Crie um novo canal usando o botão na parte inferior do painel, este é o seu canal alfa. Este é um canal em escala de cinza de 8 bits, oferecendo 256 níveis de transparência.
  3. Você pode usar os pequenos ícones de "olho" para ativar / desativar este canal.
  4. Desenhe ou copie / cole suas informações no canal.

Nota: Ao salvar, você precisa ter cuidado com os formatos de arquivo. Coisas como .Tiff e .TGA salvam o canal alfa completo, independentemente das informações de cores. No entanto, o Photoshop não permite isso com PNG, o que incomoda muitos desenvolvedores. Ele não salva corretamente as imagens do canal alfa e tende a remover as informações de cores para áreas totalmente transparentes para compactar o tamanho do arquivo.

wkerslake
fonte
Esse era exatamente o meu problema. Eu estava produzindo para PNG e não estava vendo nenhuma das vantagens do canal "alfa". Obrigado, isso é perfeito. Alguém tem instruções para usar o Gimp da mesma forma?
eli
11
É frustrante porque, na versão 5.0 ou 5.5, o Photoshop realmente salvava o canal completo em PNGs. A Adobe mudou a maneira como os trataram para as versões subseqüentes do software. Suspiro ...
wkerslake
4

Acho que a melhor maneira de fazer isso no GIMP é usar uma máscara de camada (clique com o botão direito do mouse em uma camada e crie uma máscara).

A camada terá duas "imagens" associadas a ela - a imagem RGBA e uma máscara de camada em escala de cinza que atua como um canal alfa extra (multiplicativo). Você pode clicar em uma dessas imagens para selecionar qual delas será editada.

Se você pressionar CTRL e clicar na máscara de camada, verá apenas a imagem RGBA (isso desativa a máscara). Se você pressionar ALT e clicar na máscara de camada, verá apenas a máscara de camada.

Quando você exporta uma imagem com uma máscara de camada ativa, a imagem exportada retém as informações de cores mesmo nas áreas que a máscara torna totalmente transparente.

Para seus propósitos, você pode achar eficaz compor seu canal alfa em uma camada separada (RGBA) - quando terminar, basta copiar essa camada na máscara de camada da camada original.

Andrew Russell
fonte
Isso está mais perto do que eu preciso. Mas isso afeta apenas a camada superior! Tenho várias camadas na minha imagem e gostaria de poder fazer isso sem achatá-la. Obrigado por responder.
283 eli
Adicione uma camada de máscara a cada camada da sua imagem.
Deft_code
2

No GIMP, uma maneira seria dividir a imagem em camadas para cada canal. Selecione "Cores-> Componentes-> Decompor" e escolha RGBA ou quaisquer canais que você queira dividir em camadas. Em seguida, edite seus canais alfa e colorido individuais como achar melhor (eles devem estar em escala de cinza) e, em seguida, vá em "Cores-> Componentes-> Composição", escolha o layout do canal desejado e escolha as camadas a serem usadas em cada canal.

Além disso, você pode usar o diálogo "Canais". Deve fazer parte das coisas padrão da caixa de ferramentas, mas se não, você pode selecionar "Windows-> Dockable Dialogues-> Channels". Você pode alternar a visibilidade de cada canal de cores e, clicando e destacando os nomes dos canais, pode escolher quais editar individualmente (parece que preserva a cor com alfa, embora não haja uma maneira de "ocultar" o alfa enquanto edição sem ocultar a imagem inteira ...).

Riley Adams
fonte
parece que eu tenho que achatar a imagem primeiro, depois decompor, editar e recompor. Obrigado pela dica! Mas estou procurando uma maneira não destrutiva.
283 eli
Ah, presumi que você estivesse trabalhando com uma imagem de camada única, para que o achatamento não fosse necessário, mas deixa para lá. Boa sorte!
Riley Adams
2

Para escrever seu próprio processador de conteúdo (como sugerido por @Andrew Russell) específico para o Unity3D, coloque este script em sua Assets/Editorpasta, combinando qualquer imagem *-Base.*com um *-Alpha.*arquivo com o mesmo nome e modificando a 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);
            }
        }
    }
}

Adapte-se às suas próprias convenções de nomenclatura de arquivos de ativos.

Warwick Allison
fonte
0

Uma alternativa é escrever seu próprio processador de conteúdo para executar a operação desejada. Dessa forma, você pode simplesmente dar um nome especial à sua camada de "refletividade" (ou mesmo várias camadas de refletividade) e fazer com que o processador de conteúdo coloque esses dados no canal alfa para você. (Ou, de fato, implemente qualquer tipo de processo que você gosta.)

Se você estivesse usando o XNA e o GIMP (é com isso que eu uso e estou familiarizado), seria muito fácil adicionar esse importador XCF ao seu pipeline de conteúdo e fazer as modificações necessárias para processar camadas especialmente nomeadas.

Como você está usando o Unity, não o XNA, não estou familiarizado com as opções de pipeline de conteúdo disponíveis. Mas talvez você possa adaptar o código vinculado para que ele funcione no seu processo de conteúdo.

Andrew Russell
fonte