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

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

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

2
วิธีปรับปรุงประสิทธิภาพสำหรับฟังก์ชั่นราคาแพงในตัวสร้างเมือง 2 มิติ
ฉันค้นหาคำตอบแล้ว แต่ฉันไม่สามารถหาวิธีที่ดีที่สุดในการจัดการฟังก์ชั่น / การคำนวณราคาแพง ในเกมปัจจุบันของฉัน (อาคารเมืองแบบกระเบื้อง 2d) ผู้ใช้สามารถวางอาคารสร้างถนน ฯลฯ อาคารทุกหลังจำเป็นต้องเชื่อมต่อกับทางแยกที่ผู้ใช้ต้องวางไว้ที่ชายแดนของแผนที่ หากอาคารไม่ได้เชื่อมต่อกับทางแยกนี้สัญญาณ "ไม่ได้เชื่อมต่อกับถนน" จะปรากฏขึ้นเหนือสิ่งปลูกสร้างที่ได้รับผลกระทบ อาคารส่วนใหญ่มีรัศมีและอาจเกี่ยวข้องกันเช่นกัน (เช่นแผนกดับเพลิงสามารถช่วยบ้านทั้งหมดภายในรัศมี 30 แผ่น) นั่นคือสิ่งที่ฉันต้องปรับปรุง / ตรวจสอบเมื่อการเชื่อมต่อถนนเปลี่ยนไป เมื่อวานนี้ฉันพบปัญหาเรื่องประสิทธิภาพที่ยิ่งใหญ่ ให้ดูสถานการณ์ต่อไปนี้: ผู้ใช้สามารถลบสิ่งปลูกสร้างและถนนได้เช่นกัน ดังนั้นหากผู้ใช้ในขณะนี้แบ่งการเชื่อมต่อทันทีหลังจากสนธิฉันจำเป็นต้องปรับปรุงอาคารจำนวนมากในเวลาเดียวกัน ฉันคิดว่าหนึ่งในคำแนะนำแรกคือการหลีกเลี่ยงการซ้อนกันลูป (ซึ่งแน่นอนเป็นเหตุผลใหญ่ในสถานการณ์นี้) แต่ฉันต้องตรวจสอบ ... หากอาคารยังคงเชื่อมต่อกับทางแยกในกรณีที่มีการถอดกระเบื้องถนน (ฉันทำเช่นนั้นเฉพาะอาคารที่ได้รับผลกระทบจากถนนนั้น) (อาจเป็นปัญหาที่เล็กกว่าในสถานการณ์นี้) รายการของกระเบื้องรัศมีและได้รับอาคารภายในรัศมี(ลูปซ้อนกัน - ปัญหาใหญ่!) // Go through all buildings affected by erasing this road tile. foreach(var affectedBuilding in affectedBuildings) { …

2
Voxel Face Crawling (การลดความซับซ้อนของตาข่ายอาจใช้ความโลภ)
แก้ไข: นี่เป็นเพียงประสบการณ์การเรียนรู้ของฉันเองมันไม่ใช่เหตุผลด้านประสิทธิภาพที่ฉันถามคำถามนี้ นี่เป็นเรื่องเกี่ยวกับเครื่องยนต์ภูมิประเทศที่เหมือน Minecraft ฉันจัดเก็บบล็อกเป็นกลุ่ม (16x256x16 บล็อกเป็นกลุ่ม) เมื่อฉันสร้างชิ้นฉันใช้เทคนิคหลายขั้นตอนเพื่อตั้งค่าภูมิประเทศและวางวัตถุ ในขณะที่สร้างฉันจะเก็บ 1D array หนึ่งสำหรับ chunk แบบเต็ม (solid หรือไม่) และ 1D array ของ solid solid blocks หลังจากรุ่นฉันทำซ้ำผ่านบล็อกทึบตรวจสอบเพื่อนบ้านของพวกเขาดังนั้นฉันสร้างใบหน้าบล็อกที่ไม่มีเพื่อนบ้านทึบเท่านั้น ฉันเก็บใบหน้าที่จะสร้างในรายการของตัวเอง (นั่นคือ 6 รายการหนึ่งใบหน้าต่อใบหน้าปกติ / ที่เป็นไปได้) เมื่อเรนเดอร์ชิ้นผมแสดงรายการทั้งหมดในอันปัจจุบันของกล้องและเฉพาะรายการที่หันกล้องในกลุ่มอื่น ๆ ทั้งหมด ฉันทำสิ่งนี้โดยการเก็บรายการทั้ง 6 รายการไว้ในบัฟเฟอร์เดียวจากนั้นฉันก็เปลี่ยนช่วงที่ฉันวาด การใช้ 2D Atlas กับนี้เคล็ดลับเล็ก ๆ น้อย ๆ Shader แอนดรูรัสเซลปัญหาผมต้องการที่จะผสานใบหน้าที่คล้ายกันอย่างสมบูรณ์ นั่นคือถ้าพวกเขาอยู่ในรายการเดียวกัน (ปกติเหมือนกัน) อยู่ติดกันมีระดับแสงเท่ากัน ฯลฯ ฉันรู้ว่าฉันจะจบด้วยรูปสี่เหลี่ยม …

1
วิธีการปิดไฟใน Unity3D ได้อย่างไร
ก่อนอื่นฉันเป็นเจ้าของ Unity Pro ฉันกำลังมองหาที่จะปิดไฟเมื่อพวกเขาไม่ได้รับการดูในขณะนี้เพื่อปรับปรุงประสิทธิภาพ วิธีการหลักที่ฉันใช้ในการใช้ BecameVisible () และทดสอบ frustum ของกล้อง ปัญหาหลักของฉันคือถ้าผู้เล่นกำลังดูพื้นที่ที่จะสว่างด้วยแสงฉันยังต้องการแสงที่จะเปิด ขณะนี้ฉันใช้วิธีการตรวจสอบเพื่อดูว่าพื้นที่แสงสว่างอยู่ใน frustum ของกล้องหรือไม่ แต่บางครั้งปัญหาไฟอยู่ใน frustum โดยที่ผู้เล่นไม่สามารถมองเห็นได้ (เช่นกำแพงกั้นระหว่างพวกเขากับเครื่องเล่น) ฉันลอง raycasting กับพวกมัน แต่คุณไม่สามารถรับรายละเอียดเพียงพอสำหรับพื้นที่ที่เกิดขึ้นจริง (สิ่งที่ดีที่สุดที่ฉันคิดได้คือใช้ renderer.bounds.extent และ renderer.bounds.center เพื่อคำนวณจุดส่องสว่างสูงสุดจากแสง) ไม่มีใครรู้วิธีที่ง่าย ๆ ใน Unity Pro เพื่อปิดไฟ? หรือคุณสามารถบอกวิธีที่ดีในการใช้วิธีการที่ศูนย์กลางกล้องที่ฉันพูดถึง?

2
วิธีการจัดเก็บและแสดงแผนที่ย่อยบนเว็บได้อย่างมีประสิทธิภาพ
เกี่ยวกับ อันนี้เป็นคำถามสองข้อในข้อเดียว ก่อนอื่นฉันกำลังมองหาวิธีในการจัดเก็บข้อมูลจำนวนมากอย่างมีประสิทธิภาพ อีกแง่มุมหนึ่งเกี่ยวข้องกับการสอบถามชุดข้อมูลและการแสดงไทล์ ให้ฉันให้พื้นหลังบางอย่างก่อน เรากำลังสร้างเกมผู้ประกอบการหลายคนที่ใช้เบราว์เซอร์โดยใช้ห้องสมุด CraftyJS เพื่อแสดงผลเป็น Canvas ในพื้นหลังของ GUI เราใช้งาน Yii Framework บน PHP และทุกอย่างเชื่อมต่อกับเครื่องสร้างแผนที่แบบ Python และเครื่องมือสร้างเกม นี่คือลักษณะที่แสดงแผนที่คร่าวๆเป็นครั้งแรก: http://i.imgur.com/khAXtl.png กำลังจัดเก็บข้อมูลแผนที่ โลกของเกมจะถูกสร้างแบบสุ่มทุกครั้งที่เริ่มเกม ขนาดคือไพ่หกเหลี่ยม 100x100 สำหรับผู้เล่นแต่ละคน นั่นหมายความว่าสำหรับเกมผู้เล่นสามคนมีการสร้างไทล์ 90,000 แผ่น ขณะนี้ฉันเพิ่งสร้างอาร์เรย์ JavaScript ที่ฉันแสดงแผนที่ วิธีนี้ใช้งานได้ดีสำหรับการเรนเดอร์ แต่สำหรับการโต้ตอบใด ๆ กับแผนที่เราจำเป็นต้องเก็บผู้เล่นที่เป็นเจ้าของไทล์โครงสร้างประเภทใดที่สร้างอยู่ด้านบนสุดของมันราคาปัจจุบันและอื่น ๆ ในตอนแรกอย่างน้อยสำหรับต้นแบบเราต้องการใช้ MySQL แต่หลังจากการทดสอบบางอย่างมันไม่เร็วอย่างที่ฉันต้องการ บางทีที่เก็บวัตถุอย่าง MongoDB น่าจะเหมาะกว่าสำหรับเก็บข้อมูลไทล์แทนตาราง SQL หรืออาจเป็นอย่างอื่น? แสดงแผนที่ ปัญหาอื่นที่ฉันเห็นคือการเคลื่อนที่ไปรอบ ๆ แผนที่ ขณะนี้ฉันกำลังสร้างเอนทิตีที่มีฝีมือสำหรับแต่ละไทล์แม้ว่าจะไม่ได้อยู่ในวิวพอร์ต …

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

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

4
วิธีปรับปรุงประสิทธิภาพการทำงานเป็นชุด
ฉันกำลังพัฒนาเกม 2D แบบเทพดาสำหรับแพลตฟอร์มมือถือและฉันใช้ OpenGL (จริง ๆ แล้ว Irrlicht) เพื่อสร้างภาพกราฟิก ครั้งแรกที่ฉันใช้สไปรท์เรนเดอร์ด้วยวิธีง่าย ๆ : ทุก ๆ เกมจะแสดงผลเป็นรูปสี่เหลี่ยมด้วยการเรียกการวาดด้วย GPU ของตัวเองซึ่งหมายความว่าถ้าฉันมีวัตถุในเกม 200 รายการฉันทำการโทร 200 ครั้งต่อเฟรม แน่นอนว่านี่เป็นตัวเลือกที่ไม่ดีและเกมของฉันมีซีพียูที่เชื่อมโยงอย่างสมบูรณ์เพราะมีค่าใช้จ่ายซีพียูเล็กน้อยในการเรียกใช้ GPU ทุกครั้ง GPU อยู่เฉยตลอดเวลา ตอนนี้ฉันคิดว่าฉันสามารถปรับปรุงประสิทธิภาพได้โดยการรวบรวมวัตถุเป็นชุดใหญ่และแสดงชุดเหล่านี้ด้วยการเรียกสายเพียงไม่กี่ครั้ง ฉันใช้การแบทช์ (เพื่อให้ทุกเกมของวัตถุที่แชร์พื้นผิวเดียวกันมีการแสดงผลเป็นแบทช์เดียวกัน) และคิดว่าปัญหาของฉันหมดไป ... เพียงเพื่อจะพบว่าอัตราเฟรมของฉันต่ำกว่าเดิม ทำไม? ฉันมีวัตถุเกม 200 (หรือมากกว่า) และพวกมันได้รับการอัพเดท 60 ครั้งต่อวินาที ทุกเฟรมที่ฉันต้องคำนวณตำแหน่งใหม่ (การแปลและการหมุน) สำหรับจุดยอดในซีพียู (GPU บนแพลตฟอร์มมือถือไม่รองรับการติดตั้งดังนั้นฉันจึงไม่สามารถทำได้ที่นั่น) และทำการคำนวณนี้ 48000 ต่อวินาที (200 * 60 …

4
การแปลงรูปทรงเรขาคณิตบน CPU vs GPU
ฉันได้สังเกตเห็นว่าโปรแกรม 3d หลายทำตามปกติเวกเตอร์การคำนวณ / เมทริกซ์เช่นเดียวกับการแปลงทางเรขาคณิตบน CPU มีใครพบความได้เปรียบในการเคลื่อนย้ายการคำนวณเหล่านี้เป็น shaders จุดสุดยอดใน GPU หรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.