ความเร็วในการสร้างแบบจำลองของการแพร่กระจายข้อมูลแสงในซิมต่อสู้อวกาศ


29

ฉันกำลังทำงานกับซิมต่อสู้อวกาศซึ่งเกิดขึ้นในพื้นที่ที่ค่อนข้างกว้าง (ลูกบาศก์ของพื้นที่ ~ 20 นาทีแสงข้างหนึ่ง) และใช้ฟิสิกส์สมจริง (ส่วนใหญ่) หนึ่งในองค์ประกอบหลักที่ฉันต้องการสร้างแบบจำลองคือความเร็วในการเผยแพร่ข้อมูลทั่วทั้งพื้นที่การต่อสู้นั่นคือถ้าผู้เล่น A ประกอบไดรฟ์หลักของเขาที่ด้านหนึ่งของพื้นที่การต่อสู้มีความล่าช้า 20 นาทีก่อนที่ผู้เล่น B จะเห็น สามารถตอบสนองต่อมัน

แม้สำหรับพื้นที่รบขนาดเล็ก แต่นี่เป็นปัจจัยสำคัญที่กำหนดความเร็วที่เกี่ยวข้อง เรือยาว 500 ม. ที่ทำ 30kps นั้นจะถูกแทนที่ด้วยความยาวเต็มใน 1/60 ของวินาทีดังนั้นแม้กระทั่งการกำหนดเป้าหมายของฝ่ายตรงข้ามเพียงไม่กี่สิบวินาทีของแสงที่อยู่ห่างออกไปจะได้รับผลกระทบจากความล่าช้าของแสง

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

มีตัวแบบข้อมูลใดบ้างที่เหมาะกับสิ่งนี้ที่ฉันควรตรวจสอบมากกว่านี้?


7
Dunno คำตอบ แต่ฉันจะพูดในสิ่งที่เป็นคำถามที่เรียบร้อย!
ทิมโฮลท์

โว้ว! เกมส่วนใหญ่เกี่ยวกับการสร้างภาพ ฉันต้องรู้ว่าคุณวางแผนที่จะเห็นภาพคู่ต่อสู้อย่างไรเมื่อพิกเซลมีขนาดใหญ่เกินไป ตัวบ่งชี้ HUD ง่าย ๆ ? เกมผจญภัยในโหมดข้อความ? โปรดให้ความกระจ่างฉัน!
Jonas Byström

1
คุณบอกว่าแบบจำลองของคุณถูกต้องทางร่างกาย นั่นคือนิวตันหรือความสัมพันธ์? นั่นอาจสร้างความแตกต่างอย่างมากกับเครื่องชั่งดังกล่าว
MSalters

1
ไม่ใช่ว่ามันตอบคำถาม แต่อาจจะดูที่A Slower Speed ​​of Lightจะให้ความคิดกับคุณ
Michael Pankov

@ JonasByström - มุมมองทางไกลนั้นค่อนข้างซับซ้อนและฉันพยายามทำความสะอาด โดยพื้นฐานแล้วฉันหวังว่ามันจะเป็นมุมมองที่น่าจะเป็นไปได้ว่าเป้าหมายจะเป็นอย่างไรในอนาคตโดยพิจารณาจากความล่าช้าของแสงและการประมาณการคอมพิวเตอร์ของเรือของคุณเกี่ยวกับ max delta-v ของเป้าหมาย ตอนนี้มันค่อนข้างน่ากลัวน้อยกว่านั้น :) :)
John Biesnecker

คำตอบ:


9

เพียงแค่ระดมสมองที่นี่ ...

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

โดยทั่วไปแล้วเซิร์ฟเวอร์จะส่งการอัปเดตไปยังไคลเอนต์ทั้งหมดในเวลาเดียวกัน แต่สิ่งที่คุณต้องการสำหรับเซิร์ฟเวอร์ในการคำนวณ "ความล่าช้าแสง" สำหรับแต่ละเหตุการณ์ (ขึ้นอยู่กับระยะทางของผู้ดู) แล้วไม่ส่งการอัปเดตจนกว่า เวลา.

ดังนั้นสำหรับทุกเหตุการณ์ให้คำนวณการหน่วงเวลาระหว่างเหตุการณ์และผู้เล่นแต่ละคนจากนั้นจัดคิวเหตุการณ์นั้นเพื่อไม่ให้ส่งภาพวาดให้ผู้เล่นนั้นจนกว่าจะถึงเวลาหน่วง

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

Doppler shift จะเป็นสิ่งที่น่าสนใจในการผสมโดยขึ้นอยู่กับเดลต้าเคลื่อนที่ระหว่างผู้ชมและเหตุการณ์


ฉันเรียงลำดับตำแหน่งและความเร็วที่เปลี่ยนแปลงไปแล้ว แม้จะมีขนาดวัตถุในเกมโดยทั่วไปจะไม่ได้รับเศษส่วนที่เห็นได้ของความเร็วของแสงดังนั้นเหตุการณ์ที่เกิดขึ้นพวกเขาค่อนข้างง่าย แต่มีการตรวจสอบที่แต่ละเห็บถ้าผู้รับอยู่ในทรงกลมที่จะได้เห็น เหตุการณ์ดังนั้นหากคุณกำลังเคลื่อนไปหรือไปที่คลิปที่ดีอาจส่งผลกระทบนี้โดยการติ๊กเล็กน้อย Doppler น่าสนใจจริงๆ บางสิ่งบางอย่างที่จะมองเข้าไป :-)
John Biesnecker

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

5

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

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

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

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