การจัดการแบบตาข่ายบน GPU vs CPU


9

แค่อยากรู้อยากเห็นเล็กน้อย - คุณทำการผสมตาข่ายบน CPU หรือใน shader ที่ไหน? ฉันทำทุกอย่างบน CPU และเพื่อนแนะนำให้ย้ายสิ่งต่างๆไปยังด้าน GPU

หากคุณทำสิ่งต่าง ๆ เช่นอนิเมชั่นของกระดูก ... บน GPU คุณจะกลับมาตาข่ายได้อย่างไร? (เนื่องจากฉันกำลังตรวจจับการชนกันของข้อมูล ... )

คำตอบ:


13

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

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

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

  • ข้อดีสำหรับ GPU

    • อัปโหลดข้อมูลตาข่ายครั้งเดียว
    • แปลงให้หลายอินสแตนซ์
    • จำเป็นต้องส่งการแปลงเมทริกซ์เท่านั้น
    • GPU นั้นเก่งมากในการขนานสิ่งเหล่านี้
  • ข้อเสียสำหรับ GPU

    • ตาข่ายที่แปลงแล้วไม่สามารถใช้ทดสอบ CPU ได้
  • ข้อดีสำหรับ CPU

    • ตาข่ายที่ถูกเปลี่ยนรูปนั้นมีไว้สำหรับการทดสอบการชนและสิ่งอื่นที่จำเป็น
  • ข้อเสียสำหรับซีพียู

    • จำเป็นต้องอัปโหลดตาข่ายแปลงทั้งหมดในแต่ละเฟรม
    • จำเป็นต้องอัปโหลดตาข่ายทั้งหมดสำหรับแต่ละอินสแตนซ์ของตาข่าย

มีวิธีที่จะหลีกเลี่ยงข้อเสียสำหรับ GPU อย่างไร

  • ไม่ได้มีตาข่ายชนที่ถูกต้อง ใช้บางสิ่งบางอย่าง "ใกล้พอ" เช่นกล่องที่ถูกผูกไว้สำหรับทั้งตาข่ายหรือมีกล่องที่ถูกผูกไว้สำหรับกระดูกของแต่ละตาข่าย ด้านล่างนี้ใช้ในการแปลง GPU สำหรับตาข่ายและบน CPU แปลงสำหรับกล่องที่มีการจัดแนวแกนซึ่งเป็นตัวแทนของตาข่าย คุณสามารถได้รับขอบเขตที่แม่นยำยิ่งขึ้นโดยใช้ non-AABB

กอบลินกระดูก

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

ทั้งหมดฉันคิดว่าคุณสามารถดูได้ว่าทำไมมันจึงเป็นเรื่องธรรมดามากที่จะแปลงบน GPU


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

มันจะขึ้นอยู่กับเกม แต่โดยทั่วไปแล้วมันไม่เหมาะสำหรับเกมที่มีความซับซ้อนปานกลาง เมื่อมีทางเลือกที่ง่ายในการทำการแปลงบน GPU มันยากที่จะหาเหตุผลที่จะพิสูจน์ความต้องการทรัพยากรเพิ่มเติมของการทำการแปลงบน CPU ปัญหาคือมากขึ้นด้วยการส่ง mesh แปรรูปไปยัง GPU ทุกเฟรมซึ่งมีราคาแพงอย่างรวดเร็ว บ่อยครั้งที่มีกรณีของซอฟต์แวร์ขึ้นอยู่กับผู้พัฒนาเพื่อทำการตัดสินใจระหว่างความซับซ้อนและประสิทธิภาพ
MichaelHouse
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.