Modo non distruttivo per modificare il canale alfa nell'immagine Photoshop / Gimp


9

Sto cercando di creare trame per Unity3d, e sono bloccato in quello che sembra essere un palcoscenico semplice. Il mio obiettivo è creare un'immagine RGBA, con informazioni sui colori per ogni pixel e un canale alfa separato. Questi due componenti vengono alimentati in Unity come colore di base e intensità di riflessione, rispettivamente. (Utilizzando materiale "Riflettente / Bumped Diffuse".)

Se utilizzo gli strumenti di mascheramento in Photoshop, posso cancellare parti dell'immagine di output (trasparenza). Tuttavia, vorrei conservare le informazioni sul colore RBG originale durante l'output e non solo aree "vuote". Inoltre, sarebbe bello se potessi farlo in modo non distruttivo, vale a dire. il canale alfa finale dipende da un livello standard o costruito da un oggetto path, ecc.

Ho lo stesso problema con The Gimp.

Qualsiasi aiuto su questo sarebbe molto apprezzato.

(Se Photoshop / Gimp non sono gli strumenti per il lavoro, qualcuno può consigliarne uno migliore?)

Risposte:


4

Soluzione Photoshop

L'eliminazione di una sezione dell'immagine ha effetto solo su quel livello. Quello che vuoi fare è creare un canale separato che memorizzi le tue informazioni alfa.

  1. Nel pannello degli strumenti con Livelli / Canali / Percorsi, seleziona la scheda Canali. Qui vedrai RGB, rosso, verde e blu.
  2. Crea un nuovo canale usando il pulsante nella parte inferiore del pannello, questo è il tuo canale alfa. Questo è un canale in scala di grigi a 8 bit che offre 256 livelli di trasparenza.
  3. Puoi usare le piccole icone "ad occhio" per attivare / disattivare questo canale.
  4. Disegna o copia / incolla le tue informazioni nel canale.

Nota: quando si salva è necessario prestare attenzione ai formati di file. Cose come .Tiff e .TGA salvano l'intero canale alfa indipendentemente dalle informazioni sul colore. Tuttavia Photoshop non lo consente con PNG, con grande fastidio per molti sviluppatori. Non salverà correttamente le immagini del canale alfa e tende a eliminare le informazioni sul colore per aree completamente trasparenti per comprimere le dimensioni del file.


Questo era esattamente il mio problema. Stavo trasmettendo a PNG e non vedevo alcuna bontà del canale "alfa". Grazie, è perfetto Qualcuno ha le istruzioni per usare Gimp in modo simile?
eli

1
È frustrante perché indietro con la versione 5.0 o 5.5 Photoshop avrebbe effettivamente salvato l'intero canale su PNG. Adobe ha cambiato il modo in cui li ha gestiti per le versioni successive del software. Sigh ...
wkerslake,

4

Trovo il modo migliore per farlo in GIMP è usare una maschera di livello (fare clic destro su un livello e creare una maschera).

Al livello saranno quindi associate due "immagini": l'immagine RGBA e una maschera di livello in scala di grigi che funge da canale alfa (moltiplicativo) extra. È possibile fare clic su una di queste immagini per selezionare quale verrà modificata.

Se tieni premuto CTRL e fai clic sulla maschera di livello, vedrai solo l'immagine RGBA (questo disabilita la maschera). Se tieni premuto ALT e fai clic sulla maschera di livello, vedrai solo la maschera di livello.

Quando si esporta un'immagine con una maschera di livello attiva, l'immagine esportata manterrà le informazioni sul colore anche dalle aree rese completamente trasparenti dalla maschera.

Per i tuoi scopi, potresti trovare efficace comporre il tuo canale alfa su un livello separato (RGBA) - quindi quando hai finito puoi semplicemente copiare questo livello nella maschera di livello del livello originale.


Questo è più vicino a ciò di cui ho bisogno. Ma interessa solo lo strato superiore! Ho più livelli nella mia immagine e vorrei poterlo fare senza appiattirlo. Grazie per aver risposto.
eli

Aggiungi un livello maschera a ciascun livello dell'immagine.
deft_code

2

In GIMP, un modo sarebbe quello di dividere l'immagine in livelli per ciascun canale. Seleziona "Colori-> Componenti-> Decomponi" e scegli RGBA o i canali che vuoi suddividere in livelli. Quindi modifica i tuoi singoli canali alfa e colorati come ritieni opportuno (dovrebbero essere in scala di grigi), quindi seleziona "Colori-> Componenti-> Componi", scegli il layout del canale desiderato e scegli i livelli da utilizzare per ciascun canale.

Inoltre, puoi utilizzare la finestra di dialogo "Canali". Dovrebbe essere una parte delle cose predefinite della casella degli strumenti, ma in caso contrario è possibile selezionare "Windows-> Finestre agganciabili-> Canali". Puoi attivare la visibilità di ciascun canale di colore e facendo clic ed evidenziando i nomi dei canali puoi scegliere quali modificare singolarmente (sembra che preservi il colore con l'alfa, anche se non vedo un modo per "nascondere" l'alfa mentre modifica senza nascondere l'intera immagine ...).


sembra che prima debba appiattire l'immagine, quindi scomporre, quindi modificare e ricomporre. Grazie per il consiglio! Ma sto cercando un modo non distruttivo.
eli

Ahh, immaginavo che avessi lavorato con un'immagine a singolo strato, quindi non sarebbe stato necessario appiattire, ma allora non importa. In bocca al lupo!
Riley Adams,

2

Per scrivere il tuo elaboratore di contenuti (come suggerito da @Andrew Russell) specifico di Unity3D, posiziona questo script nella tua Assets/Editorcartella per combinare qualsiasi immagine *-Base.*con un *-Alpha.*file con un nome simile e modificare la trama originale:

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);
            }
        }
    }
}

Adattarsi alle convenzioni di denominazione dei file di risorse.


0

Un'alternativa è scrivere il proprio elaboratore di contenuti per eseguire l'operazione desiderata. In questo modo potresti semplicemente assegnare un nome speciale al tuo livello di "riflettività" (o anche a più livelli di riflettività) e fare in modo che il processore dei contenuti inserisca tali dati nel canale alfa per te. (O effettivamente implementare qualsiasi tipo di processo che ti piace.)

Se stavi usando XNA e The GIMP (questo è quello che uso e ho familiarità con), allora sarebbe molto facile per te aggiungere questo importatore XCF alla tua pipeline di contenuti e apportare le modifiche necessarie per elaborare livelli con nomi speciali.

Dato che stai usando Unity, non XNA, non ho familiarità con le opzioni della pipeline di contenuti disponibili. Ma forse puoi adattare il codice collegato in modo che funzioni all'interno del tuo processo di contenuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.