สิ่งนี้มักจะเกิดขึ้นกับ 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