Nieniszczący sposób edycji kanału alfa w programie Photoshop / Gimp

9

Próbuję tworzyć tekstury dla Unity3d i utknąłem na czymś, co wydaje się być prostym etapem. Moim celem jest stworzenie obrazu RGBA z informacjami o kolorze dla każdego piksela i osobnym kanałem alfa. Te dwa elementy są wprowadzane do Unity odpowiednio jako kolor podstawowy i siła odbicia. (Korzystanie z materiału „Reflective / Bumped Diffuse”).

Jeśli korzystam z narzędzi do maskowania w Photoshopie, mogę wymazywać części obrazu wyjściowego (przezroczystość). Chciałbym jednak zachować oryginalne informacje o kolorze RBG podczas drukowania, a nie tylko mieć „puste” obszary. Byłoby również miło, gdybym mógł to zrobić nieniszcząco, tj. końcowy kanał alfa jest zależny od standardowej warstwy lub zbudowany z obiektu ścieżki itp.

Mam ten sam problem z The Gimp.

Każda pomoc w tym zakresie byłaby bardzo mile widziana.

(Jeśli Photoshop / Gimp nie są narzędziami do tego zadania, czy ktoś mógłby polecić lepszy?)

eli
źródło

Odpowiedzi:

4

Rozwiązanie Photoshop

Usunięcie części obrazu wpływa tylko na tę warstwę. To, co chcesz zrobić, to utworzyć osobny kanał, w którym będą przechowywane informacje o Twojej alfie.

  1. W panelu narzędzi z Warstwami / Kanałami / Ścieżkami wybierz zakładkę Kanały. Tutaj zobaczysz RGB, czerwony, zielony i niebieski.
  2. Utwórz nowy kanał za pomocą przycisku na dole panelu, to jest Twój kanał alfa. Jest to 8-bitowy kanał w skali szarości zapewniający 256 poziomów przezroczystości.
  3. Możesz użyć małych ikon „oka”, aby włączyć / wyłączyć ten kanał.
  4. Narysuj lub skopiuj / wklej swoje informacje do kanału.

Uwaga: Podczas zapisywania należy zachować ostrożność przy formatach plików. Rzeczy takie jak .Tiff i .TGA zapisują pełny kanał alfa niezależnie od informacji o kolorze. Jednak Photoshop nie pozwala na to w przypadku PNG, co jest bardzo denerwujące dla wielu programistów. Nie będzie poprawnie zapisywać obrazów kanału alfa i ma tendencję do usuwania informacji o kolorze dla całkowicie przezroczystych obszarów w celu skompresowania rozmiaru pliku.

wkerslake
źródło
To był dokładnie mój problem. Przesyłałem dane do formatu PNG i nie widziałem żadnej dobroci kanału alfa. Dzięki, to jest idealne. Czy ktoś ma instrukcje dotyczące podobnego używania Gimp?
eli
1
Jest to frustrujące, ponieważ powrót do wersji 5.0 lub 5.5 Photoshop faktycznie zapisałby pełny kanał w plikach PNG. Adobe zmieniło sposób, w jaki obsługiwały je w kolejnych wersjach oprogramowania. Westchnienie ...
wkerslake
4

Znajduję najlepszy sposób, aby to zrobić w GIMP jest użycie maski warstwy (kliknij warstwę prawym przyciskiem myszy i utwórz maskę).

Z warstwą będą wtedy powiązane dwa „obrazy” - obraz RGBA i maska ​​warstwy w skali szarości, która działa jako dodatkowy (multiplikatywny) kanał alfa. Możesz kliknąć jeden z tych obrazów, aby wybrać, który będzie edytowany.

Jeśli przytrzymasz CTRL i klikniesz maskę warstwy, zobaczysz tylko obraz RGBA (powoduje to wyłączenie maski). Jeśli przytrzymasz klawisz ALT i klikniesz maskę warstwy, zobaczysz tylko maskę warstwy.

Po wyeksportowaniu obrazu z aktywną maską warstwy wyeksportowany obraz zachowa informacje o kolorze nawet z obszarów, które maska ​​czyni w pełni przezroczystym.

Dla swoich celów skuteczne może być skomponowanie kanału alfa na osobnej warstwie (RGBA) - wtedy po zakończeniu możesz po prostu skopiować tę warstwę do maski warstwy oryginalnej.

Andrew Russell
źródło
Jest to bliższe temu, czego potrzebuję. Ale wpływa tylko na górną warstwę! Na moim obrazie jest wiele warstw i chciałbym móc to zrobić bez spłaszczania. Dzięki za odpowiedź.
eli
Dodaj warstwę maski do każdej warstwy obrazu.
deft_code
2

W GIMP jednym ze sposobów byłoby podzielenie obrazu na warstwy dla każdego kanału. Wybierz „Kolory-> Składniki-> Rozkład” i wybierz RGBA lub dowolne kanały, które chcesz podzielić na warstwy. Następnie edytuj poszczególne kanały alfa i kolorowe według własnego uznania (powinny być w skali szarości), a następnie przejdź do „Kolory-> Komponenty-> Komponuj”, wybierz pożądany układ kanałów i wybierz warstwy dla każdego kanału.

Możesz także skorzystać z okna dialogowego „Kanały”. Powinien być częścią domyślnego zestawu narzędzi, ale jeśli nie, możesz wybrać „Windows-> Dockable Dialogues-> Kanały”. Możesz przełączać widoczność każdego kanału kolorów, a klikając i podświetlając nazwy kanałów, możesz wybrać, które z nich chcesz edytować indywidualnie (wygląda na to, że zachowuje kolor z alfa, chociaż nie widzę sposobu, aby ukryć alfa podczas edycja bez ukrywania całego obrazu ...).

Riley Adams
źródło
wygląda na to, że najpierw muszę spłaszczyć obraz, a następnie rozłożyć, a następnie edytować, a następnie ponownie skomponować. Dzięki za wskazówkę! Ale szukam nieniszczącego sposobu.
eli
Achh, założyłem, że pracujesz z obrazem jednowarstwowym, więc spłaszczanie nie byłoby konieczne, ale nieważne. Powodzenia!
Riley Adams,
2

Aby napisać własny procesor treści (jak sugeruje @Andrew Russell) specyficzny dla Unity3D, umieść ten skrypt w Assets/Editorfolderze połączy dowolny obraz *-Base.*z *-Alpha.*plikiem o podobnej nazwie i zmodyfikuje oryginalną teksturę:

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

Dostosuj się do własnych konwencji nazewnictwa plików zasobów.

Warwick Allison
źródło
0

Jedną z możliwości jest napisanie własnego procesora treści w celu wykonania żądanej operacji. W ten sposób możesz po prostu nadać swojej warstwie „odbijającej” (lub nawet wielu warstwom odbijającym) specjalną nazwę, a procesor treści umieści te dane w kanale alfa. (Lub rzeczywiście wdrożyć dowolny proces, który ci się podoba.)

Jeśli korzystasz z XNA i GIMP (to jest to, z czego korzystam i jestem zaznajomiony), byłoby bardzo łatwo dodać tego importera XCF do potoku treści i wprowadzić niezbędne modyfikacje do przetwarzania specjalnie nazwanych warstw.

Ponieważ używasz Unity, a nie XNA, nie wiem, jakie masz opcje potoku treści. Być może jednak możesz dostosować połączony kod, aby działał w ramach procesu treści.

Andrew Russell
źródło