เกม 3D มีประสิทธิภาพอย่างไร? [ปิด]


188

มีบางอย่างที่ฉันไม่เคยเข้าใจ เกมพีซีขนาดใหญ่ที่ยอดเยี่ยมอย่าง GTA IV สามารถใช้ซีพียูของฉันได้ 50% และทำงานที่ 60fps ในขณะที่การสาธิต DX ของ Teapot @ 60fps ที่หมุนได้ใช้งานได้ถึง 30%


124
ฉันไม่เห็นว่ามีอะไรผิดปกติกับคำถามนี้ - เป็นเรื่องธรรมดาอย่างยิ่งที่จะอยากรู้ว่านักพัฒนาคนอื่น ๆ ทำบางสิ่งให้สำเร็จได้อย่างไร เราควรจะกระตุ้นให้เกิดความอยากรู้อยากเห็นแบบนี้ไม่ลงโทษด้วยคะแนนปิด
John Feminella

2
@ user146780: ใครถามคำถาม ... โปรแกรมเมอร์ที่ดีที่สุดที่ฉันเคยพบมาทำงานใน CGI ปรมาจารย์จาก SGI ผู้ที่ทำงานเกี่ยวกับการปรับเทียบ Adobe Photoshop และอื่น ๆ ผู้คนที่นี่ไม่ทราบว่ามันซับซ้อนแค่ไหนในการเขียนเกมที่ทันสมัย หากคุณต้องการประสบการณ์ที่ต่ำต้อยดูสิ่งที่ชาวเยอรมันจาก Cryotech ทำกับเครื่องยนต์ Crysis มีวิดีโอใน Youtube คุณก็จะไม่เชื่อ มันไม่ได้เป็นเพียงแค่เกี่ยวกับ "ใช้แปด" โดยทั่วไปโปรแกรมเมอร์เหล่านี้มีทักษะมากกว่าโปรแกรมเมอร์ทั่วไปมาก และคุณสามารถเดิมพันได้ว่าตัวเข้ารหัส GT4 นั้นดีมาก
ไวยากรณ์ T3rr0r

2
คุณได้ gta4 ทำงานที่ 60fps! GW! gta4 เป็น POS ที่ทำงานได้ค่อนข้างแย่ฉันเคยได้ยิน Force unleashed ทำเช่นกัน ฉันจะบอกว่า Euphoria เป็นผู้กระทำผิด ความจริงแล้ว "การใช้งาน CPU" เป็นวิธีที่ไม่ดีในการเปรียบเทียบเพียงแค่ถอดเฟรมเรทและดูว่าเฟรมใดทำงานเร็วที่สุดนั่นคือวิธีที่เหมาะสมในการทำ นอกจากนี้โปรดจำไว้ว่า "เกมที่ซับซ้อน" นี้ในขณะที่มันอาจแสดงเนื้อหามากมายมีเพียงหน้าจอที่มีคุณค่าของสิ่งต่าง ๆ และหากมีการแสดงในลำดับที่ถูกต้องคุณอาจจบลงด้วยจำนวนพิกเซลใกล้เคียงกับงานของคุณ การสาธิตแบบ "เรียบง่าย" และการทำงานของพิกเซลเป็นสิ่งที่ฆ่าได้จริง
ด้าน

8
คุณต้องมีผู้สร้างโปรไฟล์ที่แสดงจำนวน GPU (หน่วยประมวลผลกราฟิก) ที่ใช้ ฉันเดิมพัน GTA IV แสดงให้คุณเห็น ~ 99% และการสาธิต 3%
0scar

จากประสบการณ์ผู้เขียนโปรแกรมเกมประมาณ 10% ที่ฉันเคยทำงานด้วยนั้นยอดเยี่ยมส่วนที่เหลือถือว่าดีที่สุด บางคนไร้ความสามารถอย่างเต็มที่
Skizz

คำตอบ:


69

โดยทั่วไปนั้นเป็นเพราะ

  1. เกมกำลังดีที่สุดเกี่ยวกับสิ่งที่พวกเขาต้องการในการแสดงและ
  2. พวกเขาใช้ประโยชน์พิเศษจากฮาร์ดแวร์ของคุณ

ตัวอย่างเช่นการปรับให้ง่ายอย่างหนึ่งที่คุณสามารถทำได้นั้นเกี่ยวข้องกับการไม่พยายามวาดสิ่งที่มองเห็น พิจารณาฉากที่ซับซ้อนเช่น cityscape จากGrand Theft Auto IV ตัวเรนเดอร์ไม่สามารถสร้างสิ่งปลูกสร้างและโครงสร้างทั้งหมด แต่มันเป็นการแสดงผลเฉพาะสิ่งที่กล้องมองเห็น หากคุณสามารถบินไปรอบ ๆ ด้านหลังของอาคารเดียวกันหันหน้าไปทางกล้องเดิมคุณจะเห็นโครงสร้างเปลือกครึ่งโหลที่สร้างขึ้น ทุกจุดที่กล้องมองไม่เห็นจะไม่ถูกแสดงผลเนื่องจากคุณไม่สามารถมองเห็นได้ไม่จำเป็นต้องพยายามแสดงให้คุณเห็น

นอกจากนี้ยังมีคำแนะนำที่ได้รับการปรับให้เหมาะสมและเทคนิคพิเศษเมื่อคุณพัฒนากับชุดฮาร์ดแวร์เฉพาะ

ส่วนอื่น ๆ ของคำถามของคุณคือเหตุผลที่เดโมใช้ CPU มาก:

... ในขณะที่การสาธิต DX ของ Teapot @ 60fps ที่หมุนได้ใช้งานได้ถึง 30%?

เป็นเรื่องปกติสำหรับการสาธิต API กราฟิก (เช่นdxdemo) เพื่อย้อนกลับไปยังสิ่งที่เรียกว่าซอฟต์แวร์ตัวแสดงผลเมื่อฮาร์ดแวร์ของคุณไม่รองรับคุณสมบัติทั้งหมดที่จำเป็นในการแสดงตัวอย่างที่ดี คุณสมบัติเหล่านี้อาจรวมถึงสิ่งต่างๆเช่นเงาการสะท้อนการติดตามเรย์ฟิสิกส์และอื่น ๆ

นี่เป็นการเลียนแบบการทำงานของอุปกรณ์ฮาร์ดแวร์ที่มีคุณสมบัติครบถ้วนซึ่งไม่น่าจะมีอยู่เพื่อแสดงคุณสมบัติทั้งหมดของ API แต่เนื่องจากฮาร์ดแวร์ไม่มีอยู่จริงมันจึงทำงานบน CPU ของคุณแทน มันไม่มีประสิทธิภาพมากกว่าการมอบหมายให้การ์ดกราฟิก - ดังนั้นการใช้งาน CPU สูงของคุณ


3
การสาธิต DX ใช้ฮาร์ดแวร์ของคุณเช่นกัน ดังนั้น 'พิเศษ' คืออะไร
tur1ng

3
แต่การสาธิตไม่น่าจะเหมาะสมที่สุด
µBio

2
@ tur1ng สาธิตกาน้ำชา, ตัวอย่างเช่นอาจจะมีการเปิดใช้งานการสะท้อน , เงาและผลกระทบอื่น ๆ
Nick Dandoulakis

2
กาน้ำชาอาจมีรูปหลายเหลี่ยมมากกว่าฉาก GTA4 ความจริงก็คือคอขวดในปัจจุบันในการแสดงผลกราฟิกเป็นผลกระทบพื้นผิวเช่นเทคนิคการทำแผนที่การทำแผนที่การชนเพื่อเพิ่มรายละเอียดและผลการโพสต์การแสดงผลอื่น ๆ
Klaim

5
พื้นผิว - กาน้ำชานั้นถูกสร้างขึ้นจากสามเหลี่ยมแต่ละรูปแบบจำนวนมากซึ่งทั้งหมดนั้นมีบรรทัดฐานและการตอบสนองต่อแสง สิ่งที่ดูเหมือนโลก 3 มิติที่ซับซ้อนอย่างบ้าคลั่งในเกมนั้นมักจะเป็นบล็อกขนาดใหญ่ที่ค่อนข้างเรียบง่ายปกคลุมด้วยภาพที่มีรายละเอียด จำนวนมากของ '3d' เป็นเงาที่ชาญฉลาดและเอฟเฟกต์มุมมองทางศิลปะในรูปแบบ 2d ที่วาดบนรูปร่าง 3 มิติ
Martin Beckett

96

ความอดทนทักษะทางเทคนิคและความอดทน

ประเด็นแรกคือการสาธิต DX นั้นเป็นเครื่องมือช่วยสอนเป็นหลักดังนั้นจึงทำได้เพื่อความชัดเจนไม่ใช่ความเร็วของการดำเนินการ

มันเป็นเรื่องที่ค่อนข้างใหญ่สำหรับการควบแน่น แต่การพัฒนาเกมนั้นเกี่ยวกับการทำความเข้าใจข้อมูลและเส้นทางการดำเนินการของคุณเป็นหลักในระดับที่เกือบจะเป็นพยาธิวิทยา

  1. รหัสของคุณได้รับการออกแบบโดยมีสองสิ่ง ได้แก่ ข้อมูลและฮาร์ดแวร์เป้าหมายของคุณ
  2. รหัสที่เร็วที่สุดคือรหัสที่ไม่เคยถูกเรียกใช้ - เรียงลำดับข้อมูลของคุณเป็นชุดและดำเนินการกับข้อมูลที่คุณต้องการเท่านั้น
  3. วิธีการจัดเก็บข้อมูลของคุณเป็นกุญแจสำคัญ - มีจุดมุ่งหมายเพื่อการเข้าถึงที่ต่อเนื่องซึ่งจะช่วยให้คุณสามารถประมวลผลเป็นชุดด้วยความเร็วสูง
  4. Parellise ทุกสิ่งที่คุณสามารถทำได้
  5. ซีพียูรุ่นใหม่นั้นเร็วแรมสมัยใหม่นั้นช้ามาก Cache คิดถึงเป็นอันตรายถึงตาย
  6. ผลักดันให้ GPU เท่าที่คุณทำได้ - มันมีหน่วยความจำในตัวที่รวดเร็วดังนั้นจึงสามารถลุกโชนผ่านข้อมูลได้ แต่คุณต้องช่วยมันด้วยการจัดระเบียบข้อมูลของคุณอย่างถูกต้อง
  7. หลีกเลี่ยงการทำสวิตช์เรนเดอร์จำนวนมาก (รวมชุดข้อมูลจุดสุดยอดที่คล้ายกันอีกครั้ง) เนื่องจากจะทำให้ GPU หยุดทำงาน
  8. เลื่อนพื้นผิวของคุณและให้แน่ใจว่าพวกเขาเป็นพลังของสอง - นี้ช่วยเพิ่มประสิทธิภาพแคชพื้นผิวใน GPU
  9. ใช้ระดับรายละเอียดมากที่สุดเท่าที่จะทำได้ - โมเดล 3D รุ่นต่ำ / กลาง / สูงและสลับตามระยะห่างจากตัวเล่นกล้อง - ไม่มีจุดแสดงภาพความละเอียดสูงหากมีเพียง 5 พิกเซลบนหน้าจอ

39

เกม 3 มิติที่ยอดเยี่ยมที่หลอกตาคุณ ตัวอย่างเช่นมีเทคนิคที่เรียกว่าการบดบังพื้นที่หน้าจอโดยรอบ (SSAO) ซึ่งจะให้ความรู้สึกสมจริงยิ่งขึ้นโดยการแรเงาส่วนต่าง ๆ ของฉากที่อยู่ใกล้กับพื้นผิวที่ไม่ต่อเนื่อง หากคุณดูที่มุมกำแพงคุณจะเห็นว่าผนังดูมืดกว่าศูนย์เล็กน้อยในกรณีส่วนใหญ่

เอฟเฟกต์เดียวกันนี้สามารถทำได้โดยใช้ radiosity ซึ่งมีพื้นฐานมาจากการจำลองที่แม่นยำ Radiosity จะคำนึงถึงเอฟเฟกต์เพิ่มเติมของแสงที่กระเด้งเป็นต้น แต่มันมีราคาแพงในการคำนวณ - เป็นเทคนิคการติดตามรังสี

นี่เป็นเพียงตัวอย่างเดียว มีอัลกอริธึมหลายร้อยสำหรับกราฟิกคอมพิวเตอร์แบบเรียลไทม์และมีพื้นฐานมาจากการประมาณที่ดี ตัวอย่างเช่นการจัดเรียงเชิงพื้นที่จะต้องเลือกอย่างระมัดระวังมากขึ้นอยู่กับความเร็วตำแหน่งทั่วไปของกล้องตลอดจนปริมาณการเปลี่ยนแปลงของรูปทรงเรขาคณิตของฉาก

'การปรับให้เหมาะสม' เหล่านี้มีขนาดใหญ่มาก - คุณสามารถใช้อัลกอริทึมได้อย่างมีประสิทธิภาพและทำให้มันรันเร็วขึ้น 10 เท่า แต่การเลือกอัลกอริทึมอัจฉริยะที่ให้ผลลัพธ์ที่คล้ายกัน ("การโกง") สามารถทำให้คุณเปลี่ยนจาก O (N ^ 4) เข้าสู่ระบบ (N))

การเพิ่มประสิทธิภาพการใช้งานจริงคือสิ่งที่ทำให้เกมมีประสิทธิภาพมากขึ้น แต่นั่นเป็นเพียงการเพิ่มประสิทธิภาพเชิงเส้นเท่านั้น


30

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


ฉันเห็นด้วยเพื่อให้การเปรียบเทียบดีขึ้นคุณควรปิดการใช้งาน vsync อย่างไรก็ตามรากของปัญหายังคงอยู่ 30% สำหรับการใช้งาน teapot และ 50% การใช้ cpu สำหรับเกมนั้นแตกต่างกันเล็กน้อยกว่าปกติ แต่ฉันจำได้ในช่วงแรก ๆ ที่การทำแผนที่สิ่งแวดล้อมเริ่มเป็นที่นิยมและการสาธิต nVidia ที่ยอดเยี่ยมในเวลานั้นคือกาน้ำชาที่จับคู่กับสภาพแวดล้อมหมุนรอบตัว ตัวอย่างเหล่านั้นมักจะไม่ถึง 60 fps ย้อนกลับไปในวันที่ ฉันเดาว่าประเด็นของฉันคือการสาธิตกาน้ำชาเหล่านี้มักจะผลักดันขอบเขตของเอฟเฟกต์ภาพใหม่
Steve Wortham

25

ในขณะที่คำตอบมากมายที่นี่ให้ข้อบ่งชี้ที่ยอดเยี่ยมว่าฉันจะตอบคำถามง่าย ๆว่าทำไม

บางทีตัวอย่างที่ดีที่สุด (หนึ่งในที่รู้จักกันดีที่สุด) เป็นซอฟต์แวร์ Id พวกเขารู้ได้เร็วมากในวันที่Commander Keen (ก่อน 3D) ที่มาพร้อมกับวิธีที่ฉลาดเพื่อให้ได้สิ่งที่1แม้ว่าจะอาศัยฮาร์ดแวร์ที่ทันสมัย ​​(ในกรณีนี้คือการ์ดกราฟิก EGA!) การแข่งขันที่จะทำให้เกมของคุณโดดเด่น นี่เป็นความจริง แต่พวกเขาก็ตระหนักดีว่าแทนที่จะต้องมีเกมใหม่และเนื้อหาที่พวกเขาสามารถอนุญาตให้ใช้เทคโนโลยีจึงได้รับรายได้จากผู้อื่นในขณะที่สามารถพัฒนาเครื่องยนต์รุ่นต่อไปและกระโดดกบแข่งขันอีกครั้ง .

ความสามารถของโปรแกรมเมอร์เหล่านี้ (ควบคู่ไปกับความเข้าใจในธุรกิจ) คือสิ่งที่ทำให้พวกเขาร่ำรวย

ที่กล่าวว่าไม่จำเป็นต้องมีเงินที่กระตุ้นให้คนเช่นนี้ มันเป็นไปได้มากที่จะทำสำเร็จ เงินที่พวกเขาได้รับในวันแรก ๆ ก็หมายความว่าตอนนี้พวกเขามีเวลาอุทิศสิ่งที่พวกเขาชอบ และในขณะที่หลายคนมีความสนใจภายนอกเกือบทั้งหมดยังคงโปรแกรมและพยายามหาวิธีที่จะทำดีกว่าการทำซ้ำครั้งล่าสุด

กล่าวง่ายๆว่าบุคคลที่เขียนการสาธิตกาน้ำชาน่าจะมีปัญหาอย่างน้อยหนึ่งอย่างต่อไปนี้:

  • เวลาน้อย
  • ทรัพยากรน้อยลง
  • แรงจูงใจรางวัลน้อยลง
  • การแข่งขันภายในและภายนอกน้อยลง
  • เป้าหมายที่น้อยลง
  • ความสามารถน้อยลง

สุดท้ายอาจฟังดูรุนแรง2แต่เห็นได้ชัดว่ามีบางคนที่ดีกว่าคนอื่น ๆ บางครั้งเส้นโค้งเบลล์มีจุดจบที่รุนแรงและพวกเขามักจะถูกดึงดูดไปที่ปลายสุดที่สอดคล้องกันของสิ่งที่ทำด้วยทักษะนั้น

เป้าหมายที่น้อยกว่านั้นน่าจะเป็นเหตุผลหลัก เป้าหมายของการสาธิตกาน้ำชาคือการสาธิต แต่ไม่ได้เป็นตัวอย่างของโปรแกรมเมอร์ทักษะ 3 มันจะเป็นตัวอย่างของระบบปฏิบัติการ (ใหญ่) ขนาดเล็กในกรณีนี้การเรนเดอร์ DX

สำหรับผู้ที่กำลังดูการสาธิตมันจะไม่ทำให้เสียหน้ามันใช้ CPU มากกว่าวิธีที่กำหนดตราบใดที่มันดูดีพอ ไม่มีแรงจูงใจที่จะกำจัดขยะเมื่อไม่มีผู้รับผลประโยชน์ ในการเปรียบเทียบเกมจะชอบที่จะมีวงจรสำรองสำหรับ AI ที่ดีกว่าเสียงที่ดีกว่ารูปหลายเหลี่ยมมากขึ้นเอฟเฟกต์มากขึ้น


  1. ในกรณีนั้นการเลื่อนอย่างราบรื่นบนฮาร์ดแวร์พีซี
  2. มีแนวโน้มมากกว่าฉันดังนั้นเราจึงชัดเจนเกี่ยวกับเรื่องนั้น
  3. พูดอย่างเคร่งครัดก็จะได้รับการสาธิตให้ผู้จัดการของเขา / เธอเช่นกัน แต่ไดรฟ์ที่นี่อีกครั้งจะเป็นเวลาและ / หรือคุณภาพของภาพ

17

เพราะเหตุผลไม่กี่

  • เอ็นจิ้นของเกม 3 มิติได้รับการปรับให้เหมาะสมที่สุด
  • งานส่วนใหญ่ทำโดยอะแดปเตอร์กราฟิกของคุณ
  • 50% หืมให้ฉันเดาว่าคุณมีดูอัลคอร์และมีเพียงหนึ่งคอร์เท่านั้นที่ใช้ ;-)

แก้ไข: เพื่อให้ตัวเลขไม่กี่

2.8 Ghz Athlon-64 พร้อม NV-6800 GPU ผลลัพธ์ที่ได้คือ:

  • CPU: 72.78 Mflops
  • GPU: 2440.32 Mflops

@stacker: คุณหมายถึงว่าการคำนวณทั้งหมดที่เกิดขึ้นในเกม 3 มิติที่ไม่ได้ทำโดย GPU นั้นจะเป็นแบบเธรดขาวดำและอาจจะเติมเต็ม 100% ของ CPU หรือไม่ หมายความว่าเกม perfs จะถูกผูกไว้กับคอร์ที่ไม่ใช่ GPU หนึ่งแกนหรือไม่ ฉันพบว่ามันยากที่จะเชื่อ
ไวยากรณ์ T3rr0r

4
มันไม่ได้หมายความว่าโปรแกรมนั้นเป็นแบบเธรดเดี่ยว - มันบอกเป็นนัยว่าอย่างน้อยหนึ่งเธรดกำลังจะเร็วเท่าที่จะทำได้ ข้อใดที่สมเหตุสมผลเพราะเหตุใดคุณต้องการให้มันช้าลง ในทางกลับกันเกมส่วนใหญ่เกือบทั้งหมดเป็นแบบเธรดเดียว เป็นการยากมากที่จะเขียนการจำลองที่ซับซ้อนอย่างมีประสิทธิภาพเมื่อมัลติเธรดเนื่องจากสถานการณ์โดยทั่วไปในระบบที่เกิดขึ้นพร้อมกัน / กระจายการยอมรับเวลาแฝงที่เพิ่มขึ้นอีกเล็กน้อยเพื่อซื้อปริมาณงานที่มากขึ้นนั้นไม่ดีสำหรับเกมที่ควรตอบสนอง
Kylotan

8

บางครั้งอาจมีฉากเกิดขึ้นมากกว่าที่ปรากฏ ตัวอย่างเช่นกาน้ำชาที่หมุนได้ซึ่งมีจุดยอดนับพันการแมปสภาพแวดล้อมการแมป bump และพิกเซลที่ซับซ้อนอื่น ๆ ทั้งหมดจะถูกแสดงผลพร้อมกันเพื่อประมวลผลจำนวนมากพร้อมกัน หลายครั้งที่การสาธิตกาน้ำชาเหล่านี้มีจุดประสงค์เพื่อแสดงให้เห็นถึงเทคนิคพิเศษบางอย่าง พวกเขาอาจไม่ได้ใช้ GPU ให้ดีที่สุดเสมอไปเมื่อประสิทธิภาพที่แท้จริงไม่ใช่เป้าหมาย

ในเกมคุณอาจเห็นเอฟเฟกต์ที่คล้ายกัน แต่โดยทั่วไปมักจะทำในลักษณะที่ถูกบุกรุกเพื่อพยายามเพิ่มอัตราเฟรมให้สูงสุด การเพิ่มประสิทธิภาพเหล่านี้ครอบคลุมทุกสิ่งที่คุณเห็นในเกม ปัญหาจะกลายเป็น "เราจะสร้างฉากที่งดงามและสมจริงที่สุดด้วยพลังประมวลผลน้อยที่สุดได้อย่างไร" มันเป็นสิ่งที่ทำให้โปรแกรมเมอร์เกมเป็นผู้เพิ่มประสิทธิภาพที่ดีที่สุด


4
  1. การจัดการฉาก kd-trees, การคัดแบบ frustrum, bsps, กล่อง bounding heirarchical, ชุดการมองเห็นบางส่วน
  2. ล็อด การสลับรุ่นรายละเอียดที่ต่ำกว่าเพื่อทดแทนวัตถุที่อยู่ไกล
  3. จอมปลอม เหมือน LOD แต่ไม่ใช่วัตถุเพียงแค่รูปภาพหรือ 'บิลบอร์ด'
  4. SIMD
  5. การจัดการหน่วยความจำที่กำหนดเอง การจัดเรียงหน่วยความจำการกระจายตัวน้อย
  6. โครงสร้างข้อมูลที่กำหนดเอง (เช่นไม่มี STL, การสร้างเทมเพลตให้น้อยที่สุด)
  7. ประกอบในสถานที่ส่วนใหญ่สำหรับ SIMD

4

จากคำตอบที่มีคุณสมบัติและดีทั้งหมดสิ่งที่สำคัญยังขาดหายไป: ตัวนับการใช้ CPU ของ Windows ไม่น่าเชื่อถือมาก ฉันเดาว่าการสาธิตกาน้ำชาง่ายๆนี้แค่เรียกฟังก์ชั่นการเรนเดอร์ในลูปที่ไม่ได้ใช้งานการบล็อกที่การแลกเปลี่ยนบัฟเฟอร์

ตอนนี้ตัวนับการใช้งาน CPU ของ Windows จะดูว่าใช้เวลา CPU เท่าใดในแต่ละกระบวนการ แต่ไม่ใช่เวลาที่ใช้ CPU นี้ ลองเพิ่ม

Sleep(0);

หลังจากกลับมาจากฟังก์ชั่นการแสดงผลและเปรียบเทียบ


ฉันมีการสาธิตกาน้ำชา DX ซึ่งใช้ CPU ถึง 25% ปรากฎว่าเป็นเพราะฉันอยู่บนคอร์สี่แกนและเพื่อล็อคลูปเกมที่ 60 fps ฉันมี "เรายังมี" วนรอบที่ตรวจสอบเวลาอย่างต่อเนื่อง ฉันเปลี่ยนเป็นโหมดสลีป (timeToNextFrame) และการใช้ซีพียูลดลงเหลือ 0
Jonathan Pierce

3

นอกจากนี้ยังมีเทคนิคมากมายจากมุมมองทางศิลปะเพื่อประหยัดพลังงานการคำนวณ ในหลาย ๆ เกมโดยเฉพาะที่เก่ากว่าเงาจะถูกคำนวณล่วงหน้าและ "ถูกอบ" ลงในพื้นผิวของแผนที่ หลายครั้งที่ศิลปินพยายามใช้เครื่องบิน (สามเหลี่ยมสองรูป) เพื่อแสดงสิ่งต่าง ๆ เช่นต้นไม้และเทคนิคพิเศษเมื่อมันดูเหมือนกันมากที่สุด Fog ในเกมเป็นวิธีที่ง่ายในการหลีกเลี่ยงการเรนเดอร์วัตถุที่อยู่ไกลและบ่อยครั้งที่เกมจะมีความละเอียดหลายอย่างของทุกวัตถุสำหรับมุมมองไกลกลางและใกล้


1

แกนกลางของคำตอบใด ๆ ควรเป็นเช่นนี้ - การเปลี่ยนแปลงที่เครื่องยนต์ 3D ดำเนินการส่วนใหญ่จะระบุไว้ในการเพิ่มและการคูณ (พีชคณิตเชิงเส้น) (ไม่มีกิ่งก้านหรือกระโดด) การดำเนินงานของการวาดภาพเฟรมเดียวมักจะถูกระบุในหลาย ๆ งานของ add-mul ดังกล่าวสามารถทำได้พร้อมกัน แกน GPU เป็นส่วนเสริมที่ดีมากและมีแกนเสริมหลายสิบหรือร้อยตัว

ซีพียูยังคงทำสิ่งที่ง่ายเช่น AI และตรรกะของเกมอื่น ๆ


1

เกมพีซีขนาดใหญ่ที่ยอดเยี่ยมอย่าง GTA IV สามารถใช้ซีพียูของฉันได้ 50% และทำงานที่ 60fps ในขณะที่การสาธิต DX ของ Teapot @ 60fps ที่หมุนได้ใช้งานได้ถึง 30%

ในขณะที่ GTA มีแนวโน้มที่จะมีประสิทธิภาพมากกว่าการสาธิต DX แต่การวัดประสิทธิภาพของ CPU ด้วยวิธีนี้จะแตกหักเป็นหลัก ประสิทธิภาพอาจถูกกำหนดเช่นโดยปริมาณงานที่คุณทำต่อเวลาที่กำหนด ตัวอย่างง่ายๆ: วางไข่หนึ่งเธรดต่อ CPU แบบโลจิคัลและปล่อยให้วงวนไม่สิ้นสุดที่เรียบง่ายรันอยู่ คุณจะได้รับการใช้ CPU 100% แต่ไม่มีประสิทธิภาพเนื่องจากไม่มีงานที่มีประโยชน์

สิ่งนี้นำไปสู่คำตอบ: เกมจะมีประสิทธิภาพได้อย่างไร เมื่อการเขียนโปรแกรม "เกมที่ยอดเยี่ยมมาก" ความพยายามอย่างยิ่งใหญ่ได้ทุ่มเทเพื่อเพิ่มประสิทธิภาพของเกมในทุกด้าน สำหรับการสาธิต DX จุดนั้นไม่ได้ทำงานเร็วนัก แต่แสดงให้เห็นถึงแนวคิด


1

ฉันคิดว่าคุณควรพิจารณาถึงการใช้ GPUมากกว่า CPU ... ฉันพนันได้เลยว่าการ์ดกราฟิกมีความยุ่งมากใน GTA IV มากกว่าในตัวอย่าง Teapot (ควรใช้งานจริง)

บางทีคุณอาจใช้บางสิ่งเช่นจอภาพนี้เพื่อตรวจสอบว่า:

http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html

นอกจากนี้เฟรมเป็นสิ่งที่ต้องพิจารณาบางทีตัวอย่างกาน้ำชาทำงานด้วยความเร็วสูงสุด (อาจจะ 1000fps) และเกมส่วนใหญ่จะ จำกัด ความถี่ในการรีเฟรชของจอภาพ (ประมาณ 60fps)


1

ดูคำตอบกับ vsync; นั่นคือเหตุผลที่พวกเขากำลังทำงานที่อัตราเฟรมเดียวกัน

ประการที่สอง CPU พลาดการเป็นผู้นำในเกม คำอธิบายที่ง่ายคือวงเกมหลักเป็นเพียงวงวนไม่สิ้นสุด:

while(1) { 
  update();
  render();
}

แม้ว่าเกมของคุณ (หรือในกรณีนี้กาน้ำชา) ไม่ได้ทำอะไรมากมายคุณยังคงกินซีพียูในวงของคุณ

ซีพียู 50% ใน GTA นั้น "มีประสิทธิภาพมากขึ้น" จากนั้นก็เป็น 30% ในการสาธิตเนื่องจากมีโอกาสมากที่มันจะไม่ทำอะไรมากเลย แต่ GTA กำลังอัปเดตรายละเอียดมากมาย แม้การเพิ่ม "Sleep (10)" ลงในการสาธิตอาจทำให้ซีพียูลดลงทีละตัน

ดูการใช้งาน GPU สุดท้าย การสาธิตน่าจะใช้ <1% ในการ์ดแสดงผลที่ทันสมัยในขณะที่ GTA อาจจะเป็นส่วนใหญ่ในระหว่างการเล่นเกม

กล่าวโดยสรุปมาตรฐานและการวัดของคุณไม่แม่นยำ


1

การสาธิต DX teapot ไม่ได้ใช้งาน CPU 30% ที่มีประโยชน์ มันกำลังยุ่งอยู่เพราะมันไม่มีอะไรให้ทำอีกแล้ว


0

จากสิ่งที่ฉันรู้เกี่ยวกับซีรีส์ Unreal บางการประชุมก็แตกเหมือน encapsulation โค้ดจะถูกคอมไพล์ไปยัง bytecode หรือรหัสลงในเครื่องโดยตรงขึ้นอยู่กับเกม นอกจากนี้วัตถุจะแสดงผลและบรรจุภายใต้รูปแบบของตาข่ายและสิ่งต่าง ๆ เช่นพื้นผิวแสงและเงาถูกคำนวณล่วงหน้าในขณะที่ภาพเคลื่อนไหว 3 มิติล้วนต้องใช้สิ่งนี้ในเวลาจริง เมื่อเกมทำงานจริง ๆ แล้วยังมีการปรับแต่งบางอย่างเช่นการแสดงผลเฉพาะส่วนที่มองเห็นของวัตถุและแสดงรายละเอียดพื้นผิวเฉพาะเมื่อปิด ในที่สุดอาจเป็นไปได้ว่าวิดีโอเกมได้รับการออกแบบมาเพื่อให้ได้ประโยชน์สูงสุดจากแพลตฟอร์มในเวลาที่กำหนด (เช่น: Intelx86 MMX / SSE, DirectX, ... )


0

ฉันคิดว่ามีส่วนสำคัญของคำตอบที่หายไปที่นี่ คำตอบส่วนใหญ่บอกให้คุณ "รู้ข้อมูลของคุณ" ความจริงก็คือคุณจะต้องรู้แบบของคุณด้วยวิธีเดียวกันและมีความสำคัญในระดับเดียวกัน

  • CPU (นาฬิกาและแคช)
  • หน่วยความจำ (ความถี่และเวลาแฝง)
  • ฮาร์ดไดรฟ์ (ในแง่ของความเร็วและเวลาค้นหา)
  • GPU (#core, นาฬิกาและหน่วยความจำ / แคช)
  • อินเทอร์เฟซ: คอนโทรลเลอร์ Sata, การแก้ไข PCI ฯลฯ

แต่เหนือสิ่งอื่นใดด้วยคอมพิวเตอร์ที่ทันสมัยในปัจจุบันคุณจะไม่สามารถเล่นวิดีโอ 1080p ที่แท้จริงที่ >> 30ftp (ภาพ 1080p เดียวใน 64 บิตจะใช้เวลา 15 000 Ko / 14.9 MB) เหตุผลที่เป็นเพราะการสุ่มตัวอย่าง / ความแม่นยำ วิดีโอเกมจะไม่ใช้ความแม่นยำสองเท่า (64 บิต) สำหรับพิกเซลภาพข้อมูล ฯลฯ ... แต่ใช้ความแม่นยำที่กำหนดเองต่ำกว่า (~ 4-8 บิต) และบางครั้งความแม่นยำน้อยลงได้รับการลดหย่อนด้วยเทคนิคการแก้ไขเพื่อให้การคำนวณที่สมเหตุสมผล เวลา.

มีเทคนิคอื่น ๆ เช่นการตัดข้อมูล (ทั้งกับมาตรฐาน OpenGL และการใช้งานซอฟต์แวร์), การบีบอัดข้อมูลเป็นต้นโปรดจำไว้ว่า GPU ปัจจุบันสามารถเร็วกว่าซีพียูปัจจุบันมากกว่า 300 เท่าในแง่ของความสามารถของฮาร์ดแวร์ อย่างไรก็ตามโปรแกรมเมอร์ที่ดีอาจได้รับปัจจัย 10-20x เว้นแต่ว่าปัญหาของคุณจะได้รับการปรับปรุงอย่างเต็มที่และขนานได้อย่างสมบูรณ์

จากประสบการณ์ฉันสามารถบอกคุณได้ว่าการปรับให้เหมาะสมนั้นเหมือนกับเส้นโค้งเลขชี้กำลัง เพื่อให้ได้ประสิทธิภาพสูงสุดเวลาที่ใช้อาจสำคัญอย่างไม่น่าเชื่อ

ดังนั้นเพื่อกลับไปที่กาน้ำชาคุณควรดูว่ารูปทรงเรขาคณิตนั้นถูกนำมาแสดงตัวอย่างอย่างไรและด้วยความแม่นยำใดที่ Vs เห็นใน GTA 5 ในรูปแบบของเรขาคณิต / พื้นผิวและที่สำคัญที่สุดรายละเอียด (ความแม่นยำการสุ่มตัวอย่างและอื่น ๆ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.