Có một điều tôi chưa bao giờ hiểu. Làm thế nào một trò chơi PC lớn tuyệt vời như GTA IV có thể sử dụng 50% CPU của tôi và chạy ở tốc độ 60fps trong khi bản demo DX của Tellow xoay @ 60fps sử dụng 30%?
Có một điều tôi chưa bao giờ hiểu. Làm thế nào một trò chơi PC lớn tuyệt vời như GTA IV có thể sử dụng 50% CPU của tôi và chạy ở tốc độ 60fps trong khi bản demo DX của Tellow xoay @ 60fps sử dụng 30%?
Câu trả lời:
Nói chung, đó là vì
Chẳng hạn, một tối ưu hóa dễ dàng bạn có thể thực hiện liên quan đến việc không thực sự cố gắng vẽ những thứ không thể nhìn thấy. Hãy xem xét một cảnh phức tạp như cảnh quan thành phố từ Grand Theft Auto IV . Trình kết xuất không thực sự kết xuất tất cả các tòa nhà và cấu trúc. Thay vào đó, nó chỉ hiển thị những gì máy ảnh có thể nhìn thấy. Nếu bạn có thể bay vòng ra phía sau những tòa nhà tương tự, đối diện với máy ảnh ban đầu, bạn sẽ thấy cấu trúc vỏ rỗng được xây dựng một nửa. Mọi điểm mà máy ảnh không thể nhìn thấy đều không được hiển thị - vì bạn không thể nhìn thấy nó, nên không cần phải cố gắng hiển thị cho bạn.
Hơn nữa, các hướng dẫn được tối ưu hóa và các kỹ thuật đặc biệt tồn tại khi bạn đang phát triển dựa trên một bộ phần cứng cụ thể, để cho phép tăng tốc thậm chí tốt hơn.
Phần khác của câu hỏi của bạn là tại sao một bản demo sử dụng rất nhiều CPU:
... trong khi bản demo DX của Ấm trà xoay @ 60fps sử dụng con số khổng lồ 30%?
Thông thường các bản demo của API đồ họa (như dxdemo
) sẽ quay trở lại với cái được gọi là trình kết xuất phần mềm khi phần cứng của bạn không hỗ trợ tất cả các tính năng cần thiết để hiển thị một ví dụ đẹp. Các tính năng này có thể bao gồm những thứ như bóng tối, phản xạ, dò tia, vật lý, et cetera.
Điều này bắt chước chức năng của một thiết bị phần cứng hoàn toàn đầy đủ tính năng không có khả năng tồn tại, để thể hiện tất cả các tính năng của API. Nhưng vì phần cứng không thực sự tồn tại, thay vào đó, nó chạy trên CPU của bạn. Điều đó không hiệu quả hơn nhiều so với việc ủy thác cho một card đồ họa - do đó mức sử dụng CPU cao của bạn.
Kiên nhẫn, kỹ năng kỹ thuật và sức bền.
Điểm đầu tiên là DX Demo chủ yếu là một trợ giúp giảng dạy nên nó được thực hiện cho rõ ràng chứ không phải tốc độ thực hiện.
Đây là một chủ đề khá lớn để cô đọng nhưng phát triển trò chơi chủ yếu là tìm hiểu dữ liệu của bạn và đường dẫn thực hiện của bạn đến một mức độ gần như bệnh lý.
Trò chơi 3D rất hay trong việc đánh lừa thị giác của bạn. Ví dụ, có một kỹ thuật gọi là tắc xung quanh không gian màn hình (SSAO) sẽ mang lại cảm giác chân thực hơn bằng cách che đi những phần của cảnh gần với sự gián đoạn bề mặt. Nếu bạn nhìn vào các góc của bức tường của bạn, bạn sẽ thấy chúng có vẻ hơi tối hơn so với các trung tâm trong hầu hết các trường hợp.
Hiệu ứng rất giống nhau có thể đạt được bằng cách sử dụng tính phóng xạ, dựa trên mô phỏng khá chính xác. Radiosity cũng sẽ tính đến nhiều hiệu ứng hơn của đèn nảy, v.v. nhưng nó đắt tiền về mặt tính toán - đó là một kỹ thuật dò tia.
Đây chỉ là một ví dụ. Có hàng trăm thuật toán cho đồ họa máy tính thời gian thực và về cơ bản chúng dựa trên các xấp xỉ tốt và thường đưa ra rất nhiều giả định. Ví dụ, sắp xếp không gian phải được chọn rất cẩn thận tùy thuộc vào tốc độ, vị trí điển hình của máy ảnh cũng như số lượng thay đổi đối với hình dạng cảnh.
Những 'tối ưu hóa' này rất lớn - bạn có thể thực hiện một thuật toán hiệu quả và làm cho nó chạy nhanh hơn 10 lần, nhưng việc chọn một thuật toán thông minh tạo ra kết quả tương tự ("gian lận") có thể khiến bạn đi từ O (N ^ 4) đến O ( log (N)).
Tối ưu hóa việc thực hiện thực tế là những gì làm cho trò chơi thậm chí hiệu quả hơn, nhưng đó chỉ là tối ưu hóa tuyến tính.
Eeeeek!
Tôi biết rằng câu hỏi này đã cũ, nhưng thật thú vị khi không ai nhắc đến VSync !!! ???
Bạn đã so sánh mức sử dụng CPU của trò chơi ở mức 60fps với mức sử dụng CPU của bản demo ấm trà ở mức 60fps.
Không rõ ràng, cả hai đều chạy (nhiều hơn hoặc ít hơn) ở chính xác 60fps? Điều đó dẫn đến câu trả lời ...
Cả hai ứng dụng đều chạy với vsync được kích hoạt! Điều này có nghĩa là (chết lặng) rằng tốc độ khung hình kết xuất bị khóa với "khoảng trống dọc" của màn hình của bạn. Phần cứng đồ họa (và / hoặc trình điều khiển) sẽ chỉ hiển thị tối đa. 60 khung hình / giây. Tốc độ làm mới 60fps = 60Hz (Hz = mỗi giây). Vì vậy, bạn có thể sử dụng CRT khá cũ, nhấp nháy hoặc màn hình LCD phổ biến. Trên CRT chạy ở tần số 100Hz, bạn có thể sẽ thấy tốc độ khung hình lên tới 100Hz. VSync cũng áp dụng theo cách tương tự với màn hình LCD (chúng thường có tốc độ làm mới 60Hz).
Vì vậy, bản demo ấm trà thực sự có thể chạy hiệu quả hơn nhiều! Nếu nó sử dụng 30% thời gian CPU (so với 50% thời gian CPU cho GTA IV), thì có lẽ nó sử dụng ít thời gian cpu hơn cho mỗi khung hình và chỉ chờ lâu hơn cho khoảng trống dọc tiếp theo. Để so sánh cả hai ứng dụng, bạn nên tắt vsync và đo lại (bạn sẽ đo khung hình / giây cao hơn nhiều cho cả hai ứng dụng).
Đôi khi bạn có thể tắt vsync (hầu hết các trò chơi đều có tùy chọn trong cài đặt của nó). Đôi khi bạn sẽ thấy "xé đồ tạo tác" khi vsync bị tắt.
Bạn có thể tìm thấy chi tiết về nó và tại sao nó được sử dụng tại wikipedia: http://en.wikipedia.org/wiki/Vsync
Trong khi nhiều câu trả lời ở đây cung cấp chỉ dẫn tuyệt vời về cách tôi sẽ trả lời câu hỏi đơn giản hơn tại sao
Có lẽ ví dụ tốt nhất (chắc chắn là một trong những phần mềm được biết đến nhiều nhất) là phần mềm Id. Họ đã nhận ra từ rất sớm, vào thời của Tư lệnh Keen (trước cả 3D) đã nghĩ ra một cách thông minh để đạt được thứ 1 , ngay cả khi nó dựa vào phần cứng hiện đại (trong trường hợp này là một card đồ họa EGA!) sự cạnh tranh mà điều này sẽ làm cho trò chơi của bạn nổi bật. Điều này là đúng nhưng họ nhận ra thêm rằng, thay vì phải tự mình tìm ra các trò chơi và nội dung mới, họ có thể cấp phép cho công nghệ, nhờ đó có được thu nhập từ những người khác trong khi có thể phát triển thế hệ động cơ tiếp theo và do đó lại cạnh tranh với ếch .
Khả năng của những lập trình viên này (kết hợp với hiểu biết về kinh doanh) là những gì làm cho họ trở nên giàu có.
Điều đó nói rằng nó không nhất thiết là tiền thúc đẩy những người như vậy. Nó có khả năng giống như mong muốn đạt được, để hoàn thành. Số tiền họ kiếm được trong những ngày đầu chỉ đơn giản là bây giờ họ có thời gian để dành cho những gì họ thích. Và trong khi nhiều người có lợi ích bên ngoài, hầu hết tất cả vẫn lập trình và cố gắng tìm ra cách để làm tốt hơn lần lặp cuối cùng.
Nói một cách đơn giản, người đã viết bản demo ấm trà có thể có một hoặc nhiều vấn đề sau:
Cái cuối cùng nghe có vẻ khắc nghiệt 2 nhưng rõ ràng có một số người giỏi hơn những người khác, đôi khi những đường cong hình chuông có kết thúc cực đoan và họ có xu hướng bị thu hút bởi những kết thúc cực đoan tương ứng của những gì được thực hiện với kỹ năng đó.
Các mục tiêu nhỏ hơn thực sự có khả năng là lý do chính. Mục tiêu của bản demo ấm trà chỉ là một bản demo. Nhưng không phải là bản demo của kỹ năng lập trình 3 . Nó sẽ là bản demo của một khía cạnh nhỏ của HĐH (lớn), trong trường hợp này là kết xuất DX.
Đối với những người xem bản demo, nó sẽ không sử dụng CPU nhiều hơn mức yêu cầu miễn là nó trông đủ tốt. Sẽ không có động cơ để loại bỏ chất thải khi sẽ không có người thụ hưởng. So sánh một trò chơi sẽ thích có chu kỳ dự phòng cho AI tốt hơn, âm thanh tốt hơn, đa giác hơn, nhiều hiệu ứng hơn.
Vì một vài lý do
EDIT: Để cho một vài số
Athlon-64 2.8 Ghz với GPU NV-6800. Kết quả là:
Đôi khi một cảnh có thể có nhiều diễn ra hơn nó xuất hiện. Ví dụ, một ấm trà xoay với hàng ngàn đỉnh, ánh xạ môi trường, ánh xạ va chạm và các bóng đổ pixel phức tạp khác, tất cả được hiển thị đồng thời lên tới rất nhiều quá trình xử lý. Rất nhiều lần những bản demo ấm trà này chỉ đơn giản là để thể hiện một số loại hiệu ứng đặc biệt. Không phải lúc nào họ cũng có thể sử dụng GPU tốt nhất khi hiệu suất tuyệt đối không phải là mục tiêu.
Trong một trò chơi, bạn có thể thấy các hiệu ứng tương tự nhưng chúng thường được thực hiện theo cách bị xâm phạm nhằm nỗ lực tối đa hóa tốc độ khung hình. Những tối ưu hóa này mở rộng đến mọi thứ bạn thấy trong trò chơi. Vấn đề trở thành, "Làm thế nào chúng ta có thể tạo ra một cảnh ngoạn mục và thực tế nhất với sức mạnh xử lý ít nhất?" Đó là những gì làm cho các lập trình viên trò chơi một số tối ưu hóa tốt nhất xung quanh.
Trong tất cả các câu trả lời đủ điều kiện và tốt được đưa ra, câu hỏi vẫn còn thiếu: Bộ đếm sử dụng CPU của Windows không đáng tin cậy lắm. Tôi đoán rằng bản demo ấm trà đơn giản này chỉ gọi chức năng kết xuất trong vòng lặp nhàn rỗi, chặn tại bộ đệm trao đổi.
Bây giờ bộ đếm sử dụng CPU của Windows chỉ xem xét thời gian sử dụng CPU trong mỗi quy trình, chứ không phải thời gian sử dụng CPU này. Hãy thử thêm một
Sleep(0);
ngay sau khi trở về từ chức năng kết xuất và so sánh.
Ngoài ra, có rất nhiều thủ thuật từ quan điểm nghệ thuật để tiết kiệm sức mạnh tính toán. Trong nhiều trò chơi, đặc biệt là những trò chơi cũ hơn, bóng tối được định sẵn và "nướng" ngay vào kết cấu của bản đồ. Nhiều lần, các nghệ sĩ đã cố gắng sử dụng các mặt phẳng (hai hình tam giác) để thể hiện những thứ như cây cối và hiệu ứng đặc biệt khi nó trông giống nhau. Sương mù trong các trò chơi là một cách dễ dàng để tránh hiển thị các vật thể ở xa và thông thường, các trò chơi sẽ có nhiều độ phân giải của mọi đối tượng cho các chế độ xem xa, giữa và gần.
Cốt lõi của bất kỳ câu trả lời nào phải là thế này - Các phép biến đổi mà động cơ 3D thực hiện hầu hết được chỉ định trong phép cộng và phép nhân (đại số tuyến tính) (không có nhánh hoặc nhảy), các hoạt động của một bản vẽ một khung thường được chỉ định theo cách nhiều công việc của add-mul có thể được thực hiện song song. Các lõi GPU là các add-mul rất tốt và chúng có hàng chục hoặc hàng trăm lõi bổ sung.
CPU còn lại để làm những việc đơn giản - như AI và logic trò chơi khác.
Làm thế nào một trò chơi PC lớn tuyệt vời như GTA IV có thể sử dụng 50% CPU của tôi và chạy ở tốc độ 60fps trong khi bản demo DX của Tellow xoay @ 60fps sử dụng 30%?
Mặc dù GTA hoàn toàn có khả năng hiệu quả hơn so với bản demo DX, đo lường hiệu quả của CPU theo cách này về cơ bản là bị hỏng. Hiệu quả có thể được xác định, ví dụ như bao nhiêu công việc bạn làm trong một thời gian nhất định. Một ví dụ đơn giản: sinh ra một luồng trên mỗi CPU logic và để một vòng lặp vô hạn đơn giản chạy trên nó. Bạn sẽ nhận được mức sử dụng CPU là 100%, nhưng nó không hiệu quả, vì không có công việc hữu ích nào được thực hiện.
Điều này cũng dẫn đến một câu trả lời: làm thế nào một trò chơi có thể hiệu quả? Khi lập trình "những trò chơi lớn tuyệt vời", một nỗ lực lớn được dành để tối ưu hóa trò chơi về mọi mặt (mà ngày nay cũng thường bao gồm tối ưu hóa đa lõi). Đối với bản demo DX, điểm của nó không chạy nhanh, mà là thể hiện các khái niệm.
Tôi nghĩ bạn nên xem việc sử dụng GPU thay vì CPU ... Tôi cá rằng card đồ họa trong GTA IV bận rộn hơn nhiều so với mẫu Tellow (thực tế nó không hoạt động).
Có lẽ bạn có thể sử dụng một cái gì đó như màn hình này để kiểm tra xem:
http://doads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-doad-2185.html
Ngoài ra tốc độ khung hình là điều cần xem xét, có thể mẫu ấm trà đang chạy ở tốc độ tối đa (có thể 1000fps) và hầu hết các trò chơi được giới hạn ở tần số làm mới của màn hình (khoảng 60fps).
Nhìn vào câu trả lời trên vsync; đó là lý do tại sao chúng đang chạy ở cùng tốc độ khung hình.
Thứ hai, CPU bị bỏ lỡ hàng đầu trong một trò chơi. Một lời giải thích đơn giản là vòng lặp trò chơi chính chỉ là một vòng lặp vô hạn:
while(1) {
update();
render();
}
Ngay cả khi trò chơi của bạn (hoặc trong trường hợp này, ấm trà) không hoạt động nhiều, bạn vẫn ăn CPU trong vòng lặp của mình.
Cpu 50% trong GTA là "năng suất cao hơn" 30% trong bản demo, vì nhiều khả năng nó không hoạt động nhiều; nhưng GTA đang cập nhật hàng tấn chi tiết. Ngay cả việc thêm "Ngủ (10)" vào bản demo có thể sẽ làm giảm CPU của nó xuống một tấn.
Cuối cùng nhìn vào việc sử dụng GPU. Bản demo có thể chiếm <1% trên một thẻ video hiện đại trong khi GTA có thể sẽ chiếm đa số trong khi chơi trò chơi.
Nói tóm lại, điểm chuẩn và số đo của bạn không chính xác.
Bản demo ấm trà DX không sử dụng 30% CPU để thực hiện công việc hữu ích. Đó là chờ đợi bận rộn vì nó không có gì khác để làm.
Từ những gì tôi biết về loạt Unreal, một số quy ước bị phá vỡ như đóng gói. Mã được biên dịch thành mã byte hoặc trực tiếp thành mã máy tùy theo trò chơi. Ngoài ra, các đối tượng được kết xuất và đóng gói dưới dạng mắt lưới và những thứ như kết cấu, ánh sáng và bóng được định sẵn trong khi như một hoạt hình 3d thuần túy đòi hỏi điều này trong thời gian thực này. Khi trò chơi đang thực sự chạy, cũng có một số tối ưu hóa như chỉ hiển thị các phần có thể nhìn thấy của một đối tượng và chỉ hiển thị chi tiết kết cấu khi đóng lên. Cuối cùng, có thể các trò chơi video được thiết kế để tận dụng tốt nhất nền tảng tại một thời điểm nhất định (ví dụ: Intelx86 MMX / SSE, DirectX, ...).
Tôi nghĩ rằng có một phần quan trọng của câu trả lời bị thiếu ở đây. Hầu hết các câu trả lời cho bạn biết "Biết dữ liệu của bạn". Thực tế là bạn phải, theo cùng một cách và có cùng mức độ quan trọng, cũng phải biết:
NHƯNG , trên hết, với các máy tính hiện đại hiện tại, bạn sẽ không bao giờ có thể phát video 1080p thực sự ở mức >> 30ftp (một hình ảnh 1080p duy nhất trong 64 bit sẽ mất 15 000 Ko / 14,9 MB). Lý do cho điều đó là do lấy mẫu / độ chính xác. Trò chơi video sẽ không bao giờ sử dụng độ chính xác kép (64 bit) cho pixel, hình ảnh, dữ liệu, v.v., mà sử dụng độ chính xác tùy chỉnh thấp hơn (~ 4-8 bit) và đôi khi độ chính xác thấp hơn với các kỹ thuật nội suy để cho phép tính toán hợp lý thời gian.
Ngoài ra còn có các kỹ thuật khác như Cắt dữ liệu (cả với chuẩn OpenGL và triển khai phần mềm), Nén dữ liệu, v.v. Hãy nhớ rằng GPU hiện tại có thể nhanh hơn 300 lần so với CPU hiện tại về khả năng phần cứng. Tuy nhiên, một lập trình viên giỏi có thể có được hệ số 10-20x, trừ khi vấn đề của bạn được tối ưu hóa hoàn toàn và hoàn toàn song song (đặc biệt là song song hóa nhiệm vụ).
Theo kinh nghiệm, tôi có thể nói với bạn rằng tối ưu hóa giống như một đường cong theo cấp số nhân. Để đạt được hiệu suất tối ưu, thời gian cần thiết có thể cực kỳ quan trọng.
Vì vậy, để quay trở lại ấm trà, bạn nên xem cách hình học được thể hiện, lấy mẫu và với độ chính xác mà Vs thấy trong GTA 5, về mặt hình học / kết cấu và quan trọng nhất là các chi tiết (độ chính xác, lấy mẫu, v.v.)