คำถามติดแท็ก performance

คุณภาพประสิทธิภาพและความเร็วในการเล่นเกมเพลย์อันเป็นผลมาจากปัจจัยหลายประการในการออกแบบและโครงสร้างของเกมและสถาปัตยกรรม

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

3
ฉันจะทำความสะอาดซากปรักหักพังที่ผู้เล่นสร้างขึ้นได้อย่างไร?
ในเกมล่าสุดที่ฉันทำคุณสามารถแบ่งวัตถุสองมิติได้ตามต้องการแสดงใน gif นี้: คุณสามารถตัดมันต่อเนื่องเป็นร้อยหรือพันชิ้น สิ่งนี้ไม่ได้สร้างความล่าช้ามากนักเนื่องจากพวกมันอยู่ในสถานะฟิสิกส์การนอนหลับอยู่เสมอ แต่ก็มีปัญหาเมื่อคุณทำให้พวกมันเคลื่อนไหว ฉันไม่แน่ใจจริงๆว่าจะจัดการกับมันอย่างไรจึงไม่มีเศษซากปรักหักพังมากนัก ฉันไม่ต้องการลบพวกเขาหลังจากผ่านไประยะหนึ่ง ฉันไม่ชอบวิธีถ้าคุณกลับไปที่สิ่งที่คุณตัดในขณะที่มันหายไปแบบสุ่ม ฉันจะทำความสะอาดซากปรักหักพังที่ผู้เล่นสร้างขึ้นได้อย่างไร?
92 unity  2d  performance 

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

6
กระสุนทำงานในวิดีโอเกมอย่างไร
ฉันเจอคำถามนี้เมื่อฉันออกแบบวิดีโอเกมใน C # หากเราพิจารณาเกมเช่นBattlefieldหรือCall of Dutyกระสุนหลายร้อยหรือหลายพันกระสุนกำลังบินในเวลาเดียวกัน เหตุการณ์ถูกเรียกใช้อย่างต่อเนื่องและจากสิ่งที่ฉันรู้สิ่งนี้ดูดพลังการประมวลผลมากมาย ... หรือไม่? ฉันต้องการทราบว่านักพัฒนาเกมต่าง ๆ จัดการกับสัญลักษณ์แสดงหัวข้อย่อย (2D และ 3D) และวิธีที่มีประสิทธิภาพที่สุดสำหรับแต่ละรายการอย่างไร ฉันอ่านคำถามว่ากระสุนถูกจำลองในวิดีโอเกมอย่างไร แต่มันไม่ได้สัมผัสว่ากระสุนทำงานอย่างไรจากมุมมองการออกแบบโปรแกรม ฉันมีความคิดสองสามข้อ แต่ก็มีข้อเสีย: วิธีที่มีประสิทธิภาพที่สุดที่ฉันคิดได้ (สำหรับเกม 2D): สมมติว่าฉันต้องสร้างคลาสที่ชื่อว่า Bullet แต่ผู้ใช้กดปุ่มค้างไว้นาน 0.01 วินาทีทุกครั้งที่มีการสร้างวัตถุ Bullet กระสุนนี้มี: 1ความเร็ว 2ตำแหน่งเริ่มต้นของตำแหน่งที่มันถูกยิงจาก 3 Sprite เนื้อ 4เอฟเฟกต์ที่โจมตี เนื่องจากสัญลักษณ์แสดงหัวข้อจะเป็นคลาสของตัวเองจึงสามารถจัดการการวาดการเคลื่อนไหวและการดำเนินการฟังเอง หน่วยประมวลผลจะไม่สามารถประมวลผลวัตถุนับพันรายการได้ยากหรือไม่แล้วจะถูกทำลาย (เมื่อมีการเรียกใช้เอฟเฟกต์เมื่อโจมตี) พื้นที่แรม? วิธีการที่มีประสิทธิภาพสำหรับเกม 3D - อีกหนึ่งความคิดที่ฉันมีคือ: ให้บอกว่าฉันสร้างคลาสอาวุธ อาวุธนี้มีคุณสมบัติหลากหลายซึ่งบางส่วน: 1ตรวจสอบว่าอาวุธเล็งไปที่ใดและตัดสินว่ามองเป้าหมายหรือไม่ 2เรียกภาพเคลื่อนไหวของการยิงปืน 3มีเมธอด doDamage …

7
ความแตกต่างของประสิทธิภาพระหว่างจำนวนเต็มที่ไม่ได้ลงนามและที่เซ็นชื่อมีอะไรบ้าง [ปิด]
ฉันตระหนักถึงประสิทธิภาพในการทำงานเมื่อผสม ints ที่เซ็นชื่อกับลอย มันแย่กว่าไหมถ้าจะผสม ints ที่ไม่ได้ลงนามกับ Floats? มีการเข้าชมใด ๆ เมื่อผสมการเซ็นชื่อ / ไม่ได้ลงชื่อโดยไม่มีการลอยหรือไม่? ขนาดแตกต่างกัน (u32, u16, u8, i32, i16, i8) มีผลกระทบต่อประสิทธิภาพหรือไม่? บนแพลตฟอร์มใด
42 c++  performance 

5
ฉันควรใช้พื้นผิวที่ไม่ได้มีขนาดเท่ากับกำลัง 2 หรือไม่?
ในวันแรก ๆ ของ OpenGL และ DirectX ขนาดของพื้นผิวจะต้องเป็นพลังของสอง นั่นหมายถึงการแก้ไขค่าลอยสามารถทำได้อย่างรวดเร็วโดยใช้การเลื่อนและเช่นนั้น ตั้งแต่ OpenGL 2.0 (และก่อนหน้านั้นผ่านมิติส่วนขยาย) ที่ไม่ใช่พลังงานของสองพื้นผิวได้รับการสนับสนุน พื้นผิวพลังแห่งสองมีข้อได้เปรียบด้านประสิทธิภาพการทำงานกับ GPU แบบรวมและแยกแบบใหม่หรือไม่? พื้นผิวที่ไม่มีพลังงานสองข้อได้เปรียบมีอะไรบ้าง ประชากรเดสก์ท็อปที่สำคัญมีการ์ดที่รองรับพื้นผิวที่ไม่ใช่พลังงานหรือไม่?

7
ฉันจะปรับปรุงความเร็วการเรนเดอร์ของเกมประเภท Voxel / Minecraft ได้อย่างไร?
ฉันกำลังเขียนโคลนของ Minecraft เอง (เขียนด้วยภาษาจาวา) มันใช้งานได้ดีในขณะนี้ ด้วยระยะการดู 40 เมตรฉันสามารถกด 60 FPS บน MacBook Pro 8,1 ได้อย่างง่ายดาย (Intel i5 + Intel HD Graphics 3000) แต่ถ้าฉันวางระยะทางในการมองที่ 70 เมตรฉันจะไปถึง 15-25 FPS ใน Minecraft ตัวจริงฉันสามารถใส่ความไม่ลงรอยกันในการมองไกล (= 256m) ได้โดยไม่มีปัญหา ดังนั้นคำถามของฉันคือฉันควรทำอย่างไรเพื่อทำให้เกมของฉันดีขึ้น? การเพิ่มประสิทธิภาพที่ฉันใช้: เก็บเฉพาะชิ้นส่วนในหน่วยความจำเท่านั้น (ขึ้นอยู่กับระยะการมองของผู้เล่น) Frustum culling (ครั้งแรกบนชิ้นแล้วบนบล็อก) วาดเฉพาะใบหน้าที่มองเห็นได้จริงๆของบล็อกเท่านั้น ใช้รายการต่ออันที่มีบล็อกที่มองเห็นได้ ส่วนที่มองเห็นได้จะเพิ่มเข้าไปในรายการนี้ หากพวกเขากลายเป็นล่องหนพวกเขาจะถูกลบออกจากรายการนี้โดยอัตโนมัติ บล็อกกลายเป็น (ใน) มองเห็นได้โดยการสร้างหรือทำลายบล็อกเพื่อนบ้าน การใช้รายการต่ออันประกอบด้วยบล็อกการปรับปรุง กลไกเดียวกับรายการบล็อกที่มองเห็นได้ ใช้newคำสั่งแทบไม่มีในลูปเกม …

12
ฉันจะทำให้ A * เสร็จเร็วขึ้นได้อย่างไรเมื่อปลายทางไม่สามารถใช้ได้
I am making a simple tile-based 2D game, which uses the A* ("A star") pathfinding algorithm. I've got all working right, but I have a performance problem with the search. Simply put, when I click an impassable tile, the algorithm apparently goes through the entire map to find a route …

3
ทีมป้องกันการเขียนทับทำงานในไฟล์ต้นฉบับได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว มันเป็นไปได้สำหรับฉันที่มีหลายคนที่กำลังทำงานอยู่ในขณะเดียวกันเช่นเอ็นจิ้นเกม สมมติว่านักพัฒนาคนหนึ่งกำลังทำงานAudio.cppและนักพัฒนาที่สองก็กำลังทำงานอยู่Audio.cppสิ่งนี้จัดการโดยทั่วไปในทีมขนาดใหญ่เพื่อต่อสู้กับการเขียนทับได้อย่างไร (ในคำอื่น ๆ ที่จะหยุดสองนักพัฒนาจากการเปิดไฟล์จนกว่านักพัฒนาคนหนึ่งจะเสร็จสิ้น)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

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

7
คำแนะนำของ Microsoft ในการใช้คุณสมบัติ C # ใช้ได้กับการพัฒนาเกมหรือไม่
ฉันเข้าใจว่าบางครั้งคุณก็ต้องการคุณสมบัติเช่น: public int[] Transitions { get; set; } หรือ: [SerializeField] private int[] m_Transitions; public int[] Transitions { get { return m_Transitions; } set { m_Transitions = value; } } แต่ความประทับใจของฉันคือว่าในการพัฒนาเกมถ้าคุณไม่มีเหตุผลที่จะทำอย่างอื่นทุกอย่างควรจะเร็วที่สุด ความประทับใจของฉันจากสิ่งที่ฉันอ่านคือ Unity 3D ไม่แน่ใจว่าจะเข้าถึงแบบอินไลน์ผ่านคุณสมบัติได้ดังนั้นการใช้คุณสมบัติจะส่งผลให้มีการเรียกใช้ฟังก์ชันเพิ่มเติม ฉันถูกต้องหรือไม่ที่จะเพิกเฉยต่อคำแนะนำของ Visual Studio เพื่อไม่ให้ใช้ช่องสาธารณะ (โปรดทราบว่าเราใช้ในint Foo { get; private set; }กรณีที่มีข้อได้เปรียบในการแสดงการใช้งานที่ต้องการ) ฉันทราบว่าการเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นสิ่งที่ไม่ดี แต่อย่างที่ฉันได้กล่าวไว้ในการพัฒนาเกมคุณจะไม่ทำอะไรช้า ๆ เมื่อความพยายามคล้าย ๆ …

2
ฉันจะลดผลกระทบด้านประสิทธิภาพของการแสดงผลต้นไม้ได้อย่างไร
ฉันกำลังทำเกมโพลีสุกใสต่ำ ฉันมีภูมิประเทศที่มีน้ำและฉันต้องการต้นไม้มากมาย ฉันมีต้นไม้จำนวน 10,000 ต้นในขณะนี้ ต้นไม้แต่ละต้นมีรูปสามเหลี่ยมไม่เกิน 200 รูปดังนั้นพวกเขาจึงไม่เก็บภาษีมากเกินไป ปัญหาหลักคือมีทะเลสาบและทะเลสาบมีขนาดค่อนข้างใหญ่ คุณไม่สามารถเห็นต้นไม้ใด ๆ ที่อยู่อีกด้านหนึ่งของทะเลสาบและนั่นก็ดูแย่มากโดยเฉพาะเมื่อคุณเดินไปที่นั่นและต้นไม้ก็ปรากฏขึ้นทันที ในการแก้ไขปัญหานี้ฉันต้องเพิ่มระยะห่างของต้นไม้เพื่อให้คุณสามารถเห็นต้นไม้จำนวนหนึ่งที่อยู่ตรงข้ามทะเลสาบ แต่ลดประสิทธิภาพลง 40-50fps และแทบไม่มีอะไรในเกมเลย ฉันใช้ GTX 1080 หากเป็นเช่นนั้น ฉันจะทำอย่างไรเพื่อให้เกมของฉันทำงานเร็วขึ้นด้วยต้นไม้มากขึ้น

3
เป็นเรื่องปกติหรือไม่ที่เกมจะใช้ CPU 100%?
ฉันเพิ่งใช้การจัดการอินพุตแบบมัลติเธรดในเอ็นจินเกมของฉันโดยที่โค้ดที่โพลระบบปฏิบัติการเพื่อรวบรวมข้อมูลจากมันและการประทับเวลาจะอยู่ในเธรดแยกต่างหากและแต่ละเฟรมในเธรดหลักฉันกินอินพุตที่รวบรวมไว้ เวลาของเกมลอจิก ทุกอย่างทำงานได้ แต่การตั้งค่านี้ใช้ CPU ของฉัน 100% ฉันมีสองคอร์และเพิ่มขึ้นถึง 100% ในขณะที่รันเกมของฉัน ฉันได้ตรวจสอบกับเกมอื่น ๆ เพื่อดูว่าพวกเขาทำเช่นนั้นหรือไม่ ยกตัวอย่างเช่น Skyrim และ Doom 3 นั้นใช้ได้กับซีพียูมากกว่า 60% เป็นที่ยอมรับหรือไม่สำหรับเกมที่ใช้อินพุตแบบมัลติเธรดเพื่อใช้ CPU 100%? ถ้าไม่เช่นนั้นมีเทคนิคอะไรบ้างที่เกมดังกล่าวใช้เพื่อลดการใช้ cpu โดยเธรดอินพุต?

6
วิธีเพิ่มประสิทธิภาพฟังก์ชั่นระยะทาง?
ในขณะที่พัฒนาเกมคล้าย RTS ที่เรียบง่ายพอสมควรฉันสังเกตว่าการคำนวณระยะทางของฉันทำให้เกิดผลกระทบต่อประสิทธิภาพ ตลอดเวลามีการตรวจสอบระยะทางเพื่อทราบว่ายูนิตอยู่ในระยะใกล้เป้าหมายหรือไม่หากกระสุนปืนมาถึงเป้าหมายหากผู้เล่นวิ่งผ่านรถปิคอัพชนทั่วไป ฯลฯ รายการจะดำเนินต่อไปและตรวจสอบหา ระยะห่างระหว่างจุดสองจุดใช้กันมาก คำถามของฉันเกี่ยวกับเรื่องนั้นอย่างแน่นอน ฉันต้องการทราบว่าผู้พัฒนาเกมทางเลือกมีอะไรบ้างในการตรวจสอบระยะทางนอกเหนือจากวิธี sqrt (x * x + y * y) ตามปกติซึ่งใช้เวลาค่อนข้างนานหากเราทำการแสดงหลายพันครั้งต่อเฟรม ฉันต้องการที่จะชี้ให้เห็นว่าฉันทราบระยะทางแมนฮัตตันและการเปรียบเทียบระยะทางกำลังสอง (โดยข้ามคอขวด sqrt) มีอะไรอีกไหม

5
การปรับปรุงฟังก์ชั่น O (N ^ 2) (เอนทิตีทั้งหมดทำซ้ำมากกว่าเอนทิตีอื่น ๆ ทั้งหมด)
พื้นหลังเล็กน้อยฉันเขียนโค้ดเกมวิวัฒนาการกับเพื่อนใน C ++ โดยใช้ ENTT สำหรับระบบเอนทิตี สิ่งมีชีวิตที่เดินไปรอบ ๆ ในแผนที่ 2 มิติกินสีเขียวหรือสิ่งมีชีวิตอื่นทำซ้ำและคุณสมบัติของพวกมันกลายพันธุ์ นอกจากนี้ประสิทธิภาพก็ดี (60fps ไม่มีปัญหา) เมื่อเกมทำงานแบบเรียลไทม์ แต่ฉันต้องการที่จะเพิ่มความเร็วอย่างมีนัยสำคัญโดยไม่ต้องรอ 4h เพื่อดูการเปลี่ยนแปลงที่สำคัญ ดังนั้นฉันต้องการได้เร็วที่สุด ฉันกำลังดิ้นรนเพื่อหาวิธีที่มีประสิทธิภาพสำหรับสิ่งมีชีวิตในการค้นหาอาหารของพวกเขา สิ่งมีชีวิตแต่ละคนควรจะมองหาอาหารที่ดีที่สุดที่อยู่ใกล้พวกเขา หากต้องการกินสิ่งมีชีวิตที่อยู่ในภาพควรจะมองไปรอบ ๆ ตัวเองในรัศมี 149.64 (ระยะการมองของมัน) และตัดสินว่าควรกินอาหารชนิดใดซึ่งขึ้นอยู่กับโภชนาการระยะทางและประเภท (เนื้อสัตว์หรือพืช) . ฟังก์ชั่นที่รับผิดชอบในการค้นหาสิ่งมีชีวิตทุกชนิดของพวกเขาคือการกินอาหารประมาณ 70% ของเวลาใช้งาน ทำให้การเขียนง่ายขึ้นในขณะนี้มันจะเป็นดังนี้: for (creature : all_creatures) { for (food : all_entities_with_food_value) { // if the food is within the …

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