เอ็นจิ้นเกมสมัยใหม่มีวิธีการเรนเดอร์แบบเรียลไทม์อย่างไรกับการเรนเดอร์ที่“ ช้า” ของ Blender?


90

ฉันใหม่ทั้ง gamedev และ Blender และมีบางสิ่งที่ฉันไม่สามารถสั่นได้:

ใน Blender การเรนเดอร์เดี่ยว (แม้แต่การใช้ตัวเรนเดอร์ Cycles ขั้นสูง) อาจใช้เวลาสูงสุด 45 วินาทีในเครื่องของฉัน แต่ในเกมคุณสามารถมีกราฟิกที่น่าทึ่งและการเรนเดอร์ก็เกิดขึ้นอย่างต่อเนื่องหลาย ๆ ครั้งต่อวินาทีในแบบเรียลไทม์

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


3
การเรนเดอร์เรียลไทม์เป็นหัวข้อใหญ่ในตัวเองมีหนังสือมากมายที่เขียนเกี่ยวกับมัน (รวมถึง "การแสดงผลแบบเรียลไทม์") และ renderers เช่น Cycles จะทำงานแตกต่างจาก 3D renderers ใน game engine - คุณไม่สามารถเปรียบเทียบได้
UnholySheep

42
@ UnholySheep แน่นอนคุณสามารถเปรียบเทียบได้ ทุกคนจะอธิบายความแตกต่างเพื่อตอบคำถามได้อย่างไร
user985366

2
@ 10 รายงาน แต่คำถามนี้จะไม่เฉพาะในเว็บไซต์นั้น
GiantCowFilms

3
@ 10 ตอบกลับ: ในขณะที่ OP พูดถึง Blender คำถามเป็นส่วนใหญ่ทำให้ทำไมเอ็นจิ้นเกมแบบเรียลไทม์ดูเหมือนจะแสดงฉาก 3 มิติได้เร็วกว่าโปรแกรมสร้างภาพ 3 มิติที่เหมือนภาพถ่ายจริง (เช่น Blender แต่ยังมีอีกหลายคน) โปรดทราบว่านี่เป็นคำถามที่ตอบโดยคำตอบที่ยอมรับ เมื่อคำนึงถึงสิ่งนี้ฉันเห็นด้วยกับคำถามนี้มากขึ้นในหัวข้อเกี่ยวกับการพัฒนาเกมซึ่งคำถามเกี่ยวกับเทคโนโลยีการพัฒนาเกมทั่วไปสามารถถามได้แทนที่จะเป็นBlenderซึ่งเป็นคำถามที่เฉพาะเจาะจงมากขึ้นสำหรับ Blender โดยเฉพาะ
OR Mapper

3
ฉันเดาว่าความลับที่นี่คือที่น่าอัศจรรย์ไม่จำเป็นต้องแม่นยำ มีการประมาณอย่างรวดเร็วสำหรับคณิตศาสตร์ที่ใช้ในการเรนเดอร์ 3D เช่นInvSqrt
Dmitry Grigoryev

คำตอบ:


115

การเรนเดอร์เรียลไทม์แม้กระทั่งการเรนเดอร์แบบเรียลไทม์สมัยใหม่เป็นกลอุบายทางลัดแฮ็กและการประมาณ

ยกตัวอย่างเช่น

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

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

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


14
อีกจุดที่กล่าวถึงคือจำนวนของการคำนวณที่ใช้ในการสร้างข้อมูลทั้งหมดที่เกมจะต้องแสดงมุมมองของพื้นที่อย่างรวดเร็วอาจเป็นลำดับความสำคัญมากกว่าจำนวนการคำนวณที่จะต้องแสดงมุมมองเดียว หากการแสดงผลมุมมองของพื้นที่จะใช้เวลาหนึ่งวินาทีโดยไม่มีการคำนวณล่วงหน้า แต่ข้อมูลที่มีการคำนวณล่วงหน้าบางอย่างสามารถลดลงไปที่ 1/100 วินาทีการใช้เวลา 20 นาทีในการคำนวณล่วงหน้าอาจมีประโยชน์หากจำเป็นต้องใช้มุมมองในเกมแบบเรียลไทม์ เพียงแค่ต้องการภาพยนตร์ 24fps สิบวินาทีมันจะเร็วกว่าที่จะใช้เวลาสี่นาที ...
supercat

9
... สร้างมุมมองที่จำเป็น 240 ครั้งในอัตราหนึ่งต่อวินาที
supercat

@ supercat และด้วยเหตุนี้การแสดงผลของคุณจึงไม่มีความเร่งรีบและคุณสามารถควบคุมกระบวนการได้มาก คุณสามารถใช้เอ็นจิ้นเกมเพื่อแสดงผล ... หากคุณพร้อมที่จะเสียสละในฟีเจอร์ต่างๆ แต่อย่างที่คุณบอกว่ามันไม่คุ้มค่า
joojaa

ตัวอย่างที่โดดเด่นหนึ่งในนี้ที่ฉันสามารถจำเป็นเครื่องมือเดิม Quake (~ 1996) ซึ่งก็สามารถที่จะประสบความสำเร็จค่อนข้างเหลือเชื่อกราฟิก 3D แบบ real-time ในเครื่องที่ จำกัด มากโดยใช้การรวมกันของมากใช้เวลานานเทคนิคก่อนการคำนวณ ต้นไม้ BSP และเอฟเฟกต์แสงที่แสดงล่วงหน้าถูกสร้างขึ้นล่วงหน้า การออกแบบระดับสำหรับเอ็นจิ้นนั้นโดยทั่วไปจะเกี่ยวข้องกับชั่วโมง (โดยปกติจะข้ามคืน) เพื่อรอให้เครื่องมือรวบรวมแผนที่เสร็จสิ้น การแลกเปลี่ยนเป็นหลักลดเวลาการเรนเดอร์ด้วยค่าใช้จ่ายของเวลาการเขียน
Jason C

(เครื่องยนต์ Doom เดิม [1993] มี precalculations คล้ายมาราธอน. อาจมีเช่นกัน แต่ผมจำไม่ได้ว่าผมจำได้ว่าการสร้างระดับมาราธอน แต่ฉันไม่สามารถจำสิ่งที่มีส่วนเกี่ยวข้อง.)
เจสันซี

109

คำตอบปัจจุบันทำได้ดีมากในการอธิบายปัญหาทั่วไปที่เกี่ยวข้อง แต่ฉันรู้สึกว่ามันขาดรายละเอียดทางเทคนิคที่สำคัญ: เอ็นจิ้นการเรนเดอร์ "Cycles" ของ Blender นั้นเป็นเอ็นจิ้นประเภทต่าง ๆ กับเกมส่วนใหญ่ที่ใช้

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

การแสดงผลรูปหลายเหลี่ยม

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

การแสดงผล Raytracing


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

โปรดทราบว่ามีเทคนิคหลายอย่างที่เกี่ยวข้องกับการเรนเดอร์ 3D และเกมบางเกมใช้เรย์แทรคแบบต่าง ๆ เพื่อวัตถุประสงค์บางอย่าง


3
+1 สำหรับจุดที่ดีมาก ฉันจงใจไม่ได้ลงไปในโพรงกระต่ายของแรลท์เรสติ้งกับแรสเตอร์ไรเซชันดังนั้นมันจึงเป็นเรื่องดีที่ได้รับสิ่งนี้ในฐานะที่เป็นส่วนเสริม
Maximus Minimus

16
คำตอบนี้ได้มากกว่าหัวใจของความแตกต่าง เอ็นจิ้นเกมดำเนินการแรสเตอร์ (ไปข้างหน้าหรือรอการตัดบัญชี) ในขณะที่โหมดเรนเดอร์ออฟไลน์ (เช่น Blender, Renderman เป็นต้น) ทำการติดตามเรย์ สองวิธีที่แตกต่างอย่างสิ้นเชิงในการวาดภาพ
ssell

4
@ LeComteduMerde-fou เนื่องจาก gamedev มุ่งเป้าไปที่นักพัฒนาเกมฉันรู้สึกว่าคำอธิบายทางเทคนิคเพิ่มเติมจะเป็นประโยชน์ต่อผู้อ่านที่มีความโน้มเอียงทางเทคนิคมากกว่า
Pharap

1
@ssell จริง แต่มันไม่ได้เป็นเพียงเกี่ยวกับการติดตามเรย์ - เรย์ได้โดยไม่ต้องติดตามแม้จะมีการแสดงผล GPU, การแสดงผลปั่นมักจะเป็นมากขึ้นและช้าลงรายละเอียด สิ่งนี้ส่วนใหญ่เกี่ยวข้องกับการเน้นความถูกต้อง - การกรองพื้นผิวและความละเอียดที่ดีกว่า, การลดรอยหยัก, แสง, การทำแผนที่เงา, ความแม่นยำ Z, คณะสี่คน, พื้นผิวสองทิศทาง, จำนวนรูปหลายเหลี่ยมขนาดใหญ่, ความละเอียดสูงกว่า การขาดแผนที่ที่คำนวณไว้ล่วงหน้า morphing และจลนศาสตร์ที่แม่นยำ ... มันเป็นรายการที่มีคุณสมบัติมากมายที่เอ็นจิ้นเกมขาดหรือปลอมแปลงผ่านมา
Luaan

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