ค่าใช้จ่ายจริงในการสลับเอฟเฟกต์


16

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

ฉันสงสัยว่าใครบางคนสามารถอธิบายได้อย่างแม่นยำว่ากระบวนการนี้มีค่าใช้จ่ายเท่าใด และใส่ถ้าเป็นไปได้ 'ค่อนข้าง' เข้ากับบริบทหรือไม่

ตัวอย่างเช่นฉันต้องการใช้ shader สั้น ๆ เพื่อช่วยในการหยิบฉันจะ:

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

ส่วนใดของเวลาทั้งหมดที่ใช้ในการทำให้กระบวนการเสร็จสมบูรณ์ สัญชาตญาณของฉันจะบอกว่าการสร้างฉากอีกครั้งไม่ว่า shader จะเรียบง่ายเพียงใดลำดับของขนาดจะช้ากว่าส่วนอื่น ๆ ของกระบวนการดังนั้นทำไมความกังวลทั้งหมดเกี่ยวกับเอฟเฟกต์?

คำตอบ:


21

ปัญหาที่คุณอธิบายไม่ใช่ปัญหา "พิเศษ" ไม่มีอะไรช้าโดยเฉพาะอย่างยิ่งเกี่ยวกับการเปลี่ยนเอฟเฟกต์ของ GPU ปัญหาผลกระทบกับการเปลี่ยนแปลงพารามิเตอร์ผล (รวมทั้งแปลง), พื้นผิว, ทำให้รัฐต่างๆและเพียงแค่การส่งคำสั่งวาดหลายก็คือว่ามันมีความจำเป็นที่ชุดอื่นต้องถูกส่งไปกับ GPU

ชุดเป็นCPU -bound และคุณจะได้รับไม่กี่พัน*ต่อเฟรมที่จะใช้

ขึ้นอยู่กับ CPU และงานอื่น ๆ ที่คุณกำลังทำอยู่ แต่สมมติว่าคุณได้รับประมาณ 1,000 แบทช์ต่อเฟรม หากคุณแสดงวัตถุหนึ่งชุดต่อชุดคุณสามารถวาดวัตถุได้ประมาณ 1,000 รายการบนหน้าจอก่อนที่คุณจะประสบปัญหา

หากคุณเพิ่มการเลือกโดยฉับพลันและคุณต้องทำให้วัตถุทั้งหมดของคุณสองครั้งแสดงว่าคุณ จำกัด การวาดเพียง 500 วัตถุ

(ดังนั้นหากคุณมีวัตถุเพียงเล็กน้อยเท่านั้นอย่ากังวลไป!)

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

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

ต่อไปนี้เป็นสำรับการนำเสนอภาพนิ่งทั้งหมดจาก NVidia ที่ชื่อ"แบทช์แบทช์แบทช์: มันหมายถึงอะไรจริงๆ?" (PDF) ที่มีกราฟและสิ่งอธิบายที่ดี นอกจากนี้ยังแสดงเทคนิคบางอย่างสำหรับการลดจำนวนชุดงานของคุณ


ตกลงกัน! ขอบคุณสำหรับการอธิบายและคำแนะนำสิ่งที่ฉันอ่านทำให้มีเหตุผลมากขึ้นในขณะนี้ ขอบคุณสำหรับการนำเสนอ NVidia ฉันแค่อ่านตอนนี้และมันมีประโยชน์มาก
sebf

1
อัปเดตลิงก์ไปยังกระดาษ "Batch, Batch, Batch": ce.u-sys.org/Veranstaltungen/ …
Marton

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