ฉันควรใช้ shaders ที่ใช้งานอยู่ในเฟรมเดียวในเกมเดียว 5 ขึ้นไปเช่น 100


20

ในช่วงเวลาเดียวกันในหนึ่งฉากมีเกมที่ทันสมัย ฉันรู้ว่ามีการใช้เฉดสีหลายแบบโดยมีเกมสลับระหว่างพวกเขาในแต่ละเฟรมและเป็นเรื่องธรรมดาที่จะวาดวัตถุผ่าน shader:

  1. วาดวัตถุทั้งหมดด้วย shader หนึ่ง
  2. เปลี่ยนจาก shader หนึ่งเป็น shader สอง
  3. วาดวัตถุทั้งหมดด้วย shader สอง

ถึงกระนั้นฉันก็รู้ว่ามันไม่ง่ายโดยเฉพาะอย่างยิ่งกับเอฟเฟ็กต์เช่นเอฟเฟ็กต์แสงสำหรับฉากทั้งหมดการเรนเดอร์ไปสู่พื้นผิว ฯลฯ แต่ฉันคิดว่าเราสามารถสันนิษฐานได้ว่า วิธีการ "กลุ่มโดย shader" เป็นสิ่งที่ดีเพราะการเปลี่ยนเฉดสีเป็นการดำเนินการที่มีราคาแพง

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

เกมประเภทนักสืบสามมิติ (และอันใด) ที่แตกต่างกันทางทฤษฎีเกมสมัยใหม่นักสืบสามมิติสำหรับพีซี (DirectX 11 ถ้ามีความสำคัญ) จะใช้งานอย่างไร มันจะเป็น 5, 20 หรือมากกว่าเช่น 100 shaders ที่ใช้งานอยู่นับเฉพาะการใช้งานที่บางเฟรม ""? ฉันรู้ว่ามันไม่ใช่หมายเลขหนึ่ง แต่ฉันสงสัยว่าขนาดและปัจจัยใดที่มีความสำคัญในการพิจารณาสำหรับเกมพีซี


ในเกมตัวอย่างของฉันฉันจะใช้ประมาณ 9-11 ต่อเฟรม (นับว่าแตกต่างกันตัวเล็กหรือตัวหนึ่ง uber-shader - ไม่เป็นไรตอนนี้):

  1. สกินเชดเดอร์
  2. อายแชโดว์ (ไม่มากเกินไปหรือไม่ แต่แตกต่างกัน)
  3. เครื่องตัดโลหะ
  4. เครื่องบดพื้นดิน
  5. หิมะ / ฝนตก (ถ้าจำเป็น)
  6. Water shader (ถ้ามีน้ำอยู่ในฉาก)
  7. Glow shader (เฉพาะบางเทคนิคพิเศษที่เกี่ยวข้อง)
  8. Light emiter shader (โคมไฟถนน ฯลฯ )
  9. Standard shader (สำหรับทั้งหมด, เพียงแรเงามาตรฐาน)
  10. Standard shader พร้อมแผนที่ปกติ
  11. 2D shader (สำหรับ GUI เป็นต้น)

มัน "มาก" หรือ "ไม่มาก"? ฉันลืมเรื่องสำคัญบางอย่างที่ฉันต้องการหรือไม่?

คำตอบ:


28

มันขึ้นอยู่กับเทคนิคจริงๆ ในการแสดงผลไปข้างหน้าคุณมักจะมีหนึ่ง shader สำหรับวัสดุทุกประเภทที่แตกต่างกัน ในเกมที่ใช้เทคนิคนี้มักจะสร้างจาก AAA ตัวเลือกชุดบนวัสดุที่ศิลปินสามารถตั้ง สิ่งนี้สามารถนำไปสู่หลายร้อยเฉดสี (1) แต่ให้บอกโดยทั่วไปว่าจำนวนของเฉดสีอยู่ในลำดับที่ 40

ในการแรเงา / เรนเดอร์ที่เลื่อนออกไปคุณมักจะเข้ารหัสประเภทวัสดุใน G-buffer และต่อมาใช้หนึ่ง shader ขนาดใหญ่เพื่อแสดงประเภทวัสดุที่แตกต่างกันอย่างถูกต้องแตกต่างกัน สิ่งนี้นำไปสู่การน้อยกว่า แต่มีความซับซ้อนมากขึ้น ให้บอกว่าจำนวนผู้มาที่นี่อยู่ในอันดับที่ 5

(1) แหล่งที่มา: ฉันทำงานให้กับผู้รับเหมาของ Crystal Dynamics ที่ฉันสร้างเครื่องมือเพื่อลดจำนวนของเครื่องสร้างที่สร้างขึ้นสำหรับ Tomb Raider เนื่องจากการสร้างอัตโนมัติกำลังออกไปจากมือ;) เป้าหมายคือการลดจำนวนผู้ที่มีความมั่นใจลงไปสู่อันดับที่ 40 หรืออะไรทำนองนั้น


2
ขอบคุณสำหรับคำตอบ - มันค่อนข้างซับซ้อนและสมบูรณ์ ฉันเพิ่งได้รับการโหวต ถึงกระนั้นฉันจะรอไม่กี่วันก่อนที่จะทำเครื่องหมายเพราะมันเป็นคำถามที่ "เปิด" - บางทีคนอื่นอาจจะมีสิ่งที่จะเพิ่มจากประสบการณ์ของตัวเองเช่นกัน อีกครั้งขอบคุณ Roy :)
PolGraphic

s / less / less / ...
ข้อผิดพลาด

3

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

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

แต่โดยทั่วไปแล้วมันจะไม่ส่งผลกระทบต่อจำนวนเฉดสี แต่เป็นเฉดสีที่ฉันใช้สำหรับงานตามเป้าหมายอัตราเฟรมของฉัน

ในความคิดเห็นของฉันเมื่อใช้อย่างถูกต้องจะเพิ่มอัตราเฟรม ฉันมีแอพที่มีเฉดสี 80 อัน แต่มันไม่ได้ใช้ทั้งหมดในเฟรมเดียว - อาจประมาณ 10 และมันรวบรวมมันตามความจำเป็นและทิ้งพวกมันไว้ระหว่างฉาก และในฮาร์ดแวร์ของฉันฉันไม่เห็นอัตราเฟรมเอฟเฟกต์การนับ shader เทคนิคเฉพาะที่ใช้ใน shader แต่แน่นอนฉันคิดว่าการใช้เฉดที่คล้ายกัน 2 อันนั้นดีกว่าสำหรับอัตราเฟรมมากกว่าการมีเฟรมที่ซับซ้อนกว่า

ฉันยังมีเฉดสีที่ลดคุณภาพหากการเรนเดอร์ช้าหรือบนอุปกรณ์ที่ช้ากว่า ฉันใช้การทำแผนที่ปกติบน iPhone 5 แต่เปลี่ยน shader เป็นอันที่ไม่ได้ทำแผนที่ปกติบน iPhone 4

ฉันชอบคำตอบของ Roy และฉันพยายามที่จะเข้าใจถึงวิธีการสร้างเกม "ของจริง" เนื่องจากฉันสอนตัวเองฉันไม่เคยรู้เลยว่าการค้นพบที่ยิ่งใหญ่ของฉันในวันนั้นเป็นเพียงแค่การทำตามปกติหรือยังไม่กี่ก้าวจากมืออาชีพจริง


1
ไม่มีปัญหากับความจริงที่ว่าคำตอบของคุณ "สำหรับ iOS" ฉันพูดเกี่ยวกับพีซีเป็นหลักเพราะฉันต้องการหลีกเลี่ยง "มันขึ้นอยู่กับแพลตฟอร์ม" ตอบสั้น ๆ ;) บางทีคำตอบของคุณอาจไม่ได้ 100% สำหรับฉัน แต่ถึงกระนั้นก็มีข้อสรุปที่ไม่ขึ้นอยู่กับแพลตฟอร์มดังนั้นฉันจึงพบว่ามันดี และสมาชิกคนอื่น ๆ ในชุมชน (ที่ใช้ iOS) อาจพบว่ามีประโยชน์มากยิ่งขึ้นดังนั้นขอขอบคุณและโหวตจากฉัน :)
PolGraphic

1

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

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

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

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