แพลตฟอร์มและภาษา agnostically, ชุดสไปรท์แบทช์ถูกกำหนดอย่างไร? ดูเหมือนว่ามีเทคนิคที่แตกต่างกันมากมายในการลดปริมาณงานเมื่อวาดภาพและพวกเขามักจะใช้ก้อน "แบตช์" มันเกิดขึ้นกับฉันว่าอาจไม่มีคำตอบที่แท้จริง แต่อาจมีบางคนที่นี่พบสิ่งที่ฉันไม่มี
แพลตฟอร์มและภาษา agnostically, ชุดสไปรท์แบทช์ถูกกำหนดอย่างไร? ดูเหมือนว่ามีเทคนิคที่แตกต่างกันมากมายในการลดปริมาณงานเมื่อวาดภาพและพวกเขามักจะใช้ก้อน "แบตช์" มันเกิดขึ้นกับฉันว่าอาจไม่มีคำตอบที่แท้จริง แต่อาจมีบางคนที่นี่พบสิ่งที่ฉันไม่มี
คำตอบ:
ในทางเทคนิค "การแบทช์" กำลังวางการกระทำหลายอย่างและข้อมูลลงในโครงสร้างข้อมูลเดียวเพื่อให้สามารถดำเนินการได้พร้อมกันมากกว่าทีละรายการ
คอขวดที่ใหญ่ที่สุดของ GPU สมัยใหม่ไม่ใช่พลังในการทำงาน แต่เป็นการสื่อสารระหว่างเกมของคุณที่ทำงานบน CPU และ GPU แต่ละแพ็คเกจของข้อมูลที่ส่งไปยัง GPU นั้นมีค่าใช้จ่าย แต่ค่าใช้จ่ายของแพคเกจขนาดเล็กนั้นใหญ่พอ ๆ กับแพ็กเกจขนาดใหญ่ดังนั้นมันจึงเป็นประโยชน์อย่างมากเมื่อคุณส่งแพ็กเกจขนาดใหญ่หนึ่งชุด และนั่นคือสิ่งที่แบทช์คือ; ทำหนึ่งแพคเกจใหญ่จากทั้งหมดที่เล็กกว่า
การแบทช์มีประโยชน์อย่างยิ่งสำหรับสไปรต์เนื่องจากมีข้อมูลจำนวนเล็กน้อยต่อการสไปรต์ที่น่าขัน จุดยอดสี่จุดและจุดเชื่อมต่อสี่จุด ดังนั้นค่าใช้จ่ายของแพ็คเกจเล็กจึงค่อนข้างใหญ่ตามสัดส่วน
Sprite batching เป็นวิธีการส่งสไปรต์หลาย ๆ ตัวไปยัง GPU ด้วยการดึงสายเดี่ยว
ไม่มีคำตอบอื่นใดที่ชี้ให้เห็นจุดที่แท้จริงของการทำสิ่งนี้: ลดการเปลี่ยนแปลงสถานะและการส่งคำสั่ง GPU ให้น้อยที่สุด หากคุณมีสไปรต์ 100 อันที่ฉันวาดแต่ละตัวมีพื้นผิวของตัวเองฮาร์ดแวร์สามารถประมวลผลสไปรต์ได้ครั้งละหนึ่งชิ้นเท่านั้น แกน shader หลายสิบหรือหลายพันแกนถูกใช้จนแทบจะไม่และ GPU ใช้เวลานานเกินไปในการตั้งค่าสถานะการเรนเดอร์สำหรับสวิตช์พื้นผิว
หากคุณใส่รูปภาพสไปรต์ทั้งหมดของคุณลงในแผนที่คุณสามารถลดการเปลี่ยนแปลงสถานะที่จำเป็นในการวาด คนขับอาจสามารถรวมคำขอสไปรต์การวาดเป็นชุดเดียวโดยอัตโนมัติเพื่อให้ฮาร์ดแวร์สามารถนำไปใช้ประโยชน์ได้อย่างเต็มที่ แต่สิ่งนี้ไม่รับประกันหรือเป็นไปได้
หากคุณใช้แผนที่เทพดาจากนั้นสร้าง VBO เดี่ยวด้วยสไปรต์ของคุณทั้งหมดที่กรอกไว้ในนั้นทำการร้องขอการดึงครั้งเดียวกับข้อมูลนั้นคุณรับประกันได้ว่าฮาร์ดแวร์จะถูกใช้อย่างเต็มที่และ Sprite ทั้งหมดของคุณจะแสดงผลแบบขนาน
Sprite batching นั้นกำลังทำสิ่งนั้น: วาง sprite ของคุณให้มากที่สุดเท่าที่จะเป็นไปได้ใน VBO เดียวโดยใช้ Atlas เดี่ยวที่ถูกส่งไปยัง GPU ด้วยการดึงสายเดียวเพิ่มการใช้ GPU ให้มากที่สุด
มีวิธีอื่นในการทำ Sprite batching (เช่นการติดตั้งฮาร์ดแวร์, การใช้รูปทรงเรขาคณิต, ฯลฯ ) และผลประโยชน์อื่น ๆ ในการทำเช่นนั้น แต่ส่วนสำคัญของมันคือการแบทช์หมายถึงการวาดวัตถุหลายรายการต่อการดึงสาย
มันไม่ได้เป็นคำศัพท์ทางเทคนิคที่กำหนดไว้อย่างแน่นหนา การสร้างชุดข้อมูลนั้นเป็นระบบใด ๆ ที่คุณทำการดำเนินการหลายอย่างเป็นชุดมากกว่าทีละรายการและมักจะทำเพราะมันมีประสิทธิภาพมากกว่าที่จะทำ ประสิทธิภาพที่เพิ่มขึ้นมักมาจากความสามารถในการใช้บริบทบางส่วนหรือทั้งหมดที่การดำเนินการต้องการ
ดังนั้นการสไปรต์แบทช์เป็นเพียงระบบใด ๆ ที่ช่วยให้คุณสามารถวาดสไปรต์หลายรายการพร้อมกันและหวังว่าจะได้รับประสิทธิภาพจากมัน โดยทั่วไปประโยชน์คือชุดแบตต์ของคุณใช้พื้นผิวเดียวกันดังนั้นคุณสามารถวาดสไปรต์ทั้งหมดในแบทช์โดยไม่ต้องเปลี่ยนพื้นผิวซึ่งเป็นการทำงานที่ค่อนข้างช้า