มีเหตุผลใดที่จะชอบ Direct3D เหนือ OpenGL ไหม


11

ดังนั้นฉันจึงอ่านสิ่งนี้ฉันได้รับเหตุผลว่าทำไมมีเกมบน Microsoft Windows มากกว่าในระบบปฏิบัติการอื่น ๆ ปัญหาหลักที่นำเสนอคือ Direct3D เป็นที่ต้องการมากกว่า OpenGL

สิ่งที่ฉันไม่เข้าใจคือสาเหตุที่นักพัฒนาซอฟต์แวร์ใดจะเสียสละความเข้ากันได้ นั่นเป็นเพียงความสูญเสียทางการเงินของ บริษัท ฉันเข้าใจว่า OpenGL เป็นระเบียบ แต่ไม่ค่อยน่าจะเป็นปัญหาสำหรับผู้เชี่ยวชาญ แม้ว่ามันจะเป็นไปได้ก็ตามฉันคิดว่าผู้คนจะไปได้ไกลกว่าที่จะได้รับความเสียหายทางการเงิน

นอกจากนี้ถ้าฉันไม่ผิดแล้วแอพพลิเคชั่นข้ามแพลตฟอร์มจำนวนมากใช้ทั้ง Direct3D และ OpenGL ฉันคิดว่าพวกเขาสลับไปมาระหว่าง API

นี่เป็นเรื่องแปลกเพราะพวกเขาสามารถใช้ OpenGL ได้ทำไมถึงสนใจ Direct3D?

ดังนั้นคำถามคือมีปัญหาทางเทคนิคกับ OpenGL หรือมีการสนับสนุนใด ๆ ที่ Direct3D ให้ OpenGL นั้นขาดหรือไม่


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


คุณกำลังมองหาบางอย่างที่แตกต่างจากนี้หรือไม่?
trichoplax

2
BTW ฉันตอบคำถามที่คล้ายกันใน GameDev.SEสองสามปีที่ผ่านมา
นาธานรีด

1
นี่เป็นบทเรียนที่ดีของประวัติศาสตร์ที่ sorta ตอบคำถามของคุณ: programmers.stackexchange.com/questions/60544/…
darius

1
@NathanReed "ดังนั้นเป็นไปได้ที่เราจะเห็นการแกว่งกลับไปสู่ผู้พัฒนาหลายแพลตฟอร์มโดยใช้ OpenGL บน Windows" และตอนนี้ 3 ปีต่อมาคุณจะบอกว่าสิ่งนี้เกิดขึ้น?
Rotem

2
@Remem ฉันไม่คิดอย่างนั้นไม่ OGL (และตอนนี้ Vulkan) ในวันนี้ดีกว่าในการรักษาความเท่าเทียมกันของฟีเจอร์ด้วย D3D มากกว่าเดิม แต่ AFAICT ผู้จำหน่าย GPU ยังคงจัดลำดับความสำคัญของไดรเวอร์ D3D สำหรับการแก้ไขข้อบกพร่องและการปรับปรุงที่สมบูรณ์แบบ ข้อยกเว้นที่น่าสังเกตคือเอ็นจิ้น idTechซึ่งทั้งหมดใช้ OGL บน Windows
นาธานรีด

คำตอบ:


9

เกี่ยวกับความจริงที่ว่ามีเกมมากขึ้นสำหรับ Windows ด้วยเหตุผลบางประการ

  1. Windows มีตลาดส่วนใหญ่และในอดีตในการพัฒนาเกมข้ามแพลตฟอร์มมีความซับซ้อนมากกว่าในทุกวันนี้
  2. DirectX มาพร้อมกับเครื่องมือที่ดีกว่าสำหรับการพัฒนา (เช่นการดีบัก)
  3. โดยทั่วไปแล้วนวัตกรรมที่ยิ่งใหญ่มักจะสร้าง / นำไปใช้ใน DirectX ก่อนแล้วจึงส่งไปยัง / นำไปใช้ใน OpenGL
  4. สำหรับ Windows vs Linux คุณต้องพิจารณาว่าเมื่อมีมาตรฐานจริงเนื่องจากการตลาดและเหตุผลทางประวัติศาสตร์ (เพื่อดูว่าทำไมนักพัฒนาเกมถึงชอบ Windows? | วิศวกรรมซอฟต์แวร์ตามที่ฉันพูดในความคิดเห็น) มันมีความเฉื่อย .

สิ่งความเฉื่อยนั้นสำคัญมาก หากทีมของคุณพัฒนาสำหรับ DirectX กำหนดเป้าหมาย 90% ของตลาด (ถ้าคุณเล่นเกมบนพีซีคุณอาจมีหน้าต่างดังนั้น ... 99% ของตลาด) ทำไมคุณถึงต้องการลงทุนใน OpenGL หากคุณพัฒนาใน OpenGL แล้วและตั้งเป้าหมายที่ 99% ของตลาดคุณจะยึดมั่นกับมันตราบเท่าที่คุณทำได้ สำหรับ exampe Id Tech โดย Id Software เป็นเอ็นจิ้นเกมที่ยอดเยี่ยม (เปิดตัวซีรี่ส์ DOOM) ที่ใช้ OpenGL

เกี่ยวกับหัวข้อการสนทนาของคุณแสดงความคิดเห็น

ณ วันนี้มี API จำนวนมากและการปฏิบัติทั่วไปคือการใช้ Game Engine ที่เป็นนามธรรมเหนือพวกเขา ตัวอย่างเช่นพิจารณาว่า

  • บนแพลตฟอร์มมือถือส่วนใหญ่คุณต้องใช้ OpenGl ES
  • บนพีซีคุณสามารถใช้ทั้ง DirectX และ OpenGL
  • ฉันคิดว่าใน XBOX คุณต้องใช้ DirectX
  • ฉันคิดว่าใน PS คุณใช้ API ของตัวเอง
  • ด้วยฮาร์ดแวร์เก่าคุณใช้ DirectX9 หรือ OpenGL 3 หรือ OpenGL ES 2
  • ด้วยฮาร์ดแวร์ล่าสุดคุณสามารถ (และต้องการ) ใช้ DirectX 11, OpenGL 4, OpenGL ES 3

เมื่อเร็ว ๆ นี้ด้วยการถือกำเนิดของค่าโสหุ้ยต่ำใหม่ API - whch เป็นจุดเปลี่ยนที่สำคัญสำหรับการเขียนโปรแกรมกราฟิก - มี DirectX 12 สำหรับ Windows และ XBOX, โลหะสำหรับ iOS และ Vulkan (OpenGL ใหม่) สำหรับ Windows และ Linux (รวมถึง Android และ Tizen )

ยังมีเกมที่กำหนดเป้าหมายไปที่ Windows และ XBOX เท่านั้น แต่ IMHO วันนี้สามารถเป็นทางเลือกทางการตลาดเท่านั้น


ดังนั้นจึงไม่มีเหตุผลด้านประสิทธิภาพในการเลือกใช้ Direct3D?
A --- B

@ritwik sinha DirectX 11 ได้รับการสนับสนุนที่ดีกว่าสำหรับการเรนเดอร์แบบมัลติเธรดมากกว่า OpenGL 4 แต่สำหรับความรู้ของฉันที่ไม่ได้ส่งผลให้ประสิทธิภาพของ realt แตกต่างกัน ในทางตรงกันข้ามการเปรียบเทียบ Windows กับ DirectX 11 และ Linux กับ OpenGL 4 ผู้ชนะคือ Linux กับ OpenGL เกี่ยวกับ DirectX 12 กับ Vulkan ฉันคิดว่ามันเร็วเกินไปที่จะรู้ แต่ฉันไม่รู้
darius

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

1
@ritwik sinha แอปพลิเคชั่นของการทำเธรดหลายแบบให้กับกราฟิกแบบเรียลไทม์คือคุณสามารถใช้เธรดที่แตกต่างเพื่อจัดสรร resoruces ในพื้นหลัง (การสตรีมพื้นผิว, บัฟเฟอร์ที่จุดสุดยอด), สิ่งนี้อาจเป็นไปได้ใน OpenGL แต่มีความยุ่งยากมาก ใน DirectX 11 คุณสามารถโทรออกได้จากหลายเธรดซึ่งควรปรับปรุงประสิทธิภาพ แต่นั่นไม่ใช่วิธีปฏิบัติทั่วไป ฉันคิดว่า UnrealEngine4 รุ่นล่าสุดทำเช่นนั้น อย่างไรก็ตามด้วย DirectX 12 และ Vulkan การแสดงผลหลายเธรดจะเป็นเรื่องจริง
darius

1

เหตุผลสองประการที่เป็นไปได้:

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