Zerstörungsfreie Methode zum Bearbeiten des Alphakanals in Photoshop / Gimp-Bildern


9

Ich suche nach Texturen für Unity3d und stecke in einer scheinbar einfachen Phase fest. Mein Ziel ist es, ein RGBA-Bild mit Farbinformationen für jedes Pixel und einem separaten Alphakanal zu erstellen. Diese beiden Komponenten werden als Grundfarbe bzw. Reflexionsstärke in Unity eingespeist. (Verwenden von "Reflective / Bumped Diffuse" -Material.)

Wenn ich in Photoshop Maskierungswerkzeuge verwende, kann ich Teile des Ausgabebildes löschen (Transparenz). Ich möchte jedoch die ursprünglichen RBG-Farbinformationen bei der Ausgabe beibehalten und nicht nur "leere" Bereiche haben. Es wäre auch schön, wenn ich es zerstörungsfrei machen könnte, dh. Der endgültige Alphakanal ist abhängig von einer Standardebene oder wird aus einem Pfadobjekt usw. erstellt.

Ich habe das gleiche Problem mit The Gimp.

Jede Hilfe hierzu wäre sehr dankbar.

(Wenn Photoshop / Gimp nicht die Werkzeuge für den Job sind, kann jemand bitte ein besseres empfehlen?)

Antworten:


4

Photoshop-Lösung

Das Löschen eines Bildausschnitts wirkt sich nur auf diese Ebene aus. Sie möchten einen separaten Kanal erstellen, in dem Ihre Alpha-Informationen gespeichert werden.

  1. Wählen Sie im Werkzeugfenster mit Ebenen / Kanälen / Pfaden die Registerkarte Kanäle. Hier sehen Sie RGB, Rot, Grün und Blau.
  2. Erstellen Sie einen neuen Kanal mit der Schaltfläche am unteren Rand des Bedienfelds. Dies ist Ihr Alpha-Kanal. Dies ist ein 8-Bit-Graustufenkanal, der Ihnen 256 Transparenzstufen bietet.
  3. Sie können die kleinen "Augen" -Symbole verwenden, um diesen Kanal ein- oder auszuschalten.
  4. Zeichnen oder kopieren Sie Ihre Informationen und fügen Sie sie in den Kanal ein.

Hinweis: Beim Speichern müssen Sie auf Dateiformate achten. Dinge wie .Tiff & .TGA speichern den gesamten Alpha-Kanal unabhängig von Farbinformationen. Allerdings erlaubt Photoshop dies mit PNG nicht, was viele Entwickler sehr ärgert. Alphakanalbilder werden nicht ordnungsgemäß gespeichert und Farbinformationen für vollständig transparente Bereiche werden entfernt, um die Dateigröße zu komprimieren.


Genau das war mein Problem. Ich habe auf PNG ausgegeben und keine der "Alpha" -Kanal-Güte gesehen. Danke, das ist perfekt. Hat jemand Anweisungen zur Verwendung des Gimp ähnlich?
Eli

1
Es ist frustrierend, weil Photoshop ab Version 5.0 oder 5.5 tatsächlich den gesamten Kanal in PNGs speichern würde. Adobe hat die Art und Weise geändert, wie sie für nachfolgende Versionen der Software behandelt wurden.
Seufz

4

Ich finde den besten Weg, dies in The GIMP zu tun, eine Ebenenmaske zu verwenden (Rechtsklick auf eine Ebene und Maske erstellen).

Der Ebene sind dann zwei "Bilder" zugeordnet - das RGBA-Bild und eine Graustufen-Ebenenmaske, die als zusätzlicher (multiplikativer) Alphakanal fungiert. Sie können auf eines dieser Bilder klicken, um auszuwählen, welches bearbeitet werden soll.

Wenn Sie die STRG-Taste gedrückt halten und auf die Ebenenmaske klicken, wird nur das RGBA-Bild angezeigt (dadurch wird die Maske deaktiviert). Wenn Sie ALT gedrückt halten und auf die Ebenenmaske klicken, wird nur die Ebenenmaske angezeigt.

Wenn Sie ein Bild mit einer aktiven Ebenenmaske exportieren, behält das exportierte Bild die Farbinformationen auch aus Bereichen bei, die die Maske vollständig transparent macht.

Für Ihre Zwecke ist es möglicherweise effektiv, Ihren Alphakanal auf einer separaten Ebene (RGBA) zu erstellen. Wenn Sie fertig sind, können Sie diese Ebene einfach in die Ebenenmaske der ursprünglichen Ebene kopieren.


Das ist näher an dem, was ich brauche. Es betrifft aber nur die oberste Schicht! Ich habe mehrere Ebenen in meinem Bild, und ich möchte dies tun können, ohne es zu reduzieren. Danke für die Antwort.
Eli

Fügen Sie jeder Ebene Ihres Bildes eine Maskenebene hinzu.
Deft_code

2

Im GIMP besteht eine Möglichkeit darin, das Bild für jeden Kanal in Ebenen aufzuteilen. Wählen Sie "Farben-> Komponenten-> Zerlegen" und wählen Sie RGBA oder die Kanäle, die Sie in Ebenen aufteilen möchten. Bearbeiten Sie dann Ihre individuellen Alpha- und Farbkanäle nach Belieben (sie sollten Graustufen sein), wählen Sie unter "Farben-> Komponenten-> Komponieren" das gewünschte Kanallayout und die für jeden Kanal zu verwendenden Ebenen.

Sie können auch den Dialog "Kanäle" verwenden. Es sollte Teil der Standard-Toolbox sein, aber wenn nicht, können Sie "Windows-> Dockable Dialogues-> Channels" auswählen. Sie können die Sichtbarkeit jedes Farbkanals umschalten und durch Klicken und Hervorheben der Kanalnamen auswählen, welche einzeln bearbeitet werden sollen (es sieht so aus, als würde die Farbe mit Alpha beibehalten, obwohl ich keine Möglichkeit sehe, das Alpha währenddessen zu "verbergen" Bearbeiten ohne das gesamte Bild auszublenden ...).


Es sieht so aus, als müsste ich zuerst das Bild reduzieren, dann zerlegen, dann bearbeiten und dann neu zusammensetzen. Danke für den Tipp! Aber ich suche einen zerstörungsfreien Weg.
Eli

Ahh, ich nahm an, dass Sie mit einem Bild mit einer Ebene arbeiten, sodass eine Abflachung nicht erforderlich wäre, aber denken Sie daran. Viel Glück!
Riley Adams

2

Wenn Sie einen eigenen Inhaltsprozessor (wie von @Andrew Russell vorgeschlagen) für Unity3D schreiben möchten, platzieren Sie dieses Skript in Ihrem Assets/EditorOrdner. Dabei wird jedes Bild *-Base.*mit einer *-Alpha.*Datei mit ähnlichem Namen kombiniert und die ursprüngliche Textur geändert :

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

Passen Sie die Namenskonventionen für Asset-Dateien an.


0

Eine Alternative besteht darin, einen eigenen Inhaltsprozessor zu schreiben, um den gewünschten Vorgang auszuführen. Auf diese Weise können Sie Ihrer "Reflektivitäts" -Ebene (oder sogar mehreren Reflektivitätsschichten) einfach einen speziellen Namen geben und diese Daten vom Inhaltsprozessor in den Alphakanal einfügen lassen. (Oder implementieren Sie tatsächlich einen beliebigen Prozess.)

Wenn Sie XNA und The GIMP verwenden (dies ist das, was ich verwende und mit dem ich vertraut bin), ist es für Sie sehr einfach, diesen XCF-Importer zu Ihrer Inhaltspipeline hinzuzufügen und die erforderlichen Änderungen vorzunehmen, um speziell benannte Ebenen zu verarbeiten.

Da Sie Unity und nicht XNA verwenden, bin ich nicht mit den verfügbaren Optionen für die Inhaltspipeline vertraut. Aber vielleicht können Sie den verknüpften Code so anpassen, dass er in Ihrem Inhaltsprozess funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.