Gói GLSL nổi vào kết cấu RGBA


8

Tôi muốn sáng tác các mô hình và các hạt dựa trên hình tam giác thông thường với cảnh chiếu tia ở tốc độ khung hình hợp lý.

webGL không cho phép bạn viết gl_FragDepthshader mảnh. Bạn không thể có nhiều mục tiêu kết xuất, nhưng bạn có thể kết xuất thành một kết cấu RGBA và sau đó sử dụng kết cấu đó làm đầu vào cho một bản vẽ khác. Vì vậy, tôi có thể kết xuất cảnh theo dõi tia của mình và lưu trữ độ sâu làm đầu vào cho giai đoạn tiếp theo. Điều này rõ ràng là xa lý tưởng, nhưng hoàn toàn khả thi.

Tôi rất muốn sai về điều này, và điều này được thu thập từ thử nghiệm và sai sót hơn là bất kỳ nguồn chính xác nào; xin vui lòng sửa chữa bất kỳ giả định sai sót

Làm thế nào bạn có thể đóng gói / giải nén một float và, lý tưởng nhất là một số bit cờ và như vậy, thành một kết cấu RGBA hiệu quả trong một shader mảnh GLSL?


2
Có một bài viết cũ trong cuốn sách GPU Gems đầu tiên về ánh xạ bóng (bạn có thể đọc nó ở đây: http.developer.nvidia.com/GPUGems/gpugems_ch12.html ). Nó giải thích cách đóng gói phao trong kết cấu RGBA theo hai cách khác nhau. Nhìn vào phần 12.3.3 để viết, sau đó 12.3.6 để đọc.
Benlitz

1
Một tài nguyên khác có thể hữu ích là bài viết "Lưu trữ bình thường nhỏ gọn cho bộ đệm G nhỏ" của Aras P từ Unity ( aras-p.info/texts/CompactN normalStorage.html ). Bài viết này chỉ giới hạn cho các tiêu chuẩn.
Mortennobel

1
Bạn có thể tạo kết cấu R32F và chỉ cần viết các giá trị độ sâu của bạn ở đó. mà không có bất kỳ đóng gói đóng gói. sau đó trong lần chuyển "dựa trên tam giác thông thường" thứ hai của bạn, hãy sử dụng kết cấu này làm bộ đệm độ sâu (được gắn dưới dạng độ sâu với FBO). Hãy hỏi thêm nếu điều này không rõ ràng.
alariq

@alariq vâng, phần mở rộng float được hỗ trợ rộng rãi ngay bây giờ.
Sẽ

@ Sẽ Nếu phần mở rộng float giải quyết vấn đề của bạn, thì hãy đăng nó dưới dạng câu trả lời và chấp nhận nó.
Cực

Câu trả lời:


5

Dưới đây là các hàm đóng gói và giải nén sẽ hoạt động trên WebGL và OpenGL ES 2.0, đây chỉ dành cho các giá trị trong phạm vi 0 ... 1 vì vậy bạn nên chú ý tính toán độ sâu của mình trong không gian chính xác.

Mã hóa nổi cho RGBA


Bạn có thể thêm đoạn mã vào câu trả lời của bạn không? Nếu trang web bạn đề cập đi xuống, liên kết sẽ phục vụ không tốt.
Felipe Gutierrez
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.