2013-03-06 31 views
11

Tôi đã làm việc với this ES extension trong một thời gian, nhưng tôi vẫn không hoàn toàn có được những gì các mẫu lấy bóng và những gì người ta có thể sử dụng chúng cho. Googling đã không thực sự mang lại cho tôi bất kỳ kết quả tốt đẹp, có thể đọc được, vì vậy tôi đăng bài ở đây.Trình lấy mẫu bóng trong OpenGL là gì và có thể sử dụng những gì cho chúng?

Tôi đang tìm thứ gì đó có thể giúp tôi thực sự lúng túng những gì có thể làm. Đây có thể là trường hợp sử dụng trong đời thực hoặc thứ gì đó chỉ thể hiện cách chúng khác với các mẫu lấy mẫu thông thường. Ý tôi là, okey, chúng lưu trữ dữ liệu chiều sâu. Nhưng dữ liệu đó được tạo ra như thế nào? Nó chỉ được làm từ một kết cấu gắn với một tập tin đính kèm độ sâu?

Ngoài ra, câu hỏi của tôi áp dụng cho cả DT (máy tính để bàn) GL và ES, và có thể với WebGL; Tôi không thực sự quan tâm đến các cuộc gọi hoặc liệt kê chính xác, vì chúng dễ dàng được tìm thấy trong các thông số kỹ thuật.

+0

Xác định xem đoạn có nằm trong bóng hay không liên quan đến việc đọc giá trị từ kết cấu sâu và so sánh với khoảng cách của đoạn trong không gian ánh sáng. Nếu cái cũ lớn hơn, nó ở trong bóng tối, nếu không nó sẽ sáng. Bạn có thể thực hiện việc này theo cách thủ công hoặc bằng một trình lấy mẫu đặc biệt thực hiện tìm nạp và so sánh các bước trong một. Nó không phải là không phổ biến cho một sampler bóng để cung cấp tỷ lệ phần trăm lọc gần hơn "miễn phí", quá. Tức là, đọc 4 texels thay vì 1, so sánh tất cả 4, và trả về một số duy nhất mô tả số lượng các thử nghiệm này thất bại. Điều này cho phép các đường viền bóng mờ hơn. – Damon

+1

@ Damon tại sao đó không phải là câu trả lời? :) –

+0

Chủ yếu là bởi vì nó không đủ phức tạp và bởi vì tôi không có nhiều kinh nghiệm với GL ES (mà câu hỏi chủ yếu là về). Tôi phải đào sâu thông số kỹ thuật của phần mở rộng cụ thể đó trước để đưa ra một câu trả lời đầy đủ (và để chắc chắn rằng phần mở rộng ES này không hoạt động hoàn toàn khác với những gì tôi mong đợi, như trong máy tính để bàn GL).Mặc dù nhận xét của tôi có thể cung cấp cho bạn (người đã đọc kỹ thông số đó) đủ để gợi ý về điều đó. – Damon

Trả lời

10

A "shadow sampler" là một mẫu được sử dụng cho depth comparison textures. Thông thường, nếu bạn truy cập một kết cấu chiều sâu, bạn sẽ nhận được giá trị độ sâu (được lọc) tại tọa độ kết cấu đó. Tuy nhiên, với chế độ so sánh chiều sâu, những gì bạn đang làm là một hoạt động khác.

Đối với mỗi mẫu được lấy từ kết cấu, bạn so sánh độ sâu với một giá trị nhất định. Nếu so sánh trôi qua, thì mẫu được tìm nạp có hiệu quả 1.0. Nếu so sánh thất bại, nó là 0,0. Lọc sau đó hoạt động trên các mẫu sau so sánh này. Vì vậy, nếu tôi đang làm lọc tuyến tính, và một nửa các mẫu vượt qua so sánh và một nửa không, giá trị tôi nhận được là 0,5. Để thực hiện điều này, cả hai bạn phải kích hoạt so sánh độ sâu trên đối tượng lấy mẫu/đối tượng mẫu bạn đang sử dụng, nhưng bạn cũng phải sử dụng trình lấy mẫu bóng trong trình đổ bóng. Lý do cho điều này là hàm truy cập kết cấu bây giờ cần lấy một giá trị thừa: giá trị để so sánh truy cập kết cấu với.

Điều này chủ yếu được sử dụng cho shadow maps, do đó tên. Bản đồ bóng lưu trữ độ sâu từ ánh sáng đến bề mặt gần nhất. Do đó, bạn so sánh nó với độ sâu từ ánh sáng đến bề mặt được render. Nếu bề mặt được kết xuất gần với ánh sáng hơn so với bản đồ bóng thì bạn lấy 1.0 từ trình lấy mẫu bóng. Nếu bề mặt xa hơn ánh sáng, bạn nhận được 0,0. Trong cả hai trường hợp, bạn nhân giá trị với màu sáng, sau đó thực hiện tất cả các tính toán ánh sáng của bạn cho ánh sáng đó như bình thường.

Lý do so sánh trước khi lấy mẫu được gọi là "Tỷ lệ lọc gần hơn". Lọc giữa các giá trị độ sâu không tạo ra kết quả hợp lý; nó không phải là những gì bạn muốn. Bạn muốn thực hiện so sánh trước, sau đó lọc các kết quả so sánh boolean. Những gì bạn nhận được là đo lường số lượng mẫu từ kết cấu độ sâu đã vượt qua so sánh. Điều này cho kết quả tốt hơn dọc theo các cạnh của bóng tối.

+0

Damn nó phức tạp. Cảm ơn rất nhiều cho câu trả lời của bạn mặc dù, sau khi đọc 3 tôi bắt đầu để có được nó :) –

Các vấn đề liên quan