Biểu đồ cảnh trong chủ đề riêng biệt


12

Tôi phát triển công cụ trò chơi của riêng mình cho vui (nhưng không sinh lãi). Tôi đã kết xuất trong một luồng và cập nhật biểu đồ cảnh của tôi (vận tốc, v.v.) trong một luồng khác. Khi đến lúc kết xuất, luồng kết xuất sẽ thêm các nút hiển thị vào bộ đệm tuyến tính mới và duyệt qua chúng.

Chi tiết hơn, đồ thị cảnh của tôi là bộ đệm ba. Mỗi nút trong biểu đồ cảnh của tôi có ba bản sao ma trận biến đổi tương đối và tuyệt đối của nó (4 x 4). Tại bất kỳ thời điểm nào, một bản sao được ghi bởi luồng biểu đồ cảnh, một bản sao được đọc bởi trình kết xuất và một bản thứ ba tồn tại để người đọc hoặc người viết có thể chuyển sang bản tiếp theo mà không phải chờ người khác. Điều này ngăn việc ghi vào một cái gì đó trong khi nó được kết xuất và hiển thị biểu đồ cảnh được cập nhật một nửa. Bằng cách nào đó tôi cũng đã có một bản sao thứ tư của mỗi ma trận để người dùng làm việc để không xung đột với luồng cập nhật. Điều này dường như thực hiện tốt bằng cách tránh phải đồng bộ hóa mọi lúc.

Tuy nhiên, đây là một mớ hỗn độn.

Đây là những mục tiêu cuối cùng của tôi cho hệ thống:

  • Kết xuất và cập nhật biểu đồ cảnh ở trong các chủ đề riêng biệt.
  • Giảm thiểu bao nhiêu chủ đề này phải chờ đợi nhau.
  • Đừng kết xuất một cảnh đã được cập nhật nửa chừng bởi luồng cập nhật. Điều này đặc biệt đáng chú ý nếu máy ảnh di chuyển nhanh và đôi khi nó được hiển thị trước hoặc sau khi cập nhật.
  • Giảm sử dụng bộ nhớ. Tôi có quá nhiều ma trận trên mỗi nút. Tôi cũng đang xem xét việc chuyển sang các vectơ cho vị trí / góc quay / tỷ lệ do tăng trôi điểm trôi nổi với ma trận.
  • Khả năng xử lý hàng chục ngàn Nút. Hệ thống hiện tại làm điều này hợp lý tốt.

Tôi cũng hy vọng sẽ kết hợp Bullet (công cụ vật lý) và kết nối mạng trong tương lai, không ai trong số đó tôi đã suy nghĩ nhiều.

Một số cách tiếp cận để thực hiện một đồ thị cảnh tốt hơn là gì?

Câu trả lời:


4

Bạn đã đọc luận án của Julian Spohr về "Pace" và trình kết xuất của nó chưa? Nó mô tả cái gọi là "trình kết xuất " * trình kết xuất song song và có thể cung cấp cho bạn một số ý tưởng.

Đây là trang tóm tắt (bằng tiếng Đức) và đây là đường dẫn trực tiếp tới bản PDF bằng tiếng Anh.

( *: liên kết này cũng đi đến bài viết mà ban đầu tôi nghe về luận án.)

EDIT: Tôi chỉ lướt qua điều này trước đây và tôi chỉ nhìn lại lần nữa ... và nhận ra nó thực sự che lấp các chi tiết đồ thị cảnh. Tôi đoán tôi đã không nhận ra thiết kế của anh ấy trực giao như thế nào. Xin lỗi nếu nó không đặc biệt hữu ích.


1
Một mảnh của bài báo này vẫn còn bị mắc kẹt với tôi: "Lý tưởng nhất là ứng dụng thậm chí sẽ không biết có một biểu đồ cảnh nào cả, nó chỉ nên biết về một thành phần xem mà nó phải thông báo về các thay đổi đối với mô hình dữ liệu". Điều này truyền cảm hứng cho tôi một cách suy nghĩ mới về nó: Tôi không cần phải đệm ba lần toàn bộ cảnh, chỉ những gì có thể nhìn thấy qua máy ảnh hiện tại. Tôi có thể di chuyển loại bỏ từ luồng kết xuất sang luồng đồ thị cảnh (khi nó gặp máy ảnh) và tại bất kỳ thời điểm nào, một trong ba bộ đệm này có thể được ghi bởi nó và một trình đọc khác của trình kết xuất.
EricP

1
Bạn cũng có thể xem bài viết "Thiết kế động cơ máy ảnh trung tâm để kết xuất đa luồng" trong Game Engine Gems 1 và "Kết nối song song thực tế với DirectX 9 và DirectX 10" - microsoft.com/doads/en/lahoma
Neverender

1
Trông giống như Game Engine Gems 1 có sẵn trực tuyến miễn phí: books.google.com/...
EricP
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.