Mã hóa cho một mảng hiển thị thực sự, độ phân giải cao


17

Tôi đã được giao nhiệm vụ xây dựng bản demo "toàn màn hình" thời gian thực để chạy trên một mảng 5x2 của TV LED 60 inch: hay nói cách khác là màn hình 20 megapixel.

Chúng tôi đã có một cỗ máy được chế tạo có thể chạy một máy tính để bàn Win7 trải đều trên màn hình ở độ phân giải đầy đủ và một số thẻ video khá tốt.

Câu hỏi của tôi là: ngoài số lượng công việc lố bịch mà các công cụ tạo pixel của tôi sẽ thực hiện, còn có những hạn chế nào khác của DX10. * Sẽ xuất hiện ở đây với chế độ xem có kích thước hoàn hảo hơn không? Tôi sẽ không có quyền truy cập vào phần cứng cho đến tuần sau nhưng tôi muốn có một cái gì đó được viết trước đó để tôi có thể sử dụng để đánh giá hệ thống.

Cập nhật

Mặc dù Imanaged để làm việc này trên một máy duy nhất với một loạt thẻ AMD EyeFinity (6 đầu ra) - để giữ mọi thứ hoạt động trơn tru, cách "dễ nhất" hóa ra là tạo một cửa sổ DX trên mỗi màn hình khi hiển thị nhịp cửa sổ gây ra một số vấn đề về hiệu năng - Tôi cũng đã làm cho nó hoạt động khá tốt bằng cách phân phối tác vụ trên một nhóm máy, mỗi máy có hai màn hình.

Thật dễ dàng đáng ngạc nhiên. Đối với ứng dụng XNA thử nghiệm của mình, tôi đã thêm GameComponent để nắm bắt một số trạng thái trò chơi (vị trí / hướng camera, v.v.) và spam UDP trên mạng con cục bộ trên mỗi khung.

Thành phần đó có một Modecông tắc (gửi hoặc nhận). Nếu ở Receivechế độ, nó sẽ bắt các datagram UDP và cập nhật trạng thái trò chơi với thông tin từ người gửi. Sendchế độ chỉ gửi các gói trạng thái và thông qua dịch vụ / trình nền, khiến các nút khởi động hoặc dừng ứng dụng khách. Bất kỳ máy khách nào cũng có thể hoạt động như một "chủ" và việc chuyển đổi máy khách sang Sendchế độ yêu cầu tất cả các nút khác chuyển sang Receive. Thật thú vị khi xem điều gì xảy ra khi mọi người đang chiến đấu với sự kiểm soát.

Một lợi ích thú vị khác: Tôi đã tạo một ứng dụng bảng điều khiển xử lý một loạt các định nghĩa trạng thái khung hình chính - vị trí, thời gian, v.v. - nội suy khi cần và gửi chúng bằng cách sử dụng cùng một mã như được sử dụng trong công cụ trò chơi. Điều này cho phép tôi dễ dàng di chuyển tập lệnh, gửi các biến đổi từ trình duyệt web, v.v.

Tổng cộng, phải mất khoảng 50 dòng mã để giữ cho nhiều bản sao của ứng dụng chạy đồng bộ. Một số phức tạp bổ sung đến từ việc tắt cài đặt vị trí camera cho từng máy và sửa một số phiền toái về phối cảnh / chiếu, nhưng phần lớn trong số đó thuộc về tệp cấu hình trên mỗi nút.


2
Điều này nghe có vẻ như một dự án thực sự thú vị.
Cypher

1
Vâng. Tôi gần như đã cười thầm và muah-ha-ha'd.
3Dave

3
Tôi đã thực hiện nó với 10 cỗ máy hàng hóa rẻ tiền, mỗi máy chỉ lo lắng về việc hiển thị một phần nhỏ của thế giới quan và nối mạng để duy trì đồng bộ hóa và kiểm soát thời gian từ một số hộp chính. Thay vì cạnh tranh chảy máu, cấu hình máy chưa được kiểm tra với hàng tấn rủi ro R & D, đây sẽ là một giải pháp đóng hộp với rủi ro rất thấp. Đó chỉ là tôi, mặc dù, YMMV.
Patrick Hughes

Đó là cách tôi sẽ đi, nhưng tôi đã không mua phần cứng. = /
3Dave

Trên thực tế, mạng, khía cạnh kết xuất được đồng bộ hóa âm thanh tuyệt vời. Thử thách, nhưng tôi đã có thể làm thế nào để làm điều đó. Và cung cấp một số tính linh hoạt lại: không cần thiết để kết xuất nhiều luồng từ một hộp nếu bạn muốn tách mảng. "Song song" là một trong những từ yêu thích của tôi!
3Dave

Câu trả lời:


5

Tôi sẽ lo lắng nhiều về cấu hình phần cứng như phần mềm. Bạn không phải chạy mỗi TV ở độ phân giải gốc và kích thước màn hình khác với độ phân giải. Mặc dù vậy, tôi sẽ giả sử TV 60 "là 1920x1080, vì vậy độ phân giải gốc trên tất cả chúng là 9600x2160 nếu bạn có nghĩa là 5 hàng x 2 cột TV hoặc 3840x5400 nếu bạn có nghĩa là 5 cột x 2 hàng.

Thẻ AMD Radeon mới nhất, 7970 hỗ trợ độ phân giải lên tới 4096x2160 mỗi màn hình, tối đa là hai màn hình, nếu bạn đang sử dụng DisplayPort 1.2 để truyền video. Vì vậy, nó có thể giúp bạn đạt được độ phân giải gốc, tuy nhiên nó sẽ không hoạt động với tối đa 5 TV theo cách đó.

AMD Radeon 6870 Eyefinity 6 hỗ trợ tối đa 6 đầu ra cùng một lúc, nhưng chỉ trên độ phân giải tối đa 5760x2160. Nó cũng hỗ trợ cấu hình Crossfire sẽ giúp hiệu suất của bạn khá nhiều. Hãy nhớ rằng các GPU bổ sung sẽ không mang lại độ phân giải tối đa lớn hơn.

Thiếu một thiết lập hiển thị hoàn toàn tùy chỉnh hoặc một cái gì đó để phân chia tín hiệu video của bạn sang nhiều màn hình / TV hơn, tôi không chắc làm thế nào bạn có thể chạy trên 10 màn hình cùng một lúc. Nhưng nếu bạn có khả năng đó, thì điều bạn đang tìm kiếm là thiết lập đồ họa nhanh nhất hỗ trợ độ phân giải gần nhất với độ phân giải gốc của bạn. Khi bạn đã có rằng đặt cược tốt nhất của bạn chỉ là giữ cho các pixel shader của bạn càng rẻ càng tốt và tránh rút tiền, điều đó có nghĩa là tính toán các pixel đơn lẻ nhiều lần. Frustum và loại bỏ tắc, và phân loại độ sâu sẽ giúp rất nhiều trong việc giảm quá mức. Theo giới hạn trong DX10, tôi không chắc chắn về giới hạn độ phân giải, tôi chắc chắn có một giới hạn, nhưng nó có thể lớn hơn bất kỳ thẻ DX10 nào tồn tại.


Phần cứng đã chạy toàn bộ mảng, với mỗi màn hình riêng lẻ ở 1920x1080. 5 cột của nó bằng hai hàng. Một anh chàng khác có một cửa sổ OpenGL độ phân giải đầy đủ với khung dây xoay đang chạy. Chỉ cần tự hỏi về bất kỳ giới hạn DX nào có thể quay lại và cắn tôi sau này.
3Dave

1
Theo như tôi biết, bạn sẽ không bị giới hạn bởi DX10 về độ phân giải như bạn mô tả. Nếu bạn có thể hiển thị trên thiết lập đó thì hiệu suất sẽ là mối quan tâm duy nhất của bạn và việc xử lý hiệu suất đó sẽ giống như bất kỳ trò chơi / chương trình nào khác, chỉ cần tăng lên một chút do không gian màn hình phụ.
Nic Foster

6

Bạn có thể dễ dàng tạo mục tiêu kết xuất có kích thước tương đương để kiểm tra hiệu suất. Bạn sẽ phải hạ thấp nó hoặc phóng to khi sao chép nó vào bộ đệm phía sau cho đến khi bạn có được phần cứng thực sự.

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.