Shader mà hung cắt lỗ lỗ thông qua tất cả các hình học


10

Làm cách nào tôi có thể tạo một shader "cắt" qua tất cả hình học, chỉ hiển thị nền xóa trong Unity? Một ví dụ:

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

Đó là một lăng kính trong một căn phòng hình hộp lớn màu trắng. Bề mặt của lăng kính chỉ là vẽ lại skybox của cảnh (một bầu trời đầy sao). Tôi đã sử dụng nhiều máy ảnh, điều này khá kém hiệu quả ... Phải có một cách chỉ với các shader.

Tôi có thể làm cái này như thế nào?

Câu trả lời:


14

Ok, cuối cùng đã tìm ra nó!

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

Bạn thấy cách mạng lưới hình cầu cắt thành hình trụ thông qua hình trụ và mặt phẳng cho đến skybox. Điều này khiến tôi mất nhiều thời gian hơn dự kiến ​​để tìm ra điều này nhưng nhờ một trang wiki ( http://wiki.unity3d.com/index.php/DepthMask ) tôi đã sắp xếp tất cả.

Trước khi sử dụng thiết lập đổ bóng trong trang wiki, tôi đã sử dụng ba máy ảnh khác nhau với các cờ xóa / độ sâu khác nhau để đạt được cùng một kết quả. Nó hoạt động nhưng nó hoàn toàn nghẹn ngào với Ouya. Giải pháp trên chỉ cần một camera và chạy nhiều fasta.

Vì vậy, tôi thiết lập cảnh như thế

  1. đã thêm một skybox thực tế (nasa)

  2. thêm một số hình dạng

  3. đã thêm tập lệnh SetRenderQueue vào mặt phẳng, hình cầu và hình trụ

  4. đặt thứ tự hàng đợi trên quả cầu thành 2999 (các đối tượng khác là 3000)

  5. sau đó thêm trình tạo bóng DepthMask vào hình cầu

Đó là nó. Mọi thắc mắc cho tôi biết!


2
D'oh, tôi đã hoàn toàn suy nghĩ quá mức về vấn đề trong bài viết của tôi ở trên (tôi đã suy nghĩ về các lưới lỗ phẳng trên tường / sàn, thực sự). Giải pháp được liên kết hiển thị một đối tượng lỗ 3D và giải pháp được hiển thị, trong trường hợp này, rất đơn giản - tất cả những gì bạn thực sự cần làm là ghi 'lỗ' vào bộ đệm z mà không cần viết bất kỳ màu nào và đảm bảo rằng lỗ đó là vẽ sớm.
bluescrn

@bluescrn Đừng lo! Tôi đánh giá cao bài viết chi tiết. :)
CalebHC

2

Một vài lựa chọn để có được hiệu ứng bạn muốn - nhưng chúng có chi phí rất cao:

  • Viết các lỗ vào bộ đệm stpson hoặc kênh alpha đích, sau đó vẽ skybox lần cuối, sử dụng phép thử stprint hoặc pha trộn alpha phù hợp và không có kiểm tra z?

hoặc là

  • Kết xuất skybox thành một kết cấu ở đầu khung hình và chiếu nó vào 'hình học lỗ'

Tôi nghi ngờ rằng cũng phải có cách để làm điều này bằng cách sử dụng / lạm dụng bộ đệm z - nhưng bạn có thể muốn kiểm tra z đa giác lỗ 'bằng cách sử dụng Z thực của chúng, sau đó viết Z khác. nhiều đường chuyền và bộ đệm stpson - vẽ lỗ 3 lần với kết xuất được thiết lập như thế này có thể hoạt động:

  • Vượt qua 1: Không có kiểm tra z, Xóa stprint dưới lỗ polys
  • Vượt qua 2: Kiểm tra z bình thường, Giá trị stprint tăng (trong đó kiểm tra độ sâu vượt qua)
  • Vượt qua 3: Xóa Z trong đó stprint> 0

Bạn vẫn cần phải vẽ theo một thứ tự cụ thể - đầu tiên là môi trường, sau đó là các lỗ và cuối cùng là skybox cuối cùng.

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.