Tại sao kiểm tra độ sâu không được thực hiện trên hình học trước khi rasterization?


7

Có vẻ như độ sâu thời gian duy nhất được sử dụng để loại bỏ dữ liệu là trong quá trình rasterization, tức là ở cấp độ phân đoạn.

Trong giai đoạn hình học, tôi chỉ thấy việc loại bỏ và cắt các đỉnh. Có thể không xác định được liệu một tam giác có nằm sau một tam giác khác hay không bằng cách sử dụng dữ liệu đỉnh (độ sâu?) Và loại bỏ nếu có? Điều này sẽ không lưu tất cả các công việc sau này trong chuyển đổi quét?


3
Bạn luôn có thể thay đổi độ sâu của một mảnh từ shader mảnh.
Quentin

Dưới đây là một ví dụ về loại bỏ tắc nghẽn dựa trên GPU: interplayoflight.wordpress.com/2017/11/15/ mẹo
Eric

Câu trả lời:


20

Nó không hoạt động tốt để làm các bài kiểm tra chuyên sâu ở cấp độ đỉnh.

Hình tam giác là bề mặt. Tất cả ba đỉnh của một tam giác có thể bị chặn bởi các tam giác khác trong cảnh và giữa của tam giác đó vẫn có thể nhìn thấy được . Cách duy nhất để xác định xem tam giác đó có nằm sau một thứ gì đó khác hay không là nội suy vị trí hoặc độ sâu dọc theo bề mặt của tam giác và xác định xem, tại mỗi bước của phép nội suy đó, tam giác vẫn bị chặn.

Đây chính xác là những gì bài kiểm tra độ sâu trên mỗi mảnh đang làm.

Do đó, mặc dù bạn có thể thực hiện một số "thủ thuật thông minh" trên cơ sở từng đỉnh để thử kiểm tra xem một tam giác có bị chặn hoàn toàn bởi những người khác trước khi kiểm tra từng mảnh hay không, chúng sẽ không bao giờ hoàn toàn chính xác trừ khi bạn thực hiện chính xác điều bạn 'Đang cố gắng tránh: bước dọc theo bề mặt của tam giác khi độ phân giải rasterization của bạn và kiểm tra tam giác ở đó .


1
Đây là một ví dụ sử dụng một số hình khối cơ bản.
Draco18 không còn tin tưởng vào

12
Ngoài ra, nếu bạn loại bỏ dữ liệu ở cấp độ đỉnh, bạn phải cẩn thận với các đa giác trong suốt, như thủy tinh, nước hoặc tán lá.
Nolonar

@Nolonar Mặc dù công bằng mà nói, điều đó không hoạt động tốt với các bài kiểm tra độ sâu theo từng mảnh (ngoài hộp; tất nhiên có các giải pháp như lột sâu).
Jonas Schäfer

2

Bạn có thể xác định nếu một hình tam giác nằm phía sau một hình tam giác khác. Tuy nhiên, đó không phải là thao tác bạn cần thực hiện nếu bạn muốn loại bỏ ở cấp độ tam giác. Bạn sẽ phải xác định xem hình tam giác có nằm sau một rừng hình tam giác hay không: bạn phải xác định xem hình tam giác có nằm sau bất kỳ một hình tam giác nào trong cảnh không.

Tam giác để loại bỏ tam giác là đắt tiền. Mảnh vỡ bằng cách loại bỏ mảnh rẻ hơn nhiều. Cuối cùng, số lượng các hình tam giác sẽ bắt đầu cộng lại và việc loại bỏ mảnh sẽ rẻ hơn rất nhiều.

Điều này cũng sẽ xảy ra sớm hơn bạn nghĩ bởi vì chúng tôi không thể chỉ kiểm tra các hình tam giác riêng lẻ. Chúng ta phải kiểm tra chúng cùng nhau. Nếu bạn có một hình tam giác nằm sau một hình tứ giác (hai hình tam giác), có thể hình tam giác của bạn đang được kiểm tra không bị chặn bởi một trong hai hình tam giác tạo thành hình tứ giác. Điều này có nghĩa là bây giờ bạn cần các bài kiểm tra hình học phức tạp để xem nếu một hình tam giác được bao phủ theo cách này.

Cuối cùng, việc kiểm tra tam giác sẽ tốn kém hơn đáng kể so với việc chỉ thực hiện các bài kiểm tra phân đoạn.


0

Điều này có thể được quan tâm:

Đường ống chỉ có vị trí

Ống Cull sử dụng các kết quả quan trọng này để tính toán thông tin khả năng hiển thị cho tất cả các hình tam giác cho dù chúng có bị loại bỏ hay không. Mặt khác, ống Replay tiêu thụ thông tin về khả năng hiển thị để bỏ qua các hình tam giác bị loại bỏ và chỉ có các hình tam giác nhìn thấy được cuối cùng được chuyển sang giai đoạn rasterization

https://patents.justia.com/patent/20160086299

Nó dường như để giải quyết chính xác vấn đề bạn đang hỏi về.

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.