2013-06-21 20 views
8

Tôi hiện đang làm việc với việc nâng cấp và tái cấu trúc công cụ hiển thị OpenGL. Động cơ được sử dụng để hình dung các cảnh lớn của dữ liệu kiến ​​trúc (các tòa nhà có nội thất), và số lượng vật thể có thể trở nên khá lớn. Như trường hợp với bất kỳ tòa nhà nào, có rất nhiều vật thể bị tắc trong các bức tường, và bạn tự nhiên chỉ thấy các vật thể ở cùng phòng với bạn, hoặc bên ngoài nếu bạn ở bên ngoài. Điều này để lại một số lượng lớn các đối tượng mà nên được occluded thông qua culling tắc và culling culling.Nghệ thuật chụm và Batching hiện đại trong việc hiển thị

Đồng thời có rất nhiều hình lặp lại lặp lại có thể được nhóm trong các biểu thức kết xuất và cũng có rất nhiều đối tượng có thể được hiển thị với hiển thị được lập trình.

Cách tôi nhìn thấy, có thể khó kết hợp việc kết xuất và chọn lọc theo cách tối ưu. Nếu bạn bó quá nhiều đối tượng trong cùng một VBO thì sẽ rất khó để loại bỏ các đối tượng trên CPU để bỏ qua việc hiển thị lô đó. Đồng thời nếu bạn bỏ qua việc hủy bỏ cpu trên cpu, rất nhiều đối tượng sẽ được xử lý bởi GPU trong khi chúng không hiển thị. Nếu bạn bỏ qua batching copletely để dễ dàng cull trên CPU, sẽ có một số lượng lớn các cuộc gọi render không mong muốn.

Tôi đã thực hiện một số nghiên cứu về kỹ thuật và lý thuyết hiện có về cách giải quyết các vấn đề này trong đồ họa hiện đại, nhưng tôi không thể tìm ra giải pháp cụ thể nào. Một ý tưởng mà một đồng nghiệp và tôi nghĩ ra là hạn chế các lô đối tượng tương đối gần nhau, ví dụ như tất cả các ghế trong phòng hoặc trong bán kính của những người gặp gỡ. Điều này có thể được đơn giản hóa và tối ưu hóa thông qua việc sử dụng cây oct.

Có ai có bất kỳ gợi ý nào về kỹ thuật được sử dụng để quản lý cảnh, chọn lọc, phân phối, v.v ... trong các công cụ đồ họa hiện đại không?

+0

Hãy để tôi bắt đầu bằng cách nói rằng tôi không có kiến ​​thức về bất kỳ công cụ đồ họa hiện đại nào. Nhưng điều này nghe có vẻ giống như một vấn đề mà không có một giải pháp duy nhất, thay vào đó nó có thể được giải quyết bằng cách vá và trường hợp chuyển đổi nhiều cách tiếp cận với nhau để cung cấp chất lượng/hiệu suất tốt nhất cho kịch bản nhất định. Đơn giản vì chất lượng và hiệu suất luôn luôn loại trừ lẫn nhau, khi bị áp lực. Tôi thường giải quyết các cuộc gọi vẽ của tôi bằng cách trộn tất cả mọi thứ (!) Cùng nhau trong các khối thân thiện thất vọng (cho bạn: phòng), bằng cách sử dụng mảng kết cấu và whatnot có thể rất hữu ích trong môi trường kiến ​​trúc tĩnh. –

Trả lời

5

Có rất nhiều thông tin về tình trạng bế tắc và tắc nghẽn trên internet. Phần lớn là từ nhà phát triển trò chơi. Dưới đây là danh sách một số điều mà sẽ giúp bạn bắt đầu:

của tôi (khá nhanh) renderer làm việc tương tự như sau:

  1. Collection: Gửi tất cả các đạo cụ, mà bạn muốn làm, để các renderer.
  2. Loại bỏ sự bóc vỏ: Trình kết xuất sẽ loại bỏ các đạo cụ vô hình khỏi danh sách bằng cách sử dụng nhiều luồng song song.
  3. Loại bỏ việc loại trừ: Bây giờ bạn có thể thực hiện việc chọn lọc câm trên CPU (tôi chưa triển khai nó, vì bây giờ tôi không cần nó). Thông tin chi tiết về làm thế nào để làm điều đó một cách hiệu quả có thể được tìm thấy trong các trang trình bày Killzone và Crysis. Một giải pháp sẽ là đọc lại bộ đệm độ sâu của khung hình trước đó từ GPU và sau đó rasterize các hộp giới hạn của các đối tượng trên đầu trang của nó để kiểm tra xem đối tượng có hiển thị hay không.
  4. Tách: Vì bây giờ bạn biết đối tượng nào thực sự được hiển thị, vì chúng hiển thị, bạn phải chia chúng bằng lưới, vì mỗi lưới có một vật liệu hoặc kết cấu khác nhau (nếu không chúng sẽ được kết hợp thành một lưới thép).
  5. Ghép: Bây giờ bạn có danh sách các mắt lưới để hiển thị. Bạn có thể sắp xếp chúng:
    • theo chiều sâu (điều này có thể được thực hiện ở cấp độ thay vì mức lưới), để lưu tỷ lệ lấp đầy (Tôi không khuyên bạn làm điều này nếu trình tạo đoạn của bạn rất đơn giản).
    • bằng lưới (vì có thể có nhiều phiên bản của cùng một lưới và nó sẽ giúp dễ dàng thêm bản sao).
    • bởi kết cấu, bởi vì công tắc kết cấu rất tốn kém.
  6. Hiển thị: Lặp lại qua các mắt lưới được phân đoạn của bạn và hiển thị chúng.

Và như "Ảnh khỏa thân toàn bộ mặt trước" đã nói: Không có giải pháp hoàn hảo.

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