กราฟฉากในเธรดแยกกัน


12

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

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

อย่างไรก็ตามนี่เป็นระเบียบ

นี่คือเป้าหมายสูงสุดของฉันสำหรับระบบ:

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

ฉันหวังว่าจะรวม Bullet (เอนจิ้นฟิสิกส์) และการสร้างเครือข่ายในอนาคตซึ่งฉันไม่ได้คิดมาก

มีวิธีใดบ้างที่จะทำให้กราฟซีนดีขึ้น

คำตอบ:


4

คุณอ่านวิทยานิพนธ์ของ Johannes Spohr ในหัวข้อ "Pace" และตัวแปลหรือยัง มันอธิบายสิ่งที่เรียกว่า"เครื่องมือส่งข้อมูล" * ตัวแสดงผลแบบขนานและอาจให้แนวคิดบางอย่างแก่คุณ

นี่คือหน้าสรุป (ภาษาเยอรมัน) และนี่คือลิงค์โดยตรงไปยัง PDF ซึ่งเป็นภาษาอังกฤษ

( *: ลิงค์นี้ไปยังบทความที่ฉันเคยได้ยินเกี่ยวกับวิทยานิพนธ์)

แก้ไข: ฉันแค่อ่านอย่างเดียวก่อนหน้านี้และฉันเพิ่งดูอีกครั้ง ... และตระหนักว่ามันคัดสรรรายละเอียดกราฟฉาก ฉันเดาว่าฉันไม่ทราบว่าการออกแบบมุมฉากของเขาเป็นอย่างไร ขออภัยหากไม่มีประโยชน์อย่างยิ่ง


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

1
คุณอาจตรวจสอบบทความ "การออกแบบกล้องเป็นศูนย์กลางสำหรับการแสดงผลแบบมัลติเธรด" ใน Game Engine Gems 1 และ "การแสดงผลแบบขนานในทางปฏิบัติที่เกี่ยวข้องกับ DirectX 9 และ DirectX 10" - microsoft.com/downloads/en/
......

1
ดูเหมือนว่า Game Engine Gems 1 มีให้บริการออนไลน์ฟรี: books.google.co.th/…
EricP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.