ความแตกต่างระหว่างการแสดงผลในซอฟต์แวร์ OpenGL และภาพเคลื่อนไหว 3 มิติ


16

ด้วย OpenGL และฉันสามารถทำให้สิ่งที่ดูน่าทึ่งใน "เรียลไทม์" 60 FPS อย่างไรก็ตามถ้าฉันพยายามสร้างวิดีโอของฉากเดียวกันในสมมติว่า Maya หรือ 3ds Max มันจะใช้เวลานานมากในการแสดงผลแม้ว่ามันจะเป็นความละเอียดและ FPS เดียวกันก็ตาม

ทำไมการเรนเดอร์ทั้งสองประเภทนี้จึงใช้ช่วงเวลาต่างกันสำหรับผลลัพธ์เดียวกัน

หมายเหตุ: ใช่ฉันตระหนักดีว่าซอฟต์แวร์แอนิเมชั่นสามมิติสามารถสร้างภาพที่ยอดเยี่ยมสูงถึงสิ่งที่สามารถทำได้ตามเวลาจริง แต่สำหรับคำถามนี้ฉันหมายถึงฉากที่มีความซับซ้อนเท่ากัน


1
คำตอบสั้น ๆ คือ OpenGL ใช้ทางลัด
253751

คำตอบ:


9

แตกต่างที่สำคัญจะเป็นที่ที่มี OpenGL ในสมมติว่าวิดีโอเกมคุณจะมีกระบวนการที่เรียกว่าแรสเตอร์ซึ่งโดยทั่วไปจะดูแลการกำหนดสิ่งที่เป็นส่วนหนึ่งของฉากที่คุณเห็น

ต้องเร็วเพื่อให้เราสามารถสัมผัสได้ในแบบเรียลไทม์

ดังนั้นอัลกอริทึมจึงทำขั้นตอนง่ายๆ

  • ตรวจสอบว่าบางส่วนของฉากอยู่ในมุมมองของฉัน frustum

    Frustum Culling

  • ตรวจสอบว่ามีบางสิ่งอยู่ข้างหน้าซึ่งอาจต้องแสดงผลในภายหลังโดยใช้บัฟเฟอร์ความลึก

    บัฟเฟอร์ความลึก

  • สั่งซื้อวัตถุที่เราพบในการวาด

  • วาดพวกเขาด้วยการฉายบนหน้าจอ
  • แรเงาพวกเขาขึ้นอยู่กับพื้นผิว / เฉดสี / ไฟ / ...

ในทางกลับกันซอฟต์แวร์การเรนเดอร์ (Blender / Max / Maya / ... ) มักใช้raytracingบางชนิด

สิ่งนี้เกี่ยวข้องกับคณิตศาสตร์มากขึ้นเพื่อให้ได้ระดับความสมจริงที่สูงขึ้น มันใช้งานได้ในลักษณะเดียวกัน:

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

....

ฉันจะหยุดรายการที่นี่เนื่องจากเป็นจุดที่ raytracing จะปิด

แทนที่จะตรวจสอบเฉพาะถ้ามีการตีจุด raytracer ส่วนใหญ่ตอนนี้เริ่มคำนวณ:

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

มีเทคนิคมากมายที่มีองศาความสมจริงที่แตกต่างกันซึ่งสามารถใช้ในการคำนวณแสงของจุดหนึ่งในฉาก

TL; DR ส่วนสำคัญคือ raytracer ส่วนใหญ่พยายามที่จะมีความถูกต้องทางร่างกายเมื่อมันมาถึงแสงและดังนั้นจึงมีการคำนวณอีกมากที่จะทำต่อพิกเซล การวาดชิ้นส่วนของหน้าจอที่ใหญ่ขึ้นด้วยการคำนวณแสงที่ง่ายขึ้นและเทคนิค shader มากมายที่ให้ภาพสมจริง


7

คุณกำลังเปรียบเทียบแอปเปิ้ลกับส้ม

เกมดังกล่าวเป็นเหมือนพอร์ตมุมมองในแอปจำลองของคุณ คุณสามารถใช้วิวพอร์ตเพื่อแสดงผลและคุณจะได้ความเร็ว 60fps ที่เท่ากัน

ไม่มีเหตุผลใดที่คุณไม่สามารถรับกราฟิกแบบเรียลไทม์ที่ดีมากจากซอฟต์แวร์การสร้างแบบจำลองเช่น Maya หรือ 3DS Max ผลลัพธ์ที่เสมอกับเกมมากมาย พวกเขามีวิวพอร์ตแชร์เดอร์เหมือนกับเกม นอกจากนี้ยังมีตัวเลือกการแสดงผลวิวพอร์ตที่เปลี่ยนเฟรมเป็นดิสก์ได้เร็วเท่าที่อนุญาต สิ่งที่คุณต้องทำคือหยุดใช้ raytracers ซอฟต์แวร์ที่ให้ไว้

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

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

ทำไม raytracers จึงช้ากว่า

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

  1. การส่งข้อมูลไปยังดิสก์ไม่ใช่แค่เฟรม แต่เป็นข้อมูลทั้งหมด บางสิ่งบางอย่างที่จะทำลายเกมความเร็วส่วนใหญ่ทันที

  2. ทำงานกับฮาร์ดแวร์ทั่วไป GPU เร็วขึ้นมากสำหรับบางสิ่งเมื่อคุณปรับแต่ง GPU แต่มันไม่สามารถใช้งานได้สำหรับการโหลดทั้งหมดอันที่จริงแล้ว CPU ของ Intel นั้นเร็วกว่าการคำนวณโดยทั่วไปมากกว่า GPU GPU นั้นขนานกันอย่างหนาแน่นซึ่ง CPU นั้นไม่ได้เป็น สถาปัตยกรรมชนะถ้าคุณสามารถอยู่ใน GPU และลดการถ่ายโอนและเพิ่มประสิทธิภาพสำหรับสถาปัตยกรรม GPU

ดังนั้นคุณต้องจ่ายเพื่อความยืดหยุ่นและใช้งานง่าย แต่ใช่ไม่ยอมรับทั้งมายาและแม็กซ์ต้องทนทุกข์ทรมานจากอายุมาก ดังนั้นพวกเขาจึงอาจเร็วขึ้น

TL; DRความแตกต่างส่วนใหญ่เป็นการปรับให้เหมาะสม (อ่านลูกเล่นมากมาย) และทรัพยากรภายนอกที่มีอยู่

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

* ดูhttp://www.graphics.cornell.edu/~bjw/mca.pdf


2
ขออภัย แต่มันผิดธรรมดา OpenGL และ DirectX ใช้การประมาณค่าซึ่งเร็วกว่า raytracing อย่างแม่นยำ จุดรวมของกราฟิก 3D เร่งความเร็วคือการมีอัลกอริธึมที่สมดุลระหว่างความสมจริงและความเร็วดูดีพอสำหรับการใช้งานจริงส่วนใหญ่: การเล่นเกม CAD ฯลฯ
IMil

2
@IMil OpenGL สามารถใช้สำหรับ raytracing มันเร็วขึ้นเพราะมันเหมาะสำหรับฮาร์ดแวร์ที่เป็นปัญหา แต่มายาไม่จำเป็นต้องทำการเรย์ร่องรอย Maya และ Max สามารถใช้ openGL และ directX ได้มากเท่ากับเกมของคุณ วิวพอร์ตมายา (และ 3ds) คือ opengl หรือ directX (ตัวเลือกของคุณ) ความจริงที่ว่าตัวประมวลผลของคุณช้ากว่าในการประมวลผลแบบขนานบางอย่างก็เป็นอีกเรื่อง ดังนั้นคำตอบคือ การตั้งค่ามาตรฐานของ maya นั้นไม่เหมือนจริงกว่า scanline มาตรฐาน
joojaa

5

ดูตัวอย่างแบบเรียลไทม์

ทำงานในด้าน VFX ของอุตสาหกรรมหากคุณกำลังพูดถึงตัวอย่างพอร์ตวิวพอร์ตแบบเรียลไทม์และไม่แสดงผลการผลิตดังนั้น Maya และ 3DS Max มักใช้ OpenGL (หรืออาจเป็น DirectX - เหมือนกันมาก)

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

การแสดงผลการผลิตและการติดตามเส้นทาง

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

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

เนื้อหา

กลับมาที่หัวข้อนี้สมมติฐานของเนื้อหาระหว่างซอฟต์แวร์ VFX และเกมต่างกันอย่างสิ้นเชิง จุดสนใจหลักของซอฟต์แวร์ VFX คือการอนุญาตให้สร้างเนื้อหาประเภทใด ๆ ที่เป็นไปได้ (อย่างน้อยก็เหมาะอย่างยิ่งแม้ว่าในทางปฏิบัติแล้วมักจะไม่ได้อยู่ใกล้) เกมเน้นเนื้อหาที่มีสมมติฐานที่หนักกว่า (ทุกรุ่นควรอยู่ในช่วงสามเหลี่ยมหลายพันแผนที่ปกติควรใช้กับรายละเอียดปลอมเราไม่ควรมีอนุภาคประมาณ 13 พันล้านตัวอักษรไม่เคลื่อนไหวโดยกล้ามเนื้อจริง ๆ แท่นขุดและแผนที่ความตึงเครียด ฯลฯ )

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

เกมทำมันให้ดีขึ้น

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

ในทางกลับกันซอฟต์แวร์ VFX และ CAD นั้นแทบจะไม่มีกำไรเลย การวิจัยและพัฒนามักจะได้รับการว่าจ้างจากนักวิจัยที่ทำงานในสถานศึกษาด้วยอุตสาหกรรมจำนวนมากมักใช้เทคนิคการตีพิมพ์เมื่อหลายปีก่อนราวกับว่ามันเป็นสิ่งใหม่ ดังนั้นซอฟต์แวร์ VFX ที่มาจาก บริษัท ใหญ่ ๆ อย่าง AutoDesk มักจะไม่ค่อยเป็น "เกมที่ทันสมัย" ในฐานะเครื่องมือเกม AAA ล่าสุด

พวกเขายังมีแนวโน้มที่จะได้รับมรดกอีกต่อไป Maya เป็นผลิตภัณฑ์อายุ 17 ปีเช่น มันได้รับการตกแต่งใหม่มากมาย แต่สถาปัตยกรรมหลักยังคงเหมือนเดิม สิ่งนี้อาจคล้ายคลึงกับการพยายามใช้ Quake 2 และทำการอัปเดตและอัปเดตตลอดจนถึงปี 2558 ความพยายามนั้นยอดเยี่ยม แต่อาจจะไม่ตรงกับ Unreal Engine 4

TL; DR

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


มันยังเป็นคำถามของเวลา แม้ว่าคุณจะสามารถแสดงผลได้ที่ 60 fps และรับผลลัพธ์ที่ยอมรับได้ แต่ก็แทบจะไม่สามารถปรับให้เหมาะสมได้ สมมติว่าใช้เวลา 3 นาทีต่อเฟรมและคุณมี 200 เฟรมที่จะเรนเดอร์ คุณอาจได้รับ 60 fps โดยการจ้างนักเขียน shader และโดยการปรับให้เหมาะสม แต่อย่างน้อยก็ใช้เวลาหนึ่งหรือสองวัน แต่ 200 เฟรมที่ 3 นาทีใช้เวลาเพียง 10 ชั่วโมงดังนั้นคุณจึงประหยัดค่าใช้จ่าย ในทางปฏิบัติมันถูกกว่าที่จะซื้อฮาร์ดแวร์มากขึ้นและไม่ต้องกังวลกับมันมากเกินไป เกมไม่สามารถใช้แนวทางนี้ได้
joojaa

@joojaa มันก็ซับซ้อนกว่านิดหน่อย เพียงแค่ทำเฉดสีเรียลไทม์ที่ดีจริงๆสำหรับ Maya อาจใช้เวลาหนึ่งปีหรืออย่างน้อยก็มากแม้แต่จากนักพัฒนา shader ที่มีประสบการณ์ (ด้วยกำไรที่น้อยกว่า) เนื่องจากความยืดหยุ่นของระบบปมที่มีเป้าหมายต่อการสร้างการผลิต มันต้องใช้ความคิดทางวิศวกรรมย้อนกลับและเทคนิคการสร้างโค้ด GLSL / HLSL ชนิดใหม่ (เช่นระบบการเขียนโปรแกรมเมตา) เพื่อแปลโหนด shader ที่ใช้งานทั่วไปเหล่านี้ให้เป็นระบบการแรเงาแบบเรียลไทม์ที่รวบรวมช่วงของเอฟ 4 เช่น
Dragon Energy

เอ็นจิน shader ของ @joojaa UE 4 มีการกำหนดเป้าหมายโดยตรงไปยังแนวคิด PBR ที่มีการประมาณไว้อย่างหนัก (ชุดย่อยเล็ก ๆ ของ PBR shader ของ Disney) พวกเขาออกแบบแม้กระทั่งระบบวัสดุของพวกเขาเพื่อวัตถุประสงค์ที่รวดเร็วและเรียลไทม์แทนที่จะเริ่มต้นด้วยบางสิ่งบางอย่างเช่นระบบวัสดุของ Maya ซึ่งไม่ได้เป็นอะไรเลย แม้ว่าความสว่างที่สุดของ UE 4 จะทำงานบน VP 2.0 พวกเขาจะต้องทำงานทั้งกลางวันและกลางคืนเป็นเวลาหลายปีเพื่อให้ได้ผลลัพธ์เดียวกันกับการออกแบบที่ไม่ได้ตั้งใจจะทำสิ่งนี้
Dragon Energy

แต่นั่นเป็นค่าใช้จ่ายเพียงครั้งเดียวแม้ว่าคุณจะมีขั้นตอนนั้นในแอพ VFX ในแต่ละฉากอาจต้องใช้การเพิ่มประสิทธิภาพพิเศษนั้น ไม่มีเหตุผลใดที่ผู้ใช้มายาไม่สามารถแสดงผลใน UDK ได้เช่นแพลตฟอร์ม shader dev เดียวกัน
joojaa

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