ฉันควรใช้โปรแกรม OpenGL จำนวนเท่าใดเพื่อแสดงวัตถุหลายรายการ


10

ฉากของฉันมีวัตถุหลายอย่างในนั้น (สมมติว่า 3 ลูกบาศก์ 1 กระบอก 8 ทรงกลม) ฉันคิดว่าฉันควรสร้างจุดสุดยอดสำหรับแต่ละจุด ฉันควรมีกี่โปรแกรม

ทางเลือก:

  • หนึ่งโปรแกรมต่อวัตถุ
  • โปรแกรมหนึ่งสำหรับลูกบาศก์ทั้งหมดและอีกอันสำหรับทรงกลมทั้งหมด (สมมติว่าพวกเขาใช้เฉดสีเดียวกัน)
  • หนึ่งโปรแกรมขนาดใหญ่สำหรับทุกสิ่ง

แนวทางที่ถูกต้องคืออะไร?


1
"ฉันคิดว่าฉันควรสร้างยอดสุดยอดสำหรับแต่ละคน" ทำไมคุณคิดเช่นนี้? เครื่อง Shader ที่จะเปลี่ยนจุดยอดตามโมเดลของคุณและดูเมทริกซ์และคุณเกือบจะต้องการให้มันเหมือนกันสำหรับทุกสิ่ง
usm

คำตอบ:


8

คุณควรพิจารณาโปรแกรม shader เป็นส่วนที่คล้ายกันของรัฐเป็นพื้นผิว การเปลี่ยนสถานะมีราคาแพงดังนั้นคุณอาจจะสามารถหลีกเลี่ยงการรวมพื้นผิวต่าง ๆ เป็นหนึ่งเดียวเพื่อหลีกเลี่ยงการเปลี่ยนแปลงพื้นผิว เช่นเดียวกับ shaders - คุณอาจรวม shader หลาย ๆ อันเพื่อหลีกเลี่ยงการเปลี่ยนแปลงสถานะ

เช่นเดียวกับการรวมพื้นผิวการรวมเฉดสีมาพร้อมกับค่าใช้จ่าย - หากคุณแสดงเฉพาะพื้นที่พิกเซล 16x16 จากพื้นผิว 4096x4096 แสดงว่าคุณไม่ได้ใช้ฮาร์ดแวร์อย่างมีประสิทธิภาพ ในทำนองเดียวกันหากวัตถุที่คุณแสดงใช้เพียง 10% ของรหัสใน shader ของคุณก็เป็นไปได้ (และอาจเป็นไปได้) ว่าการ์ดกราฟิกกำลังประมวลผลจำนวนมากโดยไม่จำเป็น

ในระยะสั้น "ขึ้นอยู่กับ"


4
นอกจากนี้ในหลาย ๆ กรณีคุณสามารถหลีกเลี่ยงได้ด้วยเครื่องเดียวเท่านั้น ความแตกต่างนั้นมีเฉพาะในเครื่องแบบที่คุณส่งไปยัง shader, ชอบ, สี, พื้นผิว, แผนที่ปกติ ฯลฯ
rioki

ตัวอย่างเช่นคุณอาจมี shader "Scaly" ที่สร้างชิ้นส่วนที่ดูเป็นสะเก็ดและทำงานในลักษณะนี้ (shaders ส่วนใหญ่ทำ ... ) ที่คุณสามารถเรนเดอร์ทั้ง 3 cubes 1 cylinder และ 8 spheres โดยใช้นั่น หนึ่ง shader (ที่มีรูปทรงเรขาคณิตที่สอดคล้องกันแน่นอน) ชุดเครื่องแบบที่เหมาะสมที่นี่อาจเป็นค่าเวกเตอร์ที่กำหนดสีและอาจมีสเกลาร์สักสองสามอย่างหรือบางสิ่งที่ส่งผลกระทบต่อการมองเห็น "สะเก็ด" หรือ "แวว" จากนั้นคุณมีหนึ่ง shader และคุณเปลี่ยนวิธีการที่สี shader ชิ้นส่วนโดยการเปลี่ยนเครื่องแบบระหว่างการจับของรูปทรงเรขาคณิตของแต่ละบุคคล
Steven Lu

5

เป็นการดีที่สุดที่จะทำให้สิ่งต่าง ๆ เรียบง่ายที่สุดเท่าที่จะทำได้ การทำซ้ำ shader เดียวกันสำหรับทุกวัตถุนั้นไม่จำเป็นและจะทำให้บวมอย่างรวดเร็ว นอกจากนี้คุณยังไม่ต้องการ shader ยักษ์ตัวหนึ่งที่ครอบคลุมทุกกรณีการใช้งานที่เป็นไปได้

มีความคิดเห็นหลายประการเกี่ยวกับการจัดการ Shader และไม่มีวิธี "ดีที่สุด" ในการเข้าถึง ฉันเคยเห็นการใช้งาน Shader บางอย่างที่ทุก Shader ถูกสร้างขึ้นตามการบินตามพารามิเตอร์ (เช่นในUnreal engine )

สำหรับใครบางคนที่เพิ่งเริ่มต้นในพื้นที่นี้มันอาจเป็นการดีถ้าคุณจะดึงดินสอพื้นฐานออกมาก่อน ตัวอย่างเช่นฉันมี shader สำหรับวัตถุที่ไม่มีพื้นผิว, shader ที่มีพื้นผิวพื้นฐานและการสนับสนุนแสงต่อพิกเซล ฯลฯ ... จากนั้นทุกครั้งที่ฉันต้องการผลที่แตกต่างที่ไม่สามารถทำได้โดยใช้ shader ก่อนหน้านั้นฉันจะ จะสร้างขึ้นใหม่สำหรับผลใหม่

จุดประสงค์ของระบบดังกล่าวคือการทำให้สิ่งต่าง ๆ ง่ายขึ้น แค่. เก็บไว้. มัน. ง่าย


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