Cách không phá hủy để chỉnh sửa kênh alpha trong hình ảnh Photoshop / Gimp


9

Tìm cách tạo họa tiết cho Unity3d, và tôi bị mắc kẹt ở nơi dường như là một giai đoạn đơn giản. Mục tiêu của tôi là tạo ra một hình ảnh RGBA, với thông tin màu cho mỗi pixel và một kênh alpha riêng biệt. Hai thành phần này được đưa vào Unity dưới dạng màu cơ bản và cường độ phản xạ, tương ứng. (Sử dụng vật liệu "Phản xạ / Bumped Diffuse".)

Nếu tôi sử dụng các công cụ mặt nạ trong Photoshop, tôi có thể xóa các phần của hình ảnh đầu ra (độ trong suốt). Tuy nhiên, tôi muốn giữ thông tin màu RBG ban đầu khi đầu ra và không chỉ có các vùng "trống". Ngoài ra, thật tuyệt nếu tôi có thể làm điều đó không mang tính hủy diệt, tức là. kênh alpha cuối cùng phụ thuộc vào một lớp tiêu chuẩn hoặc được xây dựng từ một đối tượng đường dẫn, v.v.

Tôi có cùng một vấn đề với The Gimp.

Bất kì sự giúp đỡ nào trong việc này đều rất được trân trọng.

(Nếu Photoshop / Gimp không phải là công cụ cho công việc, ai đó có thể vui lòng giới thiệu một công cụ tốt hơn không?)

Câu trả lời:


4

Giải pháp Photoshop

Xóa một phần của hình ảnh chỉ có hiệu lực lớp đó. Những gì bạn muốn làm là tạo một kênh riêng lưu trữ thông tin alpha của bạn.

  1. Trong bảng công cụ với Lớp / Kênh / Đường dẫn, chọn Tab Kênh. Tại đây bạn sẽ thấy RGB, Red, Green và Blue.
  2. Tạo một kênh mới bằng cách sử dụng nút ở cuối bảng điều khiển, đây là kênh alpha của bạn. Đây là kênh thang độ xám 8 bit cung cấp cho bạn 256 mức độ trong suốt.
  3. Bạn có thể sử dụng các biểu tượng "mắt" nhỏ để bật / tắt kênh này.
  4. Vẽ hoặc sao chép / dán thông tin của bạn vào kênh.

Lưu ý: Khi lưu bạn cần cẩn thận về các định dạng tệp. Những thứ như .Tiff & .TGA lưu toàn bộ kênh alpha độc lập với thông tin màu. Tuy nhiên, Photoshop không cho phép điều này với PNG, khiến nhiều nhà phát triển khó chịu. Nó sẽ không lưu hình ảnh kênh alpha đúng cách và có xu hướng loại bỏ thông tin màu cho các khu vực hoàn toàn trong suốt để nén kích thước tệp.


Đây chính xác là vấn đề của tôi. Tôi đã xuất ra PNG và không thấy bất kỳ sự tốt đẹp nào của kênh "alpha". Cảm ơn, điều này là hoàn hảo. Có ai có hướng dẫn sử dụng Gimp tương tự không?
eli

1
Thật là bực bội vì quay lại phiên bản 5.0 hoặc 5.5 Photoshop thực sự sẽ lưu toàn bộ kênh trên PNG. Adobe đã thay đổi cách họ xử lý chúng cho các phiên bản phần mềm tiếp theo. Thở dài ...
wkerslake

4

Tôi tìm thấy cách tốt nhất để làm điều này trong GIMP là sử dụng mặt nạ lớp (nhấp chuột phải vào một lớp và tạo mặt nạ).

Lớp này sau đó sẽ có hai "hình ảnh" được liên kết với nó - hình ảnh RGBA và mặt nạ lớp thang độ xám hoạt động như một kênh alpha phụ (nhân). Bạn có thể nhấp vào một trong hai hình ảnh này để chọn hình ảnh nào sẽ được chỉnh sửa.

Nếu bạn giữ CTRL và nhấp vào mặt nạ lớp, bạn sẽ chỉ thấy hình ảnh RGBA (điều này vô hiệu hóa mặt nạ). Nếu bạn giữ ALT và nhấp vào mặt nạ lớp, bạn sẽ chỉ thấy mặt nạ lớp.

Khi bạn xuất hình ảnh với mặt nạ lớp hoạt động, hình ảnh được xuất sẽ giữ lại thông tin màu ngay cả từ các khu vực mà mặt nạ làm trong suốt hoàn toàn.

Đối với mục đích của bạn, bạn có thể thấy hiệu quả khi soạn kênh alpha của mình trên một lớp (RGBA) riêng biệt - sau đó khi bạn hoàn thành, bạn có thể sao chép lớp này vào mặt nạ lớp của lớp ban đầu.


Điều này gần hơn với những gì tôi cần. Nhưng nó chỉ ảnh hưởng đến lớp trên cùng! Tôi có nhiều lớp trong hình ảnh của mình, và tôi muốn có thể làm điều này mà không làm phẳng nó. Cảm ơn đã trả lời.
eli

Thêm một lớp mặt nạ cho mỗi lớp của hình ảnh của bạn.
deft_code

2

Trong GIMP, một cách sẽ là chia hình ảnh thành các lớp cho mỗi kênh. Chọn "Màu sắc-> Thành phần-> Phân tách" và chọn RGBA hoặc bất kỳ kênh nào bạn muốn chia thành các lớp. Sau đó chỉnh sửa các kênh alpha và màu riêng lẻ của bạn khi bạn thấy phù hợp (chúng phải là thang độ xám), sau đó vào "Màu sắc-> Thành phần-> Soạn" chọn bố cục kênh bạn muốn và chọn các lớp để sử dụng cho từng kênh.

Ngoài ra, bạn có thể sử dụng đối thoại "Kênh". Nó phải là một phần của những thứ trong hộp công cụ mặc định, nhưng nếu không, bạn có thể chọn "Windows-> Hộp thoại có thể gắn được-> Kênh". Bạn có thể chuyển đổi mức độ hiển thị của từng kênh màu và bằng cách nhấp và tô sáng tên kênh bạn có thể chọn tên nào để chỉnh sửa riêng lẻ (có vẻ như nó giữ được màu với alpha, mặc dù tôi không thấy cách nào để "ẩn" alpha trong khi chỉnh sửa mà không ẩn toàn bộ hình ảnh ...).


Có vẻ như tôi phải làm phẳng hình ảnh trước, sau đó phân tách, sau đó chỉnh sửa và sau đó biên dịch lại. Cảm ơn vì tiền hỗ trợ! Nhưng tôi đang tìm kiếm một cách không phá hủy.
eli

Ahh, tôi giả sử bạn đang làm việc với một hình ảnh một lớp nên việc làm phẳng sẽ không cần thiết, nhưng đừng bận tâm. Chúc may mắn!
Riley Adams

2

Để viết bộ xử lý nội dung của riêng bạn (như được đề xuất bởi @Andrew Russell) dành riêng cho Unity3D, hãy đặt tập lệnh này vào Assets/Editorthư mục của bạn sẽ kết hợp bất kỳ hình ảnh nào *-Base.*với *-Alpha.*tệp có cùng tên và sửa đổi kết cấu ban đầu:

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

Thích ứng với quy ước đặt tên tệp tài sản của riêng bạn.


0

Một cách khác là viết bộ xử lý nội dung của riêng bạn để thực hiện thao tác bạn muốn. Bằng cách đó, bạn có thể chỉ cần đặt cho lớp "độ phản xạ" của mình (hoặc thậm chí nhiều lớp phản xạ) một tên đặc biệt và để bộ xử lý nội dung đưa dữ liệu đó vào kênh alpha cho bạn. (Hoặc thực sự thực hiện bất kỳ loại quy trình mà bạn thích.)

Nếu bạn đang sử dụng XNA và GIMP (đây là những gì tôi sử dụng và quen thuộc), thì bạn sẽ dễ dàng thêm trình nhập XCF này vào đường dẫn nội dung của mình và thực hiện các sửa đổi cần thiết để xử lý các lớp được đặt tên đặc biệt.

Vì bạn đang sử dụng Unity, không phải XNA, tôi không quen với các tùy chọn đường ống nội dung mà bạn có sẵn. Nhưng có lẽ bạn có thể điều chỉnh mã được liên kết để nó hoạt động trong quy trình nội dung của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.