Cara non-destruktif untuk mengedit saluran alpha di gambar Photoshop / Gimp

9

Mencari untuk membuat tekstur untuk Unity3d, dan saya terjebak pada apa yang tampaknya menjadi tahap sederhana. Tujuan saya adalah membuat gambar RGBA, dengan informasi warna untuk setiap piksel, dan saluran alfa terpisah. Kedua komponen ini dimasukkan ke dalam Unity sebagai warna dasar dan kekuatan pantulan. (Menggunakan bahan "Reflective / Bumped Diffuse".)

Jika saya menggunakan alat masking di Photoshop, saya dapat menghapus bagian dari gambar output (transparansi). Namun, saya ingin menyimpan informasi warna RBG asli saat output, dan tidak hanya memiliki area "kosong". Juga, alangkah baiknya jika saya bisa melakukannya tanpa merusak, yaitu. saluran alfa akhir tergantung pada lapisan standar, atau dibangun dari objek jalur, dll.

Saya memiliki masalah yang sama dengan The Gimp.

Bantuan apa pun akan sangat dihargai.

(Jika Photoshop / Gimp bukan alat untuk pekerjaan itu, dapatkah seseorang merekomendasikan yang lebih baik?)

eli
sumber

Jawaban:

4

Solusi Photoshop

Menghapus bagian gambar hanya memengaruhi lapisan itu. Yang ingin Anda lakukan adalah membuat saluran terpisah yang menyimpan informasi alfa Anda.

  1. Pada panel alat dengan Layers / Channels / Paths pilih Tab Channels. Di sini Anda akan melihat RGB, Merah, Hijau, dan Biru.
  2. Buat saluran baru menggunakan tombol di bagian bawah panel, ini adalah saluran alfa Anda. Ini adalah saluran abu-abu 8-bit yang memberi Anda 256 tingkat transparansi.
  3. Anda dapat menggunakan ikon "mata" kecil untuk mengaktifkan / menonaktifkan saluran ini.
  4. Gambar atau salin / tempel informasi Anda ke saluran.

Catatan: Saat menyimpan Anda harus berhati-hati dengan format file. Hal-hal seperti .Tiff & .TGA menyimpan saluran alpha penuh tanpa informasi warna. Namun Photoshop tidak mengizinkan ini dengan PNG, banyak gangguan bagi banyak pengembang. Ini tidak akan menyimpan gambar saluran alpha dengan benar dan cenderung menghapus informasi warna untuk area yang sepenuhnya transparan untuk mengompres ukuran file.

wkerslake
sumber
Persis seperti itulah masalah saya. Saya keluaran ke PNG dan tidak melihat kebaikan saluran "alpha". Terima kasih, ini sempurna. Adakah yang punya instruksi untuk menggunakan Gimp dengan cara yang sama?
eli
1
Ini membuat frustrasi karena kembali sekitar versi 5.0 atau 5.5 Photoshop akan benar-benar menyimpan saluran penuh pada PNG. Adobe mengubah cara mereka menangani mereka untuk versi perangkat lunak berikutnya.
Huh
4

Saya menemukan cara terbaik untuk melakukan ini di The GIMP adalah dengan menggunakan layer mask (klik kanan pada layer dan buat mask).

Lapisan kemudian akan memiliki dua "gambar" yang terkait dengannya - gambar RGBA dan topeng lapisan abu-abu yang bertindak sebagai saluran alfa ekstra (multiplikatif). Anda dapat mengklik salah satu gambar ini untuk memilih yang mana yang akan diedit.

Jika Anda memegang CTRL dan mengklik layer mask, Anda hanya akan melihat gambar RGBA (ini menonaktifkan mask). Jika Anda menahan ALT dan mengklik layer mask, Anda hanya akan melihat layer mask.

Saat Anda mengekspor gambar dengan layer mask aktif, gambar yang diekspor akan mempertahankan informasi warna bahkan dari area yang membuat mask sepenuhnya transparan.

Untuk keperluan Anda, Anda mungkin menemukan itu efektif untuk menyusun saluran alpha Anda pada layer (RGBA) yang terpisah - maka ketika Anda selesai Anda bisa menyalin layer ini ke dalam layer mask dari layer asli.

Andrew Russell
sumber
Ini lebih dekat dengan yang saya butuhkan. Tapi itu hanya mempengaruhi lapisan teratas! Saya memiliki beberapa lapisan pada gambar saya, dan saya ingin dapat melakukan ini tanpa meratakannya. Terimakasih telah menjawab.
eli
Tambahkan layer mask ke setiap layer gambar Anda.
deft_code
2

Dalam GIMP, salah satu caranya adalah dengan membagi gambar menjadi beberapa layer untuk setiap saluran. Pilih "Colors-> Components-> Decompose" dan pilih RGBA atau saluran apa pun yang ingin Anda bagi menjadi lapisan. Kemudian edit masing-masing saluran alfa dan warna sesuai keinginan Anda (harus berwarna abu-abu), lalu buka "Warna-> Komponen-> Tulis" pilih tata letak saluran yang Anda inginkan dan pilih layer Anda untuk digunakan untuk setiap saluran.

Anda juga dapat menggunakan dialog "Saluran". Itu harus menjadi bagian dari hal-hal toolbox default, tetapi jika tidak Anda dapat memilih "Windows-> Dockable Dialogues-> Channels". Anda dapat mengaktifkan visibilitas setiap saluran warna, dan dengan mengklik dan menyorot nama saluran, Anda dapat memilih mana yang akan diedit satu per satu (sepertinya itu mempertahankan warna dengan alpha, meskipun saya tidak melihat cara untuk "menyembunyikan" alfa sementara mengedit tanpa menyembunyikan seluruh gambar ...).

Riley Adams
sumber
sepertinya saya harus meratakan gambar terlebih dahulu, kemudian menguraikan, lalu mengedit, dan kemudian mengomposisi ulang. Terima kasih atas tipnya! Tapi saya mencari cara yang tidak merusak.
eli
Ahh, saya berasumsi Anda bekerja dengan gambar layer tunggal sehingga perataan tidak akan diperlukan, tetapi tidak masalah saat itu. Semoga berhasil!
Riley Adams
2

Untuk menulis prosesor konten Anda sendiri (seperti yang disarankan oleh @Andrew Russell) khusus untuk Unity3D, tempatkan skrip ini di Assets/Editorfolder Anda akan menggabungkan gambar apa pun *-Base.*dengan file dengan nama yang sama *-Alpha.*dan memodifikasi tekstur asli:

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

Beradaptasi dengan konvensi penamaan file aset Anda sendiri.

Warwick Allison
sumber
0

Salah satu alternatif adalah menulis prosesor konten Anda sendiri untuk melakukan operasi yang Anda inginkan. Dengan cara itu Anda bisa memberikan layer "reflektifitas" Anda (atau bahkan beberapa lapisan reflektifitas) nama khusus, dan minta prosesor konten memasukkan data itu ke saluran alpha untuk Anda. (Atau memang menerapkan segala jenis proses yang Anda suka.)

Jika Anda menggunakan XNA dan The GIMP (ini adalah apa yang saya gunakan dan saya kenal), maka akan sangat mudah bagi Anda untuk menambahkan importir XCF ini ke pipa konten Anda dan membuat modifikasi yang diperlukan untuk memproses lapisan bernama khusus.

Saat Anda menggunakan Unity, bukan XNA, saya tidak terbiasa dengan opsi pipa konten apa yang Anda miliki. Tetapi mungkin Anda dapat mengadaptasi kode tertaut sehingga berfungsi dalam proses konten Anda.

Andrew Russell
sumber