ทางออกที่มีประสิทธิภาพสำหรับการแบ่งพื้นที่หลายคน?


10

คำถามนี้ค่อนข้างยุ่งยาก แต่ฉันจะพยายามทำให้ชัดเจน

ช่วยบอกว่าฉันกำลังสร้างเกมออนไลน์ (ไม่ใช่ MMO-scale) แต่นั่นก็รองรับผู้เล่นให้มากที่สุดเท่าที่จะทำได้ในแนวทางเซิร์ฟเวอร์ที่เชื่อถือได้ ผมต้องการที่ยิ่งใหญ่ของโลกที่มีจำนวนมากของศัตรู AI จำลอง

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

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

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


คุณ จำกัด เซิร์ฟเวอร์จริงเพียงเครื่องเดียวหรือไม่
Patrick Hughes

ในที่สุดไม่มี แต่เพื่อประโยชน์ของทั้งเรียบง่ายและ achievability สำหรับตอนนี้ฉันไม่สามารถมีความซับซ้อนของโครงการมากยิ่งขึ้น :)
กริมชอว์

เริ่มง่ายๆ บางอย่างเช่น WoW ที่ทำงานบนกล่องฟิสิคัลหลายกล่องต่อ "เซิร์ฟเวอร์" เพียงแค่แบ่งโลกของพวกเขาออกเป็นกริดและการอัปเดตทั้งหมดขึ้นอยู่กับว่าใครอยู่ในกล่องเดียวกันกับคุณ ง่ายมากง่ายต่อการปรับแต่งใช้งานได้ดีและคุณสามารถใช้กับกล่องเดียวของคุณเพื่อควบคุมการประมวลผล
Patrick Hughes

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

1
และใช่ถ้าคุณจะมีทั้งสิ่งต่าง ๆ มากมายและผู้เล่นจำนวนมากทั่วคุณจริง ๆ ต้องวางแผนสำหรับทุกสิ่งที่จะใช้งานได้ทุกที่และตลอดเวลาไม่มีวิธีขลังรอบ ๆ นี่คือสาเหตุที่กล่องเดียวของกลุ่มเซิร์ฟเวอร์ MMO ให้บริการผู้เล่นสูงสุด 200-500 คนเท่านั้นและทำไม MMO AI สำหรับ NPC จึงโง่อย่างน่าสงสาร (หรือราคาถูกในการคำนวณ)
Patrick Hughes

คำตอบ:


5

จากสิ่งที่ฉันเข้าใจคุณจะมีฟิสิกส์บางอย่างทำงานบนเซิร์ฟเวอร์ของคุณ

หากเป็นเช่นนั้นมีเทคนิคอื่น ๆ สำหรับ AI / ฟิสิกส์นอกเหนือจากการแบ่งพื้นที่ จากมากไปน้อยชัดเจน:

  • ลำดับความสำคัญ: NPC ที่ไม่มีการโต้ตอบโดยตรงกับผู้เล่นสามารถรับเวลา CPU น้อยลงโดยลดอัตราการรีเฟรช คุณสามารถใช้ลำดับความสำคัญและเรียกใช้คิวที่มีลำดับความสำคัญสูงกว่าจากครั้งแรกถึงครั้งสุดท้ายในขณะที่คิวอื่น ๆ จะทำงานเพียง 1/2, 1/4 หรือ 1/8 ของคิวในแต่ละรอบ วิธีนี้ทำให้คุณมั่นใจว่าแต่ละวัตถุจะทำงานในบางจุด แต่คุณลดจำนวนครั้งที่ใช้งาน CPU
  • ฟิสิกส์สามารถลดลงได้ (เฉพาะกล่องการปะทะและทรงกลมเท่านั้นที่สามารถใช้งานได้ขณะโรมมิ่งและอยู่ห่างจากสายตา)
  • ลดความซับซ้อนของ AI / จำลองโดยการจัดสรรพฤติกรรมพื้นฐานให้กับ NPC และสภาพแวดล้อมในขณะที่ผู้เล่นอยู่ไกล โดยปกติจะเป็นการโรมมิ่งหรือสแกนหาศัตรูแทนการล่าการรวบรวมการทำฟาร์ม ...
  • ฟิสิกส์และ AI บางอย่างสามารถมอบให้กับลูกค้าได้เช่นกัน หากคุณไม่มี CPU บนเซิร์ฟเวอร์คุณสามารถแท็กวัตถุที่ได้รับการแก้ไขบางส่วนและลูกค้าจะปรับฟิสิกส์และตำแหน่งของวัตถุเหล่านั้นในพื้นที่ (เพื่อหลีกเลี่ยงการ NPC ลอย) ลูกค้าสามารถได้รับความรับผิดชอบบางส่วนในการใช้ AI (ในระหว่างการต่อสู้กับผู้เล่นอุปกรณ์ของผู้เล่นเป้าหมายสามารถเรียกใช้การโจมตี NPC ได้โดยตรง)
  • สำหรับผู้เล่นฟิสิกส์สามารถลดลงบนเซิร์ฟเวอร์และลูกค้าจะได้รับความรับผิดชอบเพิ่มเติมในการแก้ปัญหาการชน เช่นคุณตีวัตถุด้วยยานพาหนะของคุณเซิร์ฟเวอร์จะแก้ปัญหาการชนบนกล่องการชนและติดแท็กวัตถุที่อาจเกิดการชน ไคลเอนต์จะส่งการแก้ปัญหาไปยังเซิร์ฟเวอร์ด้วยการประทับเวลาซึ่งจะยอมรับถ้าวัตถุถูกแท็กและดูเหมือนว่าวิธีแก้ไขปัญหาที่เหมาะสม

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

แน่นอนว่าการตรวจจับการชนโดยประมาณจะสร้างความผิดปกติบางอย่าง แต่คุณจะสามารถแก้ไขได้โดยการเพิ่มความแม่นยำเป็นครั้งคราว

นอกจากนี้เกี่ยวกับฟิสิกส์คุณควรดู libs ที่รองรับระบบGPGPUบางประเภทเช่น OpenCL หรือ CUDA หากคุณมีเซิร์ฟเวอร์ที่รองรับเช่นกัน


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

@DevilWithin มันควรจะช่วยและมันไม่จำเป็นต้องมีการเปลี่ยนแปลงในด้านลูกค้า ฉันยังเพิ่มรายละเอียดเพิ่มเติมอีกเล็กน้อยในคำตอบ
โคโยตี้

AI ที่เรียบง่ายนั้นเป็นความคิดที่ยอดเยี่ยม ในขณะที่ NPC อยู่ไกลจากผู้เล่นพวกเขาไม่จำเป็นต้องทำอะไรนอกจากการเคลื่อนย้ายในกรณีส่วนใหญ่ นั่นหมายความว่าฉันสามารถประมาณสิ่งที่พวกเขากำลังทำอยู่ทุก ๆ 1 นาทีหรือทุกอย่างเพียงเพื่อทำให้พวกเขาท่องไปทั่วโลก .. จินตนาการว่าพวกเขาเป็นซอมบี้พวกเขาจะทำเช่นนั้น!
Grimshaw
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.