Bản đồ bóng và Quads trong suốt


10

Ánh xạ bóng sử dụng bộ đệm độ sâu để tính toán nơi bóng sẽ được vẽ.

Vấn đề của tôi là tôi muốn một số hình tứ giác có kết cấu trong suốt để tạo bóng - ví dụ như các cây có bảng quảng cáo. Vì giá trị độ sâu sẽ được đặt trên tất cả các hình tứ giác và không chỉ các phần có thể nhìn thấy, nó sẽ tạo ra một bóng hình tứ giác, đó không phải là điều tôi muốn.

Làm cách nào tôi có thể tạo các hình tứ giác trong suốt của mình tạo bóng chính xác bằng cách sử dụng ánh xạ bóng?

Câu trả lời:


15

Vấn đề của bạn sẽ giải quyết kết xuất với alpha 1bit. Điều đó có nghĩa là bạn chỉ định một số alpha của kết cấu nguồn không được hiển thị (chủ yếu là 0,5).

Bạn phải viết shader của riêng bạn để tiết kiệm độ sâu từ ánh sáng và sử dụng hướng dẫn discard. Loại bỏ tồn tại trong hlsl, glsl và trong cg là tốt. Nó chỉ tồn tại trong shader pixel / mảnh và loại bỏ đoạn bị cắt từ kết xuất thành backBuffer và vào bộ đệm z.

if (texSample.a < 0.5)
   discard;

Ưu điểm là bạn không cần thay đổi kết xuất đường chuyền thứ 2 của mình, chỉ hiển thị độ sâu của ánh sáng. Ngoài ra tôi đã chứng minh rằng nó hoạt động: Alpha 1 bit

Nếu bạn muốn hiển thị bóng chính xác cho nhiều đối tượng trong suốt, bạn sẽ phải sử dụng nhiều kết cấu có chiều sâu, với thông tin độ sâu và độ mờ được hiển thị bằng cách sử dụng độ sâu lột. Và đối với khói, tóc v.v ... Bản đồ độ mờ đục sâu hoặc Fourier là giải pháp tốt nhất (tôi chủ yếu khuyên dùng bản đồ độ mờ Fourier)

chỉnh sửa: Tôi chỉ nhận ra rằng tôi quên thêm tín dụng. Như mọi khi. Mô hình cây là từ dự án loopix , thật tuyệt vời nếu bạn đang tìm kiếm một số mô hình thấp, một kết cấu và mô hình thực vật miễn phí.


6

Với đường ống lập trình, bạn nên thực hiện theo cách @notabene hướng dẫn. Tuy nhiên, thật dễ dàng để thực hiện với đường ống cố định cũng như không cần viết bất kỳ shader nào. Trong OpenGL glAlphaFunc là những gì bạn muốn. Ví dụ:

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5f);

1
Khéo léo. Tôi ghét đường ống cố định. Vì vậy, tôi thực sự ngưỡng mộ tất cả những người có thể làm những điều này mà không cần shader. +1 chắc chắn.
Notabene

@Notabene Hoàn toàn không có gì đáng ngưỡng mộ khi sử dụng công nghệ không dùng nữa.
Tara

2

Bạn cần một trình đổ bóng tùy chỉnh để tạo bản đồ bóng, vì vậy bạn có thể xuất ra một bộ lọc hợp lệ khi độ trong suốt của pixel / đoạn lớn hơn ngưỡng bạn chỉ định. Whay này, bản đồ độ sâu sẽ được tạo trên mỗi pixel chứ không phải trên mỗi đa giác.


-1

Cách duy nhất tôi có thể nghĩ là làm điều này là tạo một kết cấu bản đồ độ sâu riêng biệt, hiển thị các cây vào đó, xuất ra độ sâu trong đó alpha! = 0, nếu không xuất ra độ sâu = 1, sau đó kết hợp kết cấu bản đồ bóng này với kết cấu bản đồ bóng cảnh , cần đủ đơn giản; chỉ cần lấy giá trị nhỏ nhất trong hai giá trị và đặt nó vào bản đồ độ sâu cuối cùng.

Điều này không giải quyết các đơn đặt hàng pha trộn mặc dù; nếu bạn tạo ra độ sâu phía sau kết cấu alpha, nó sẽ bị ghi đè khi bạn kết xuất hình tứ giác với kết cấu trên đó, vì vậy để hiệu ứng này hoạt động, bạn sẽ phải kết xuất từng hình tứ giác vào kết cấu bản đồ độ sâu ...

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.