มีบางอย่างที่ฉันไม่เคยเข้าใจ เกมพีซีขนาดใหญ่ที่ยอดเยี่ยมอย่าง GTA IV สามารถใช้ซีพียูของฉันได้ 50% และทำงานที่ 60fps ในขณะที่การสาธิต DX ของ Teapot @ 60fps ที่หมุนได้ใช้งานได้ถึง 30%
มีบางอย่างที่ฉันไม่เคยเข้าใจ เกมพีซีขนาดใหญ่ที่ยอดเยี่ยมอย่าง GTA IV สามารถใช้ซีพียูของฉันได้ 50% และทำงานที่ 60fps ในขณะที่การสาธิต DX ของ Teapot @ 60fps ที่หมุนได้ใช้งานได้ถึง 30%
คำตอบ:
โดยทั่วไปนั้นเป็นเพราะ
ตัวอย่างเช่นการปรับให้ง่ายอย่างหนึ่งที่คุณสามารถทำได้นั้นเกี่ยวข้องกับการไม่พยายามวาดสิ่งที่มองเห็น พิจารณาฉากที่ซับซ้อนเช่น cityscape จากGrand Theft Auto IV ตัวเรนเดอร์ไม่สามารถสร้างสิ่งปลูกสร้างและโครงสร้างทั้งหมด แต่มันเป็นการแสดงผลเฉพาะสิ่งที่กล้องมองเห็น หากคุณสามารถบินไปรอบ ๆ ด้านหลังของอาคารเดียวกันหันหน้าไปทางกล้องเดิมคุณจะเห็นโครงสร้างเปลือกครึ่งโหลที่สร้างขึ้น ทุกจุดที่กล้องมองไม่เห็นจะไม่ถูกแสดงผลเนื่องจากคุณไม่สามารถมองเห็นได้ไม่จำเป็นต้องพยายามแสดงให้คุณเห็น
นอกจากนี้ยังมีคำแนะนำที่ได้รับการปรับให้เหมาะสมและเทคนิคพิเศษเมื่อคุณพัฒนากับชุดฮาร์ดแวร์เฉพาะ
ส่วนอื่น ๆ ของคำถามของคุณคือเหตุผลที่เดโมใช้ CPU มาก:
... ในขณะที่การสาธิต DX ของ Teapot @ 60fps ที่หมุนได้ใช้งานได้ถึง 30%?
เป็นเรื่องปกติสำหรับการสาธิต API กราฟิก (เช่นdxdemo
) เพื่อย้อนกลับไปยังสิ่งที่เรียกว่าซอฟต์แวร์ตัวแสดงผลเมื่อฮาร์ดแวร์ของคุณไม่รองรับคุณสมบัติทั้งหมดที่จำเป็นในการแสดงตัวอย่างที่ดี คุณสมบัติเหล่านี้อาจรวมถึงสิ่งต่างๆเช่นเงาการสะท้อนการติดตามเรย์ฟิสิกส์และอื่น ๆ
นี่เป็นการเลียนแบบการทำงานของอุปกรณ์ฮาร์ดแวร์ที่มีคุณสมบัติครบถ้วนซึ่งไม่น่าจะมีอยู่เพื่อแสดงคุณสมบัติทั้งหมดของ API แต่เนื่องจากฮาร์ดแวร์ไม่มีอยู่จริงมันจึงทำงานบน CPU ของคุณแทน มันไม่มีประสิทธิภาพมากกว่าการมอบหมายให้การ์ดกราฟิก - ดังนั้นการใช้งาน CPU สูงของคุณ
ความอดทนทักษะทางเทคนิคและความอดทน
ประเด็นแรกคือการสาธิต DX นั้นเป็นเครื่องมือช่วยสอนเป็นหลักดังนั้นจึงทำได้เพื่อความชัดเจนไม่ใช่ความเร็วของการดำเนินการ
มันเป็นเรื่องที่ค่อนข้างใหญ่สำหรับการควบแน่น แต่การพัฒนาเกมนั้นเกี่ยวกับการทำความเข้าใจข้อมูลและเส้นทางการดำเนินการของคุณเป็นหลักในระดับที่เกือบจะเป็นพยาธิวิทยา
เกม 3 มิติที่ยอดเยี่ยมที่หลอกตาคุณ ตัวอย่างเช่นมีเทคนิคที่เรียกว่าการบดบังพื้นที่หน้าจอโดยรอบ (SSAO) ซึ่งจะให้ความรู้สึกสมจริงยิ่งขึ้นโดยการแรเงาส่วนต่าง ๆ ของฉากที่อยู่ใกล้กับพื้นผิวที่ไม่ต่อเนื่อง หากคุณดูที่มุมกำแพงคุณจะเห็นว่าผนังดูมืดกว่าศูนย์เล็กน้อยในกรณีส่วนใหญ่
เอฟเฟกต์เดียวกันนี้สามารถทำได้โดยใช้ radiosity ซึ่งมีพื้นฐานมาจากการจำลองที่แม่นยำ Radiosity จะคำนึงถึงเอฟเฟกต์เพิ่มเติมของแสงที่กระเด้งเป็นต้น แต่มันมีราคาแพงในการคำนวณ - เป็นเทคนิคการติดตามรังสี
นี่เป็นเพียงตัวอย่างเดียว มีอัลกอริธึมหลายร้อยสำหรับกราฟิกคอมพิวเตอร์แบบเรียลไทม์และมีพื้นฐานมาจากการประมาณที่ดี ตัวอย่างเช่นการจัดเรียงเชิงพื้นที่จะต้องเลือกอย่างระมัดระวังมากขึ้นอยู่กับความเร็วตำแหน่งทั่วไปของกล้องตลอดจนปริมาณการเปลี่ยนแปลงของรูปทรงเรขาคณิตของฉาก
'การปรับให้เหมาะสม' เหล่านี้มีขนาดใหญ่มาก - คุณสามารถใช้อัลกอริทึมได้อย่างมีประสิทธิภาพและทำให้มันรันเร็วขึ้น 10 เท่า แต่การเลือกอัลกอริทึมอัจฉริยะที่ให้ผลลัพธ์ที่คล้ายกัน ("การโกง") สามารถทำให้คุณเปลี่ยนจาก O (N ^ 4) เข้าสู่ระบบ (N))
การเพิ่มประสิทธิภาพการใช้งานจริงคือสิ่งที่ทำให้เกมมีประสิทธิภาพมากขึ้น แต่นั่นเป็นเพียงการเพิ่มประสิทธิภาพเชิงเส้นเท่านั้น
Eeeeek!
ฉันรู้ว่าคำถามนี้เก่า แต่ก็น่าตื่นเต้นที่ไม่มีใครพูดถึง VSync !!!
คุณเปรียบเทียบการใช้งาน CPU ของเกมที่ 60fps กับการใช้งาน CPU ของการสาธิต teapot ที่ 60fps
ไม่ชัดเจนหรือว่าทั้งสองทำงาน (มากหรือน้อย) ที่ 60fps อย่างแน่นอน นั่นนำไปสู่คำตอบ ...
แอพทั้งสองทำงานโดยเปิดใช้งาน vsync! ซึ่งหมายความว่า (โง่ลง) ที่เฟรมเรนเดอร์ถูกล็อคเป็น "ช่วงว่างแนวตั้ง" ของจอภาพของคุณ ฮาร์ดแวร์กราฟิก (และ / หรือไดรเวอร์) จะแสดงผลได้สูงสุดเท่านั้น 60fps อัตราการรีเฟรช 60fps = 60Hz (Hz = ต่อวินาที) ดังนั้นคุณอาจใช้ CRT ที่ค่อนข้างเก่ากะพริบหรือจอ LCD ทั่วไป บน CRT ที่ทำงานที่ 100Hz คุณอาจเห็นเฟรมหลักความเร็วสูงถึง 100Hz VSync ยังใช้ในวิธีที่คล้ายกับจอ LCD (โดยทั่วไปจะมีอัตราการรีเฟรช 60Hz)
ดังนั้นการสาธิตกาน้ำชาอาจมีประสิทธิภาพมากกว่าจริง ๆ ! หากใช้เวลา 30% ของเวลา CPU (เมื่อเทียบกับ 50% เวลา CPU สำหรับ GTA IV) ก็อาจใช้เวลา cpu น้อยกว่าในแต่ละเฟรมและรออีกต่อไปสำหรับช่วงเวลาว่างแนวตั้งถัดไป ในการเปรียบเทียบทั้งสองแอพคุณควรปิดการใช้งาน vsync และวัดอีกครั้ง (คุณจะวัดค่า fps ที่สูงขึ้นสำหรับทั้งสองแอพ)
บางครั้งมันก็โอเคที่จะปิดการใช้งาน vsync (เกมส่วนใหญ่มีตัวเลือกในการตั้งค่า) บางครั้งคุณจะเห็น "การฉีกขาดสิ่งประดิษฐ์" เมื่อปิดใช้งาน vsync
คุณสามารถหารายละเอียดของมันและทำไมมันถูกใช้ที่วิกิพีเดีย: http://en.wikipedia.org/wiki/Vsync
ในขณะที่คำตอบมากมายที่นี่ให้ข้อบ่งชี้ที่ยอดเยี่ยมว่าฉันจะตอบคำถามง่าย ๆว่าทำไม
บางทีตัวอย่างที่ดีที่สุด (หนึ่งในที่รู้จักกันดีที่สุด) เป็นซอฟต์แวร์ Id พวกเขารู้ได้เร็วมากในวันที่Commander Keen (ก่อน 3D) ที่มาพร้อมกับวิธีที่ฉลาดเพื่อให้ได้สิ่งที่1แม้ว่าจะอาศัยฮาร์ดแวร์ที่ทันสมัย (ในกรณีนี้คือการ์ดกราฟิก EGA!) การแข่งขันที่จะทำให้เกมของคุณโดดเด่น นี่เป็นความจริง แต่พวกเขาก็ตระหนักดีว่าแทนที่จะต้องมีเกมใหม่และเนื้อหาที่พวกเขาสามารถอนุญาตให้ใช้เทคโนโลยีจึงได้รับรายได้จากผู้อื่นในขณะที่สามารถพัฒนาเครื่องยนต์รุ่นต่อไปและกระโดดกบแข่งขันอีกครั้ง .
ความสามารถของโปรแกรมเมอร์เหล่านี้ (ควบคู่ไปกับความเข้าใจในธุรกิจ) คือสิ่งที่ทำให้พวกเขาร่ำรวย
ที่กล่าวว่าไม่จำเป็นต้องมีเงินที่กระตุ้นให้คนเช่นนี้ มันเป็นไปได้มากที่จะทำสำเร็จ เงินที่พวกเขาได้รับในวันแรก ๆ ก็หมายความว่าตอนนี้พวกเขามีเวลาอุทิศสิ่งที่พวกเขาชอบ และในขณะที่หลายคนมีความสนใจภายนอกเกือบทั้งหมดยังคงโปรแกรมและพยายามหาวิธีที่จะทำดีกว่าการทำซ้ำครั้งล่าสุด
กล่าวง่ายๆว่าบุคคลที่เขียนการสาธิตกาน้ำชาน่าจะมีปัญหาอย่างน้อยหนึ่งอย่างต่อไปนี้:
สุดท้ายอาจฟังดูรุนแรง2แต่เห็นได้ชัดว่ามีบางคนที่ดีกว่าคนอื่น ๆ บางครั้งเส้นโค้งเบลล์มีจุดจบที่รุนแรงและพวกเขามักจะถูกดึงดูดไปที่ปลายสุดที่สอดคล้องกันของสิ่งที่ทำด้วยทักษะนั้น
เป้าหมายที่น้อยกว่านั้นน่าจะเป็นเหตุผลหลัก เป้าหมายของการสาธิตกาน้ำชาคือการสาธิต แต่ไม่ได้เป็นตัวอย่างของโปรแกรมเมอร์ทักษะ 3 มันจะเป็นตัวอย่างของระบบปฏิบัติการ (ใหญ่) ขนาดเล็กในกรณีนี้การเรนเดอร์ DX
สำหรับผู้ที่กำลังดูการสาธิตมันจะไม่ทำให้เสียหน้ามันใช้ CPU มากกว่าวิธีที่กำหนดตราบใดที่มันดูดีพอ ไม่มีแรงจูงใจที่จะกำจัดขยะเมื่อไม่มีผู้รับผลประโยชน์ ในการเปรียบเทียบเกมจะชอบที่จะมีวงจรสำรองสำหรับ AI ที่ดีกว่าเสียงที่ดีกว่ารูปหลายเหลี่ยมมากขึ้นเอฟเฟกต์มากขึ้น
เพราะเหตุผลไม่กี่
แก้ไข: เพื่อให้ตัวเลขไม่กี่
2.8 Ghz Athlon-64 พร้อม NV-6800 GPU ผลลัพธ์ที่ได้คือ:
บางครั้งอาจมีฉากเกิดขึ้นมากกว่าที่ปรากฏ ตัวอย่างเช่นกาน้ำชาที่หมุนได้ซึ่งมีจุดยอดนับพันการแมปสภาพแวดล้อมการแมป bump และพิกเซลที่ซับซ้อนอื่น ๆ ทั้งหมดจะถูกแสดงผลพร้อมกันเพื่อประมวลผลจำนวนมากพร้อมกัน หลายครั้งที่การสาธิตกาน้ำชาเหล่านี้มีจุดประสงค์เพื่อแสดงให้เห็นถึงเทคนิคพิเศษบางอย่าง พวกเขาอาจไม่ได้ใช้ GPU ให้ดีที่สุดเสมอไปเมื่อประสิทธิภาพที่แท้จริงไม่ใช่เป้าหมาย
ในเกมคุณอาจเห็นเอฟเฟกต์ที่คล้ายกัน แต่โดยทั่วไปมักจะทำในลักษณะที่ถูกบุกรุกเพื่อพยายามเพิ่มอัตราเฟรมให้สูงสุด การเพิ่มประสิทธิภาพเหล่านี้ครอบคลุมทุกสิ่งที่คุณเห็นในเกม ปัญหาจะกลายเป็น "เราจะสร้างฉากที่งดงามและสมจริงที่สุดด้วยพลังประมวลผลน้อยที่สุดได้อย่างไร" มันเป็นสิ่งที่ทำให้โปรแกรมเมอร์เกมเป็นผู้เพิ่มประสิทธิภาพที่ดีที่สุด
จากคำตอบที่มีคุณสมบัติและดีทั้งหมดสิ่งที่สำคัญยังขาดหายไป: ตัวนับการใช้ CPU ของ Windows ไม่น่าเชื่อถือมาก ฉันเดาว่าการสาธิตกาน้ำชาง่ายๆนี้แค่เรียกฟังก์ชั่นการเรนเดอร์ในลูปที่ไม่ได้ใช้งานการบล็อกที่การแลกเปลี่ยนบัฟเฟอร์
ตอนนี้ตัวนับการใช้งาน CPU ของ Windows จะดูว่าใช้เวลา CPU เท่าใดในแต่ละกระบวนการ แต่ไม่ใช่เวลาที่ใช้ CPU นี้ ลองเพิ่ม
Sleep(0);
หลังจากกลับมาจากฟังก์ชั่นการแสดงผลและเปรียบเทียบ
นอกจากนี้ยังมีเทคนิคมากมายจากมุมมองทางศิลปะเพื่อประหยัดพลังงานการคำนวณ ในหลาย ๆ เกมโดยเฉพาะที่เก่ากว่าเงาจะถูกคำนวณล่วงหน้าและ "ถูกอบ" ลงในพื้นผิวของแผนที่ หลายครั้งที่ศิลปินพยายามใช้เครื่องบิน (สามเหลี่ยมสองรูป) เพื่อแสดงสิ่งต่าง ๆ เช่นต้นไม้และเทคนิคพิเศษเมื่อมันดูเหมือนกันมากที่สุด Fog ในเกมเป็นวิธีที่ง่ายในการหลีกเลี่ยงการเรนเดอร์วัตถุที่อยู่ไกลและบ่อยครั้งที่เกมจะมีความละเอียดหลายอย่างของทุกวัตถุสำหรับมุมมองไกลกลางและใกล้
แกนกลางของคำตอบใด ๆ ควรเป็นเช่นนี้ - การเปลี่ยนแปลงที่เครื่องยนต์ 3D ดำเนินการส่วนใหญ่จะระบุไว้ในการเพิ่มและการคูณ (พีชคณิตเชิงเส้น) (ไม่มีกิ่งก้านหรือกระโดด) การดำเนินงานของการวาดภาพเฟรมเดียวมักจะถูกระบุในหลาย ๆ งานของ add-mul ดังกล่าวสามารถทำได้พร้อมกัน แกน GPU เป็นส่วนเสริมที่ดีมากและมีแกนเสริมหลายสิบหรือร้อยตัว
ซีพียูยังคงทำสิ่งที่ง่ายเช่น AI และตรรกะของเกมอื่น ๆ
เกมพีซีขนาดใหญ่ที่ยอดเยี่ยมอย่าง GTA IV สามารถใช้ซีพียูของฉันได้ 50% และทำงานที่ 60fps ในขณะที่การสาธิต DX ของ Teapot @ 60fps ที่หมุนได้ใช้งานได้ถึง 30%
ในขณะที่ GTA มีแนวโน้มที่จะมีประสิทธิภาพมากกว่าการสาธิต DX แต่การวัดประสิทธิภาพของ CPU ด้วยวิธีนี้จะแตกหักเป็นหลัก ประสิทธิภาพอาจถูกกำหนดเช่นโดยปริมาณงานที่คุณทำต่อเวลาที่กำหนด ตัวอย่างง่ายๆ: วางไข่หนึ่งเธรดต่อ CPU แบบโลจิคัลและปล่อยให้วงวนไม่สิ้นสุดที่เรียบง่ายรันอยู่ คุณจะได้รับการใช้ CPU 100% แต่ไม่มีประสิทธิภาพเนื่องจากไม่มีงานที่มีประโยชน์
สิ่งนี้นำไปสู่คำตอบ: เกมจะมีประสิทธิภาพได้อย่างไร เมื่อการเขียนโปรแกรม "เกมที่ยอดเยี่ยมมาก" ความพยายามอย่างยิ่งใหญ่ได้ทุ่มเทเพื่อเพิ่มประสิทธิภาพของเกมในทุกด้าน สำหรับการสาธิต DX จุดนั้นไม่ได้ทำงานเร็วนัก แต่แสดงให้เห็นถึงแนวคิด
ฉันคิดว่าคุณควรพิจารณาถึงการใช้ GPUมากกว่า CPU ... ฉันพนันได้เลยว่าการ์ดกราฟิกมีความยุ่งมากใน GTA IV มากกว่าในตัวอย่าง Teapot (ควรใช้งานจริง)
บางทีคุณอาจใช้บางสิ่งเช่นจอภาพนี้เพื่อตรวจสอบว่า:
http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html
นอกจากนี้เฟรมเป็นสิ่งที่ต้องพิจารณาบางทีตัวอย่างกาน้ำชาทำงานด้วยความเร็วสูงสุด (อาจจะ 1000fps) และเกมส่วนใหญ่จะ จำกัด ความถี่ในการรีเฟรชของจอภาพ (ประมาณ 60fps)
ดูคำตอบกับ vsync; นั่นคือเหตุผลที่พวกเขากำลังทำงานที่อัตราเฟรมเดียวกัน
ประการที่สอง CPU พลาดการเป็นผู้นำในเกม คำอธิบายที่ง่ายคือวงเกมหลักเป็นเพียงวงวนไม่สิ้นสุด:
while(1) {
update();
render();
}
แม้ว่าเกมของคุณ (หรือในกรณีนี้กาน้ำชา) ไม่ได้ทำอะไรมากมายคุณยังคงกินซีพียูในวงของคุณ
ซีพียู 50% ใน GTA นั้น "มีประสิทธิภาพมากขึ้น" จากนั้นก็เป็น 30% ในการสาธิตเนื่องจากมีโอกาสมากที่มันจะไม่ทำอะไรมากเลย แต่ GTA กำลังอัปเดตรายละเอียดมากมาย แม้การเพิ่ม "Sleep (10)" ลงในการสาธิตอาจทำให้ซีพียูลดลงทีละตัน
ดูการใช้งาน GPU สุดท้าย การสาธิตน่าจะใช้ <1% ในการ์ดแสดงผลที่ทันสมัยในขณะที่ GTA อาจจะเป็นส่วนใหญ่ในระหว่างการเล่นเกม
กล่าวโดยสรุปมาตรฐานและการวัดของคุณไม่แม่นยำ
การสาธิต DX teapot ไม่ได้ใช้งาน CPU 30% ที่มีประโยชน์ มันกำลังยุ่งอยู่เพราะมันไม่มีอะไรให้ทำอีกแล้ว
จากสิ่งที่ฉันรู้เกี่ยวกับซีรีส์ Unreal บางการประชุมก็แตกเหมือน encapsulation โค้ดจะถูกคอมไพล์ไปยัง bytecode หรือรหัสลงในเครื่องโดยตรงขึ้นอยู่กับเกม นอกจากนี้วัตถุจะแสดงผลและบรรจุภายใต้รูปแบบของตาข่ายและสิ่งต่าง ๆ เช่นพื้นผิวแสงและเงาถูกคำนวณล่วงหน้าในขณะที่ภาพเคลื่อนไหว 3 มิติล้วนต้องใช้สิ่งนี้ในเวลาจริง เมื่อเกมทำงานจริง ๆ แล้วยังมีการปรับแต่งบางอย่างเช่นการแสดงผลเฉพาะส่วนที่มองเห็นของวัตถุและแสดงรายละเอียดพื้นผิวเฉพาะเมื่อปิด ในที่สุดอาจเป็นไปได้ว่าวิดีโอเกมได้รับการออกแบบมาเพื่อให้ได้ประโยชน์สูงสุดจากแพลตฟอร์มในเวลาที่กำหนด (เช่น: Intelx86 MMX / SSE, DirectX, ... )
ฉันคิดว่ามีส่วนสำคัญของคำตอบที่หายไปที่นี่ คำตอบส่วนใหญ่บอกให้คุณ "รู้ข้อมูลของคุณ" ความจริงก็คือคุณจะต้องรู้แบบของคุณด้วยวิธีเดียวกันและมีความสำคัญในระดับเดียวกัน
แต่เหนือสิ่งอื่นใดด้วยคอมพิวเตอร์ที่ทันสมัยในปัจจุบันคุณจะไม่สามารถเล่นวิดีโอ 1080p ที่แท้จริงที่ >> 30ftp (ภาพ 1080p เดียวใน 64 บิตจะใช้เวลา 15 000 Ko / 14.9 MB) เหตุผลที่เป็นเพราะการสุ่มตัวอย่าง / ความแม่นยำ วิดีโอเกมจะไม่ใช้ความแม่นยำสองเท่า (64 บิต) สำหรับพิกเซลภาพข้อมูล ฯลฯ ... แต่ใช้ความแม่นยำที่กำหนดเองต่ำกว่า (~ 4-8 บิต) และบางครั้งความแม่นยำน้อยลงได้รับการลดหย่อนด้วยเทคนิคการแก้ไขเพื่อให้การคำนวณที่สมเหตุสมผล เวลา.
มีเทคนิคอื่น ๆ เช่นการตัดข้อมูล (ทั้งกับมาตรฐาน OpenGL และการใช้งานซอฟต์แวร์), การบีบอัดข้อมูลเป็นต้นโปรดจำไว้ว่า GPU ปัจจุบันสามารถเร็วกว่าซีพียูปัจจุบันมากกว่า 300 เท่าในแง่ของความสามารถของฮาร์ดแวร์ อย่างไรก็ตามโปรแกรมเมอร์ที่ดีอาจได้รับปัจจัย 10-20x เว้นแต่ว่าปัญหาของคุณจะได้รับการปรับปรุงอย่างเต็มที่และขนานได้อย่างสมบูรณ์
จากประสบการณ์ฉันสามารถบอกคุณได้ว่าการปรับให้เหมาะสมนั้นเหมือนกับเส้นโค้งเลขชี้กำลัง เพื่อให้ได้ประสิทธิภาพสูงสุดเวลาที่ใช้อาจสำคัญอย่างไม่น่าเชื่อ
ดังนั้นเพื่อกลับไปที่กาน้ำชาคุณควรดูว่ารูปทรงเรขาคณิตนั้นถูกนำมาแสดงตัวอย่างอย่างไรและด้วยความแม่นยำใดที่ Vs เห็นใน GTA 5 ในรูปแบบของเรขาคณิต / พื้นผิวและที่สำคัญที่สุดรายละเอียด (ความแม่นยำการสุ่มตัวอย่างและอื่น ๆ )