Unity: Chỉ áp dụng Hiệu ứng hình ảnh trên một lớp


8

Hãy xem xét cảnh đơn giản này.

nhập mô tả hình ảnh ở đây

Nó bao gồm 3 đối tượng trò chơi khác nhau. 1 hình nền + 1 hình ảnh nhân vật tĩnh + 1 phần nhỏ (với thú cưng) được thay đổi khi chạy để thực hiện một hình ảnh động.

nhập mô tả hình ảnh ở đây

Nền được hiển thị bằng camera chuyên dụng. Ký tự (tĩnh + hoạt hình) được hiển thị bằng một camera chuyên dụng khác. Cả hai máy ảnh đều được đặt thành Độ sâu Chỉ với mặt nạ loại bỏ khác nhau (mỗi camera chỉ hiển thị phần của nó). Lưu ý rằng máy ảnh phụ trách nhân vật có độ sâu lớn hơn máy ảnh phụ trách nền (tức là Nhân vật được hiển thị sau nền).

Tôi chỉ cần áp dụng hiệu ứng hình ảnh trên máy ảnh nhân vật, nhưng tôi không thể tìm cách để hiệu ứng này không ảnh hưởng đến hậu cảnh.

Ví dụ ở đây với hiệu ứng Vortex trên camera nhân vật.

nhập mô tả hình ảnh ở đây

Làm thế nào bạn sẽ làm một thủ thuật như vậy?

Câu trả lời:


8

Vấn đề là hiệu ứng hình ảnh lấy màn hình hiện tại sau khi kết xuất.

Vì máy ảnh của bạn kết xuất trực tiếp với backbuffer (chúng chỉ xóa độ sâu), nên hiệu ứng hình ảnh được áp dụng cho mọi thứ.

Giải pháp có thể là:

  • Trước tiên, thiết lập Máy ảnh rõ ràng thành màu trong suốt, với cài đặt RenderTarget (bạn có thể tạo nó bằng tập lệnh để nó có cùng kích thước với màn hình của bạn) và quá trình hậu kỳ mong muốn.
  • Thiết lập Camera thứ hai hiển thị nền của bạn, rõ ràng với màu nền / skybox
  • Thiết lập Camera thứ ba, không hiển thị gì (loại bỏ mặt nạ thành Không có gì), không xóa gì và có tập lệnh AlphaBlit.cs kèm theo. AlphaBlit cần hai thông tin: một tài liệu sử dụng AlphaBlit.shader và renderertarget để pha trộn (bạn sẽ cần gán nó theo tập lệnh nếu bạn đã tạo nó bằng tập lệnh trong bước 1)
  • Thiết lập Camera thứ tư hiển thị ký tự chuyển tiếp của bạn.

CẨN THẬN: đây là một thuật toán họa sĩ. Có nghĩa là tất cả mọi thứ mà camera thứ ba kết xuất được hiển thị bên trên những gì đã có, và camera thứ tư sẽ hiển thị trên đó.

Tôi không chắc chắn có một cách để làm tốt hơn, vì nó cũng đòi hỏi phải làm biến dạng bộ đệm độ sâu, điều này là không thể ... (không phải không có kết xuất trực tiếp với hiệu ứng xoáy khó khăn hơn) ...

Tất nhiên, cách tối ưu hóa hơn để làm là không áp dụng quy trình hậu kỳ trên máy ảnh thứ nhất, mà chỉ làm cho nó hiển thị trong mục tiêu kết xuất và sửa đổi AlphaBlit.shader để thực hiện hiệu ứng xoáy khi nó làm cho RenderTarget. Nhưng điều đó phức tạp hơn.


Cảm ơn câu trả lời của bạn. Tôi có một số vấn đề với "Kết xuất máy ảnh với tập lệnh đơn giản chỉ thực hiện trong OnRenderImage a Blit của RenderTarget đó vào mục tiêu kết xuất đích (ví dụ: trình sao lưu ở đây)". .. bởi vì ngay cả khi màu đen trong suốt, mọi thứ đều đen một lần.
lvictorino

chỉnh sửa câu trả lời với độ chính xác cao hơn
Sirithang

Quy trình giải pháp cơ bản là tốt, nhưng tôi đang gặp phải một vấn đề không mong muốn với alpha ở đây. Trên thực tế tôi muốn làm mờ các cấp độ tiền cảnh. Giải pháp này hoạt động, nhưng có vẻ như có dây. puu.sh/C6sSB/ca5d5162b0.jpg Nếu tôi thay đổi màu cờ rõ ràng thành Magenta với độ trong suốt 0, nó có đường viền màu đỏ tươi lạ ở hai bên (chỉ cần trong suốt). puu.sh/C6sSB/ca5d5162b0.jpg . Điều này làm cho toàn bộ giải pháp không làm việc cho tôi. Tôi không thực sự chắc chắn, tại sao điều này xảy ra. Chuyển cờ rõ ràng không giúp đỡ.
AvrDragon
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.