Tại sao chúng ta có các khung đồ họa như OpenGL và DirectX, khi các trò chơi chỉ có thể vẽ pixel trực tiếp?


15

Các trò chơi và các ứng dụng đồ họa chuyên sâu khác sử dụng các khung như OpenGL và DirectX. Ngoài ra, họ yêu cầu các tính năng như pixel shader và DX12.

Nhưng tại sao chúng ta lại cần tất cả các khung và tính năng GPU này khi chúng ta có thể vẽ mọi thứ theo pixel?

Đầu tiên, trò chơi sẽ phải được biên dịch theo cách để nó được vẽ từng pixel. Điều này có khả năng làm cho trò chơi có thể thực thi lớn, nhưng nó sẽ nhanh hơn và hoạt động trên bất kỳ GPU màu 32 bit nào (ngay cả những cái cũ)?

Tôi biết rằng các trò chơi 3D đầu tiên được vẽ pixel theo pixel, nhưng tại sao bây giờ chúng không làm điều đó?


Nói chung, thực hiện một thao tác trên nhiều thứ sẽ hiệu quả và dễ suy nghĩ hơn là thực hiện trên mọi thứ riêng lẻ.
dùng541686

2
Bởi vì mọi trò chơi sẽ cần phải được viết lại cho mọi card đồ họa. Trừ khi họ không sử dụng card đồ họa, nhưng sau đó họ sẽ chậm.
dùng253751

Tôi nghĩ rằng các công ty GPU phải tạo trình điều khiển DirectX của riêng họ
Suici Doga

"Nhưng tại sao chúng ta sẽ cần tất cả các khung và tính năng GPU này khi chúng ta có thể vẽ mọi thứ theo pixel?" đó là cách nó được thực hiện trong những ngày tốt. Wolfenstein 3D, Doom, Duke Nukem 3D, Quake và hầu hết các trò chơi khác vào cuối năm 90 đã sử dụng kết xuất phần mềm thuần túy (Quake cung cấp trình kết xuất OpenGL làm tùy chọn).
el.pescado

1
@MatthewRock Bạn không hữu ích. Bạn chắc chắn có thể gói một hệ điều hành với một trò chơi bên trong một container docker và phân phối container. Bằng cách đó, người dùng không cần phải cài đặt phụ thuộc thư viện cho bản phân phối của họ.
Navin

Câu trả lời:


22

Tốc độ là lý do phổ biến nhất tại sao điều này không được thực hiện. Trong thực tế, bạn có thể làm những gì bạn đề xuất, nếu bạn tạo ra hệ điều hành của riêng mình, nó sẽ rất chậm vì lý do kiến ​​trúc. Vì vậy, giả định rằng nó nhanh hơn là một chút thiếu sót. Ngay cả khi nó sẽ nhanh hơn, nó sẽ kém hiệu quả hơn về mặt phát triển (như tăng tốc độ 1% cho 10 lần công việc).

Sao chép dữ liệu từ CPU sang card đồ họa là một hoạt động tương đối chậm. Bạn càng ít sao chép tốc độ cập nhật của bạn càng nhanh. Vì vậy, lý tưởng là bạn sẽ có hầu hết dữ liệu trên GPU của mình và chỉ cập nhật các khối dữ liệu nhỏ. Có một thế giới khác biệt giữa việc sao chép trên 320x200 pixel so với 1920x1200 trở lên. Xem số lượng pixel bạn cần cập nhật tăng theo phương trình bậc hai khi các cạnh phát triển.

Ví dụ: Sẽ rẻ hơn khi yêu cầu GPU di chuyển hình ảnh đúng 10 pixel so với sao chép các pixel theo cách thủ công vào bộ nhớ video ở các vị trí khác nhau.

Tại sao bạn phải đi qua một API? Đơn giản vì đó không phải là hệ thống của bạn. Hệ điều hành không thể cho phép bạn làm bất cứ điều gì bạn muốn vì lý do an toàn. Thứ hai bởi vì hệ điều hành cần loại bỏ phần cứng trừu tượng, ngay cả HĐH cũng đang nói chuyện với trình điều khiển một số hệ thống trừu tượng, một API nếu bạn muốn.

Trong thực tế, tôi sẽ đánh giá khả năng hệ thống của bạn sẽ nhanh hơn, nếu bạn tự làm tất cả công việc, gần bằng không. Nó hơi giống như so sánh C và lắp ráp. Chắc chắn bạn có thể viết lắp ráp, nhưng trình biên dịch ngày nay khá thông minh và tối ưu hóa tốt hơn và tốt hơn mọi lúc. Thật khó để trở nên tốt hơn bằng tay, ngay cả khi bạn có thể năng suất của bạn sẽ giảm xuống.

PS: API không làm cho bản cập nhật này không giống như các trò chơi cũ đã làm. Đó chỉ là không hiệu quả. Không phải vì tâm trí API mà vì đó là giai đoạn không hiệu quả.

PPS: Đây là lý do tại sao họ tung ra Vulkan.


6
See the number of pixels you need to update grows exponetially when the sides grow.Phương trình bậc hai, tôi nghĩ.
Cthulhu

"Sao chép dữ liệu từ CPU sang card đồ họa là một hoạt động tương đối chậm." Điều này là đúng, nhưng không liên quan. Sao chép hơn vài triệu pixel ở tốc độ 60 khung hình / giây có thể dễ dàng đạt được qua các liên kết PCI-E thậm chí khiêm tốn (chỉ cần vài trăm megabyte mỗi giây.)
Coxy

2
@ pjc50 Điều đó không sai, nhưng cũng không chính xác. GPU chuyên dùng để chạy một chương trình duy nhất (thường là shader) song song trên một lượng lớn dữ liệu. Vì vậy, bạn cần thực hiện các hoạt động tương tự trên nhiều dữ liệu để thực sự sử dụng sức mạnh tính toán của GPU. Nếu chương trình của bạn không hoạt động, tốt hơn bạn nên chạy chương trình trên CPU.
Nero

2
x22x

1
Bạn nói về sao chép và di chuyển, nhưng điều quan trọng hơn là thế hệ hình ảnh thực tế. Bạn phải xác định đối tượng nào sẽ được nhìn thấy tại điểm nào, nó sẽ được chiếu sáng như thế nào, ảnh hưởng của khói, v.v., GPU được tối ưu hóa cao để thực hiện các hoạt động này nhanh và song song. API giúp dễ dàng thể hiện các hoạt động phổ biến.
IMil

15

hoạt động trên bất kỳ GPU màu 32-bit (ngay cả những cái cũ)?

Một chút lịch sử ở đây: đây là cách các trò chơi được thực hiện trên PC cho đến khi các bộ tăng tốc đồ họa bắt đầu có sẵn vào giữa những năm 90. Nó thực sự hoạt động trên tất cả các phần cứng, vì phần cứng không hoạt động nhiều.

Bộ tăng tốc đồ họa cho phép vẽ các pixel nhanh hơn đáng kể so với CPU, bằng cách sử dụng phần cứng và song song chuyên dụng. Máy gia tốc chứa một số lõi xử lý. Một máy tính để bàn sẽ có từ 1 đến 8 lõi tùy theo độ tuổi. Card đồ họa GTX970Ti của tôi có lõi 1664 (một nghìn sáu trăm sáu mươi tư!). Điều này rõ ràng đánh bại PC cho tốc độ thô bằng một chặng đường dài.

Tuy nhiên, máy gia tốc không được chuẩn hóa và thường bao gồm các thủ thuật kiến ​​trúc máy tính kỳ lạ để đạt được tốc độ của chúng. Để viết một trò chơi không được tùy chỉnh theo kiểu và kiểu thẻ cụ thể, cần phải tồn tại API. Và đó là những gì DirectX, GL và các ngôn ngữ shader được sử dụng cho. Trên thực tế, viết shader thứ gần nhất để viết chương trình vẽ pixel trực tiếp - chỉ là thẻ sẽ chạy song song một nghìn bản chương trình đó cho bạn, mỗi pixel một pixel.


APU máy tính xách tay của tôi có 256 lõi đổ bóng @ 686MHZ trong khi máy tính bảng của tôi có 192.
Suici Doga

Này, Titan X có 5760 lõi trong đó.
Daniel

@Daniel Có bất kỳ trò chơi nào mà Titan X đạt tốc độ <30 khung hình / giây ở mức cực cao. Titan X rất mạnh mẽ
Suici Doga

Ummm, Một trong số này, có lẽ: maximumpc.com/10- most
Daniel

@Daniel Các nhà phát triển của những trò chơi đó cần có khoảng 2-4 thẻ Titan X :)
Suici Doga

14

Chỉ cần để thêm vào câu trả lời của joojaa , mọi thứ đều vẫn đang được rút ra từng pixel một. Bạn chỉ đang tạo các pixel bằng cách sử dụng trình tạo bóng / trình biên dịch / trình tạo điểm ảnh đỉnh, sau đó tạo kết cấu và chiếu sáng chúng bằng cách sử dụng trình tạo bóng mảnh. Điều này đã được thực hiện trong phần mềm vào những năm 90 khi card màn hình của bạn không chỉ là bộ đệm và bộ đệm khung, nhưng nó chậm như địa ngục. Do đó phát minh ra GPU hiện đại.

Các phép toán vẽ đang diễn ra về cơ bản giống như thời kỳ trước của Doom, nhưng bây giờ nó đang chạy trên hàng trăm / nghìn ALU shader chứ không phải là một số lõi CPU. Các API ánh xạ về cơ bản cùng một bộ hướng dẫn GPU phía sau hậu trường. Họ chỉ ở đó để ngăn bạn phải viết một tấn lắp ráp GPU hầm hố trên nhiều nền tảng của nhà cung cấp.

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.