Tôi muốn đạt được trong Unity một hiệu ứng nhìn xuyên qua giống như trong các ví dụ sau:
Trong kịch bản cụ thể của tôi có một vài yêu cầu:
- Sprites đang sử dụng pha trộn alpha và sprite có các khu vực trong suốt.
- Có 2 loại yếu tố bao gồm nhân vật. Một người nên tạo hiệu ứng hình bóng, và người còn lại nên cư xử như bình thường.
Để loại bỏ các yếu tố tạo ra hình bóng, tôi kích hoạt ZWrite và vô hiệu hóa nó cho các yếu tố không.
Đối với nhân vật tôi đã thử đặt hàng đợi của shader thành trong suốt + 1 và thêm pass này:
Pass
{
ZTest Greater
Lighting Off
Color [_Color]
}
Và hiệu quả hoạt động một phần:
Hình bóng được vẽ trên tất cả các nhân vật, ngay cả những phần trong suốt. Phần trong suốt không nên tạo ra một hình bóng.
Hình bóng được tạo ra khi nhân vật đứng sau một sprite, ngay cả khi phần đó của sprite trong suốt. Đằng sau một phần trong suốt của sprite không nên tạo ra hình bóng.
Nhân vật xuất hiện trước các yếu tố còn lại, ngay cả khi nó ở đằng sau chúng. Tôi đoán điều này là do thiết lập hàng đợi thành Minh bạch + 1. Nhưng nếu tôi để nó trong suốt, nhân vật được vẽ theo đúng thứ tự, nhưng hình bóng không bao giờ được nhìn thấy.
Tôi đã cố gắng làm theo những lời khuyên mà ai đó đã cho tôi, nhưng tôi không thể làm cho nó hoạt động:
1) Để lại pass mà làm cho các sprite như là.
2) Thêm một đường dẫn ghi vào bộ đệm z, nhưng có một shader sử dụng clip () để loại bỏ các pixel dựa trên alpha. Bạn không thể sử dụng bộ đệm z để thực hiện các kiểm tra z mềm mà không sử dụng MSAA và vùng phủ sóng alpha. Chất lượng của điều đó sẽ không tốt, nhưng đó là điều tốt nhất bạn có thể làm. Một thay thế nhanh hơn là một mô hình hoặc hòa âm tiếng ồn, hoặc một ngưỡng lỗi thời nếu các họa tiết của bạn có các cạnh khá sắc nét.
3) Thêm đường chuyền thứ ba vào các đối tượng có thể vẽ được màu ẩn bằng cách sử dụng phép thử z và đảm bảo rằng đường đó được vẽ dưới dạng đường chuyền cuối cùng.
Tôi là người mới đối với các shader, đặc biệt là trong Unity và tôi không thể tìm ra cách làm cho nó hoạt động bình thường.