ฉันควรให้ตัวละครแต่ละตัวเป็น VBO ของตัวเองหรือฉันควรจะนำพวกเขาไปเป็น VBO ตัวเดียว?


10

ฉันทำเกม 3D คนแรก ฉันควรให้ตัวละครแต่ละตัวเป็น VBO ของตัวเองหรือฉันควรจะรวบรวมตัวละครทั้งหมดเป็น VBO ตัวเดียวหรือไม่? ข้อดี / ข้อเสียคืออะไร?


นี่เป็นคำถามที่ซ้ำกัน ของสิ่งที่ฉันไม่แน่ใจเกินไป แต่มันเป็นคนหลอกลวง
DeadMG

มันคล้ายกับนี้แต่ฉันไม่เชื่อว่ามันซ้ำกันสำหรับการเริ่มต้นนี่คือ Open-GL (ฉันไม่แน่ใจว่ามีความแตกต่างที่เฉพาะเจาะจง) ในขณะที่คำถามอื่น ๆ เกี่ยวกับ deformables ใน DirectX11 (สมมุติว่าใช้ tessellation ซึ่งเปลี่ยนสิ่งต่าง ๆ )
โทมัสรัสเซลล์

คำตอบ:


11

นี่เป็นตัวเลือกระหว่างประสิทธิภาพและความยืดหยุ่น แต่ฉันจะแสดงความคิดเห็นเกี่ยวกับเรื่องนี้

VBO เดียว

ด้านบวกคือ:

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

และด้านลบคือ:

  • ยากที่จะจัดการแม้ว่าจะขึ้นอยู่กับว่าคุณเขียนรหัสอย่างไรถ้ามันถูกออกแบบมาอย่างเหมาะสม ฯลฯ
  • ด้วยการบอกว่าจัดการได้ยากฉันหมายถึงสิ่งต่าง ๆ เช่นการปรับปรุง VBO ตั้งค่าออฟเซ็ตที่ถูกต้องสำหรับทุกวัตถุ ฯลฯ

บุคคล VBO: s

ด้านบวกคือ:

  • ใช้งานง่าย
  • ง่ายต่อการจัดการตั้งแต่ต้น

และด้านลบคือ:

  • การเปลี่ยนแปลงสถานะมากมาย ประสิทธิภาพจะลดลง
  • การโทรจำนวนมาก มันจะลดประสิทธิภาพ

สรุป

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

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

แก้ไข

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


หากคุณทำการโทรเพียงครั้งเดียวเท่านั้นนั่นจะทำให้คุณเปลี่ยนเป็นตาข่าย (ไม่ใช่ต่อยอด) เปลี่ยนสถานะ (เครื่องแบบ ฯลฯ ) ยังบังคับให้มีทั้งหมดหรือไม่มีเลยสำหรับการวาดทุกอย่าง แน่ใจว่าคุณสามารถทำลายมันได้ดังนั้นมีเพียง 1 VBO หลายสายเสมอ แต่ถ้าคุณต้องการเพิ่มตาข่ายใหม่?
decaviatedcaviar

1
@Daniel: mesh ใหม่ควรทำการอัพเดท / เพิ่มเข้าไปใน VBO ฉันลืมที่จะพูดถึงว่ามันจะไม่เป็นไรกับการจับสลากหลายสาย สิ่งที่สำคัญที่สุดในช่วงเวลาที่สำคัญในการปฏิบัติงานคือการเปลี่ยนแปลงสถานะให้น้อยที่สุด คุณสามารถกำหนดจำนวนของดัชนีที่จะประมวลผลและออฟเซ็ตสำหรับการโทรทุกครั้งและนี่ก็ใช้ได้ แต่อย่างไรก็ตามการเปลี่ยนแปลงสถานะให้ต่ำที่สุดเท่าที่เป็นไปได้และให้บริการโทรศัพท์วาดน้อยที่สุดที่ใหญ่สวัสดีของคำตอบนี้หรืออย่างน้อยสิ่งที่ฉันพยายามที่จะบอกว่า :-)
Wroclai

ชุดแบทช์แบทช์ในปี 2548 มาถึงข้อสรุปที่ว่าคุณสามารถซื้อได้ระหว่าง 10k และ 25k แบตช์บนซีพียู 1 GHz ก่อนที่คุณจะผูกพันกับซีพียูอย่างสมบูรณ์ ตามที่แปลเป็นไม่กี่ร้อยแบทช์ต่อ 60Hz เฟรมการแปลงทุกอย่างเป็น VB เดียวไม่จำเป็น แต่มันช่วยได้แน่นอนถ้าคุณรวมรูปทรงเรขาคณิตที่มีลักษณะคล้ายกัน (อายุการใช้งานอัตราการอัปเดตแอตทริบิวต์) เป็น VB เดียวกัน
Lars Viklund

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