Tối ưu hóa kết xuất Octree


7

Nói rằng tôi có một octree và ở một mức độ nhất định, tôi lưu trữ VBO trong octree đó. Tôi biết kích thước của các nút sở hữu vbo để tôi có thể loại bỏ sự bực bội cơ bản. Điều đó hoạt động độc đáo bởi vì mọi thứ bên ngoài màn hình không bao giờ được hiển thị.

Tuy nhiên, thế giới của tôi khá lớn và hiện tại tôi cũng rút ra những điều phía sau đã vẽ được quãng tám. Tôi sẽ sử dụng cái gì để không vẽ các nút bị các nút khác chặn và tôi sẽ làm thế nào về điều đó?

Tôi đã thấy một số đề cập về việc loại bỏ tắc trong OpenGL tuyệt vời nhưng tôi không thấy làm thế nào tôi có thể sử dụng điều đó khi tôi không có sự phân biệt rõ ràng giữa người và người.


1
Nếu nội dung của một nút không nhất thiết phải lấp đầy hoàn toàn một nút thì tôi không thể thấy cách bạn có thể sử dụng octree của mình để tắc
CiscoIPPhone

Bạn có thể sử dụng các nội dung octree như các phần tử và các nút octree như các phần tử. Phạm vi bao phủ pixel tổng hợp của một số nút được lấp đầy một phần (nghĩa là một phần trong đó nó không ánh xạ tới dấu chân pixel đầy đủ của khối nút octree) có thể dễ dàng tạo thành một nút chặn lớn và điều này có thể chặn các nút octree ở xa hơn Máy ảnh.
Crowley9

Câu trả lời:


6

Một trong những tính năng của octree là nó cho phép bạn hiển thị các nút octree của mình theo thứ tự từ trước ra sau. Chỉ cần làm điều này sẽ giúp hiệu suất rất nhiều vì nó cho phép triển khai EarlyZ của phần cứng đồ họa hiệu quả hơn (bạn chạy ít shader hơn, làm ít công việc raster hơn, v.v.)

Lợi ích của việc sử dụng các truy vấn tắc để truy vấn khả năng hiển thị của các nút octree là nó có thể cứu bạn khỏi việc hiển thị các đối tượng hình học rất phức tạp. Các đối tượng (mờ đục) trong cảnh của bạn là các phần tử của bạn và các nút octree của bạn (và theo ngụ ý, nội dung của chúng) là các phần tử. Như Samaursa đã nói, thực sự rất khó để có được điều này, vì vậy hãy kiểm tra bài viết này trước khi thử nó (quầy hàng sẽ giết chết hiệu suất nếu không được xử lý cẩn thận). Ngoài ra, hãy chắc chắn rằng độ phức tạp hình học thực sự là giới hạn hiệu suất của bạn nếu không bạn có thể sẽ lãng phí thời gian của mình.


2

OpenGL vốn không hỗ trợ truy vấn tắc nhưng bạn có thể sử dụng các tiện ích mở rộng như ARB_occlusion_query . Liên kết có một dự án và một PDFgiải thích tốt về cách sử dụng nó. Mặc dù vậy, hãy cẩn thận, đôi khi các truy vấn tắc kết thúc tốn kém hơn là chỉ đơn giản là vẽ hình học. Điều này đặc biệt đúng nếu bạn hình học không phức tạp lắm.

Nếu bạn cung cấp thêm thông tin liên quan đến cảnh của bạn (ảnh chụp màn hình), một giải pháp tốt hơn có thể được cung cấp.


0

Tôi hiện đang đi chỉ với việc đặt vbos của tôi bằng khoảng cách đến máy ảnh. Điều này dường như để giúp đỡ nhất. Trừ khi tôi không hiểu các truy vấn tắc, nó làm chậm mã của tôi và cho kết quả kỳ lạ thay vì thực sự giúp đỡ. Vì vậy, trừ khi tôi thấy một số vấn đề hiệu suất hơn trên đường đi, tôi gắn bó với những gì tôi có.


Ý tưởng tốt. :-) Bạn có thể muốn xem xét các truy vấn ẩn vị ngữ (cần thiết cho phần cứng DX10 và tôi hy vọng có phần mở rộng OGL). Các mục tiêu có thể giúp ngăn chặn các quầy hàng, loại bỏ rất nhiều nhược điểm. Một lần nữa, động lực chính ở đây là nếu bạn đang hiển thị hàng triệu hình tam giác trên mỗi khung.
Crowley9
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.