GLSL ทั้งหมดในโปรแกรม shader เดียวหรือหลายโปรแกรม?


17

ฉันกำลังสาธิตการใช้งาน 3D โดยใช้ OpenGL และฉันสังเกตว่า GLSL นั้นค่อนข้าง "จำกัด " (หรือเป็นแค่ฉันเอง) อย่างไรก็ตามฉันมีวัสดุหลายประเภท วัสดุบางอย่างมีสีโดยรอบและกระจายวัสดุบางอย่างมีแผนที่บดเคี้ยวโดยรอบบางคนมีแผนที่ specular และชนแผนที่ ฯลฯ

มันจะดีกว่าที่จะสนับสนุนทุกอย่างในหนึ่งคู่ยอด / ชิ้นส่วนแยกหรือดีกว่าที่จะสร้างยอดยอดหลายชิ้นและเลือกพวกเขาขึ้นอยู่กับวัสดุที่เลือกในปัจจุบัน? กลยุทธ์ shader ทั่วไปใน OpenGL หรือ D3D คืออะไร



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

คำตอบ:


12

คำตอบคือมันขึ้นอยู่กับว่า

โดยทั่วไปมีโรงเรียนแห่งความคิดสองแห่ง ขนาดเล็กที่เหมาะสมที่สุดสำหรับทุกสิ่งและค่าย uber-shader

เฉดสีเล็ก ๆ เป็นเช่นนั้น ทำสิ่งหนึ่งและทำได้ดี Uber-shaders ควบคุมการทำงานของพวกเขาในขณะทำงานผ่านเครื่องแบบหรือรวบรวมเป็นกลุ่มของเฉดสีที่แตกต่างกันผ่านมาโครตัวประมวลผลล่วงหน้า (และ / หรือแหล่งกำเนิด shader)

ทางออกที่ดีที่สุดอาจไม่ใช่ แต่เป็นลูกผสมบางประเภท อาจจะมี uber-shaders หรือ uber-shaders ร่วมกับผู้เชี่ยวชาญบางคนในบางกรณี

Shader ขนาดเล็ก

ข้อดี:

  • มีแนวโน้มที่จะเร็วขึ้น / ดีที่สุด
  • ทำในสิ่งที่คุณต้องการทำ
  • สามารถทำสิ่งแปลก ๆ และกำหนดเองได้อย่างง่ายดาย

จุดด้อย:

  • หลุดพ้นจากมือได้ง่ายโดยเฉพาะเมื่อจำนวนคุณลักษณะเพิ่มขึ้น
  • อาจจะทำงานได้มากขึ้นเว้นแต่ว่าคุณจะมีเฉดสีน้อยมาก

Uber-Shader

ข้อดี:

  • ทุกอย่างในที่เดียว
  • เป็นมิตรกับศิลปินมากขึ้น (การใช้คุณสมบัติ A พร้อมฟีเจอร์ X เป็นครั้งแรกไม่จำเป็นต้องใช้เวลา coder)

จุดด้อย:

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

Uber-shaderในการเป็นตัวแทนนี้ไม่ได้เป็นสิ่งที่ดี :) ฉันจะเสนอให้เขียนผู้จัดการ shaders ที่ดีตามที่กำหนดไว้ล่วงหน้า - ดังนั้นเราจะมีรหัส uber-shader ที่มีหลาย#ifdefs ซึ่งจะถูกสลับสำหรับวัสดุต่างๆ
brigadir

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