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?)
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.
fonte
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 ...).
fonte
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/Editor
pasta, combinando qualquer imagem*-Base.*
com um*-Alpha.*
arquivo com o mesmo nome e modificando a textura original:Adapte-se às suas próprias convenções de nomenclatura de arquivos de ativos.
fonte
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.
fonte