อ่าน 31 นาที
ไดเร็กต์3ดี
Direct3D เป็น อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน กราฟิก (API) สำหรับ Microsoft Windows ซึ่งเป็นส่วนหนึ่งของ DirectX Direct3D ใช้ในการเรนเดอร์ กราฟิกสามมิติ...
ไดเร็กต์3ดี
| ไดเร็กต์3ดี | |
|---|---|
| นักพัฒนา | ไมโครซอฟต์ |
| ปล่อย | 2 มิถุนายน 2539 |
| เวอร์ชันเสถียร | 12.0 เบต้า 3 / 13 มกราคม 2558 |
| ระบบปฏิบัติการ | ระบบปฏิบัติการ Microsoft Windows , Windows CE , Windows Mobile , Windows Phone , Windows Embedded , ซอฟต์แวร์ระบบ Xbox |
| แพลตฟอร์ม | x86 , ARM |
| พิมพ์ | API กราฟิกคอมพิวเตอร์ 3 มิติ |
| ใบอนุญาต | กรรมสิทธิ์ |
| เว็บไซต์ | เรียนรู้ . |
Direct3Dเป็นอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน กราฟิก (API) สำหรับMicrosoft Windowsซึ่งเป็นส่วนหนึ่งของDirectX Direct3D ใช้ในการเรนเดอร์กราฟิกสามมิติในแอปพลิเคชันที่ประสิทธิภาพมีความสำคัญ เช่น เกม Direct3D ใช้การเร่งความเร็วฮาร์ดแวร์หากมีอยู่ในการ์ดกราฟิก ทำให้สามารถเร่งความเร็วฮาร์ดแวร์ของ ไปป์ไลน์การเรนเดอร์ 3 มิติทั้งหมดหรือแม้แต่การเร่งความเร็วเพียงบางส่วนได้ Direct3D เปิดเผยความสามารถด้านกราฟิกขั้นสูงของฮาร์ดแวร์กราฟิก 3 มิติ รวมถึงZ-buffering [ 1 ] W -buffering [ 2 ] stencil buffering , spatial anti-aliasing , alpha blending , color blending, mipmapping , texture blending [ 3 ] [ 4 ] clipping , culling , atmospheric effects, perspective-correct texture mapping , programmable HLSL shaders [ 5 ]และ effects [ 6 ]การบูรณาการกับเทคโนโลยี DirectX อื่นๆ ช่วยให้ Direct3D สามารถนำเสนอคุณสมบัติต่างๆ เช่น การแมปวิดีโอ การเรนเดอร์ 3 มิติด้วยฮาร์ดแวร์ใน ระนาบ โอเวอร์เลย์ 2 มิติ และแม้กระทั่งสไปรท์ซึ่งช่วยให้สามารถใช้กราฟิก 2 มิติและ 3 มิติในสื่อโต้ตอบได้
Direct3D มีคำสั่งมากมายสำหรับ การเรนเดอร์ กราฟิกคอมพิวเตอร์ 3 มิติอย่างไรก็ตาม ตั้งแต่เวอร์ชัน 8 เป็นต้นมา Direct3D ได้เข้ามาแทนที่ เฟรมเวิร์ก DirectDrawและยังรับผิดชอบในการเรนเดอร์กราฟิก 2 มิติด้วย[ 7 ] Microsoft พยายามอย่างต่อเนื่องที่จะอัปเดต Direct3D เพื่อรองรับเทคโนโลยีล่าสุดที่มีอยู่ในกราฟิกการ์ด 3 มิติ Direct3D มีการจำลอง ซอฟต์แวร์เวอร์เท็กซ์แบบเต็มรูปแบบ แต่ไม่มีการจำลองซอฟต์แวร์พิกเซลสำหรับคุณสมบัติที่ไม่มีในฮาร์ดแวร์ ตัวอย่างเช่น หากซอฟต์แวร์ที่เขียนโปรแกรมโดยใช้ Direct3D ต้องการพิกเซลเชเดอร์และการ์ดวิดีโอในคอมพิวเตอร์ของผู้ใช้ไม่รองรับคุณสมบัตินั้น Direct3D จะไม่จำลอง แต่จะคำนวณและเรนเดอร์โพลีกอนและพื้นผิวของโมเดล 3 มิติ แม้ว่าคุณภาพและประสิทธิภาพโดยทั่วไปจะลดลงเมื่อเทียบกับฮาร์ดแวร์ที่เทียบเท่ากันก็ตาม API มีReference Rasterizer (หรืออุปกรณ์ REF) ซึ่งจำลองกราฟิกการ์ดทั่วไปในซอฟต์แวร์ แม้ว่าจะช้าเกินไปสำหรับแอปพลิเคชัน 3 มิติแบบเรียลไทม์ส่วนใหญ่ และโดยทั่วไปจะใช้สำหรับการดีบักเท่านั้นWARPซึ่งเป็นซอฟต์แวร์แรสเตอร์ไรเซอร์แบบเรียลไทม์ตัวใหม่ออกแบบมาเพื่อจำลองชุดคุณสมบัติทั้งหมดของ Direct3D 10.1 รวมอยู่ในWindows 7และWindows Vista Service Pack 2พร้อมกับการอัปเดตแพลตฟอร์ม ประสิทธิภาพของมันกล่าวกันว่าเทียบเท่ากับการ์ด 3 มิติระดับล่างบนซีพียูแบบมัลติคอร์[ 8 ]
Direct3D เป็นส่วนหนึ่งของDirectXซึ่งใช้งานได้ในWindows 95ขึ้นไป และเป็นพื้นฐานสำหรับ API กราฟิกเวกเตอร์ ใน ระบบคอนโซลXboxรุ่นต่างๆWineซึ่งเป็นซอฟต์แวร์โอเพนซอร์สที่นำ API ของ Windows หลายตัวมาใช้งานใหม่ ก็มีการใช้งาน Direct3D รวมอยู่ด้วย
คู่แข่งหลักของ Direct3D คือOpenGL ของ Khronos และ Vulkanซึ่งเป็นรุ่นต่อยอดFahrenheit เป็นความพยายามของ Microsoft และSGIในการรวม OpenGL และ Direct3D เข้าด้วยกันในช่วงทศวรรษ 1990 แต่ในที่สุดก็ถูกยกเลิกไป
ภาพรวม
- Direct3D 6.0 – การสร้างพื้นผิวหลายชั้น
- Direct3D 7.0 – การแปลงภาพด้วยฮาร์ดแวร์ การตัดภาพ และการจัดแสง (TCL/T&L), DXVA 1.0
- Direct3D 8.0 – Pixel Shader 1.0/1.1 และ Vertex Shader 1.0/1.1 [ 9 ]
- Direct3D 8.1 – Pixel Shader 1.2/1.3/1.4 [ 10 ] [ 11 ] [ 12 ]
- Direct3D 9.0 – Shader Model 2.0 (Pixel Shader 2.0 และ Vertex Shader 2.0)
- Direct3D 9.0a – Shader Model 2.0a (Pixel Shader 2.0a และ Vertex Shader 2.0a)
- Direct3D 9.0b – Pixel Shader 2.0b, H.264
- Direct3D 9.0c – เวอร์ชันสุดท้ายที่รองรับสำหรับWindows 98 / ME (รุ่นแรกๆ) [ 13 ]และสำหรับWindows 2000 / XP (ทุกรุ่น); [ 14 ] Shader Model 3.0 (Pixel Shader 3.0 และ Vertex Shader 3.0)
- Direct3D 9Ex – สำหรับ Windows Vistaเท่านั้น; Direct3D 9.0c, Shader Model 3.0, Windows Graphics Foundation 1.0, GPGPU , DXVA 2.0
- Direct3D 10.0 – Windows Vista/Windows 7; Shader Model 4.0 , Windows Graphics Foundation 2.0
- Direct3D 10.1 – Windows Vista SP1/Windows 7; Shader Model 4.1, Windows Graphics Foundation 2.1
- Direct3D 11.0 – Windows Vista SP2/ Windows 7 ; Shader Model 5.0, Tessellation, การเรนเดอร์แบบมัลติเธรด, Compute shadersซึ่งใช้งานโดยฮาร์ดแวร์และซอฟต์แวร์ที่ทำงานบน Direct3D 9/10/10.1
- Direct3D 11.1 – Windows 8 (รองรับบางส่วนบน Windows 7 SP1 ด้วย); การเรนเดอร์ภาพ 3 มิติแบบสเตอริโอสโคปิก, H.265
- Direct3D 11.2 – Windows 8.1 ; ทรัพยากรแบบเรียงต่อกัน
- Direct3D 11.3 – Windows 10
- Direct3D 12.0 – Windows 10 ; API การเรนเดอร์ ระดับต่ำ, Shader Model 5.1 และ 6.0
- Direct3D 12.1 – Windows 10; DirectX Raytracing
- Direct3D 12.2 – Windows 10; DirectX 12 Ultimate
Direct3D 2.0 และ 3.0
ในปี พ.ศ. 2535 Servan Keondjian, Doug Rabson และ Kate Seekings ได้ก่อตั้งบริษัทชื่อ RenderMorphics ซึ่งพัฒนา API กราฟิก 3 มิติชื่อReality Labซึ่งใช้ในซอฟต์แวร์การสร้างภาพทางการแพทย์และ CAD [ 15 ] มีการเปิดตัว API นี้สองเวอร์ชัน[ 16 ] Microsoft ซื้อ RenderMorphics ในเดือนกุมภาพันธ์ พ.ศ. 2538 และนำพนักงานของบริษัทมาร่วมงานเพื่อพัฒนาเอ็นจิ้นกราฟิก 3 มิติสำหรับWindows 95 [ 17 ] Direct3Dเวอร์ชันแรกถูกวางจำหน่ายในDirectX 2.0 (2 มิถุนายน พ.ศ. 2539) และDirectX 3.0 (26 กันยายน พ.ศ. 2539)
Direct3D เริ่มแรกได้นำ API 3 มิติแบบ " โหมดทันที " มาใช้ และวางซ้อนAPI 3 มิติ แบบ " โหมดเก็บรักษา " ไว้ [ 18 ] API ทั้งสองประเภทนี้มีให้ใช้งานแล้วใน Reality Lab เวอร์ชันที่สองก่อนที่ Direct3D จะเปิดตัว[ 16 ]เช่นเดียวกับ API อื่นๆ ของ DirectX เช่นDirectDrawทั้งสองแบบใช้COM เป็นพื้นฐาน API โหมดเก็บรักษาเป็น API กราฟฉากที่ไม่ค่อยได้รับความนิยม นักพัฒนาเกมต่างต้องการการควบคุมกิจกรรมของฮาร์ดแวร์โดยตรงมากกว่าที่โหมดเก็บรักษาของ Direct3D สามารถให้ได้ มีเพียงสองเกมที่มียอดขายจำนวนมาก ได้แก่Lego IslandและLego Rock Raidersที่ใช้โหมดเก็บรักษาของ Direct3D ดังนั้น Microsoft จึงไม่ได้อัปเดต API โหมดเก็บรักษาหลังจาก DirectX 3.0
สำหรับ DirectX 2.0 และ 3.0 โหมดทันทีของ Direct3D ใช้โมเดลการเขียนโปรแกรม "execute buffer" ซึ่ง Microsoft หวังว่าผู้ผลิตฮาร์ดแวร์จะสนับสนุนโดยตรง Execute buffer มีจุดประสงค์เพื่อจัดสรรในหน่วยความจำฮาร์ดแวร์และประมวลผลโดยฮาร์ดแวร์เพื่อทำการเรนเดอร์ 3 มิติ อย่างไรก็ตาม ในขณะนั้นการเขียนโปรแกรมสำหรับ execute buffer นั้นค่อนข้างยุ่งยาก ทำให้การนำ API ใหม่มาใช้เป็นไปได้ยาก และกระตุ้นให้มีการเรียกร้องให้ Microsoft นำ OpenGL มาใช้เป็น API การเรนเดอร์ 3 มิติอย่างเป็นทางการสำหรับเกมและแอปพลิเคชันเวิร์กสเตชันด้วย[ 19 ]
แทนที่จะนำ OpenGL มาใช้เป็น API สำหรับเกม ไมโครซอฟต์เลือกที่จะพัฒนา Direct3D ต่อไป ไม่เพียงแต่เพื่อให้สามารถแข่งขันกับ OpenGL ได้เท่านั้น แต่ยังเพื่อแข่งขันได้อย่างมีประสิทธิภาพมากขึ้นกับ API กรรมสิทธิ์อื่นๆ เช่นGlideของ3dfxอีกด้วย
ตั้งแต่เริ่มต้น โหมดทันทีก็รองรับการเรนเดอร์แบบเรียงไทล์ของTalismanด้วยวิธีการ BeginScene/EndScene ของอินเทอร์เฟซ IDirect3DDevice ด้วยเช่นกัน
Direct3D 4.0
ไม่มีการวางแผนการเปลี่ยนแปลงที่สำคัญใดๆ สำหรับ Direct3D สำหรับDirectX 4.0ซึ่งมีกำหนดวางจำหน่ายในช่วงปลายปี 1996 แล้วถูกยกเลิก[ 20 ]
Direct3D 5.0
ในเดือนธันวาคม พ.ศ. 2539 ทีมงานในเรดมอนด์ได้เข้ามารับช่วงการพัฒนา Direct3D Immediate Mode ในขณะที่ทีม RenderMorphics ในลอนดอนยังคงทำงานต่อใน Retained Mode ทีมงานเรดมอนด์ได้เพิ่ม API DrawPrimitive ซึ่งช่วยขจัดความจำเป็นที่แอปพลิเคชันจะต้องสร้าง execute buffer ทำให้ Direct3D มีลักษณะคล้ายกับ API การเรนเดอร์แบบ Immediate Mode อื่นๆ เช่นGlideและOpenGL มากขึ้น เบต้าแรกของ DrawPrimitive เปิดตัวในเดือนกุมภาพันธ์ พ.ศ. 2540 [ 21 ]และเวอร์ชันสุดท้ายเปิดตัวพร้อมกับDirectX 5.0ในเดือนสิงหาคม พ.ศ. 2540 [ 22 ]
นอกจากการแนะนำ API โหมดทันทีที่ใช้งานง่ายกว่าแล้ว DirectX 5.0 ยังเพิ่มเมธอด SetRenderTarget ที่ช่วยให้อุปกรณ์ Direct3D สามารถเขียนเอาต์พุตกราฟิกไปยังพื้นผิว DirectDraw ที่หลากหลายได้[ 23 ]
Direct3D 6.0
DirectX 6.0 (วางจำหน่ายในเดือนสิงหาคม พ.ศ. 2541) ได้นำเสนอคุณสมบัติมากมายเพื่อรองรับฮาร์ดแวร์ร่วมสมัย (เช่นมัลติเท็กซ์เจอร์[ 24 ]และบัฟเฟอร์สเตนซิล ) รวมถึงไปป์ไลน์เรขาคณิต ที่ได้รับการปรับให้เหมาะสม สำหรับx87 , SSEและ3DNow!และการจัดการเท็กซ์เจอร์แบบเลือกได้เพื่อลดความซับซ้อนในการเขียนโปรแกรม[ 25 ] Direct3D 6.0 ยังรวมถึงการสนับสนุนคุณสมบัติที่ได้รับอนุญาตจาก Microsoft จากผู้จำหน่ายฮาร์ดแวร์เฉพาะรายเพื่อรวมไว้ใน API โดยแลกกับข้อได้เปรียบด้านเวลาในการวางจำหน่ายสำหรับผู้จำหน่ายที่ได้รับอนุญาต การสนับสนุน การบีบอัดเท็กซ์เจอร์ S3เป็นหนึ่งในคุณสมบัติดังกล่าว ซึ่งเปลี่ยนชื่อเป็น DXTC เพื่อวัตถุประสงค์ในการรวมไว้ใน API อีกประการหนึ่งคือ เทคนิค การแมปแบบบัมพ์ ที่เป็นกรรมสิทธิ์ของ TriTech Microsoft ได้รวมคุณสมบัติเหล่านี้ไว้ใน DirectX จากนั้นเพิ่มคุณสมบัติเหล่านี้ลงในข้อกำหนดที่จำเป็นสำหรับไดรเวอร์เพื่อให้ได้รับโลโก้ Windowsเพื่อส่งเสริมการนำคุณสมบัติเหล่านี้ไปใช้อย่างกว้างขวางในฮาร์ดแวร์ของผู้จำหน่ายรายอื่น
การอัปเดตเล็กน้อยของDirectX 6.0เกิดขึ้นในการอัปเดต DirectX 6.1 ในเดือนกุมภาพันธ์ พ.ศ. 2542 นอกจากการเพิ่ม การสนับสนุน DirectMusicเป็นครั้งแรกแล้ว การเผยแพร่ครั้งนี้ยังปรับปรุงการสนับสนุนส่วนขยาย 3D ของ Intel Pentium III อีกด้วย [ 26 ]
บันทึกข้อความลับที่ส่งในปี พ.ศ. 2540 [ 27 ]แสดงให้เห็นว่า Microsoft วางแผนที่จะประกาศการสนับสนุนTalisman อย่างเต็มรูปแบบ ใน DirectX 6.0 แต่ในที่สุด API ก็ถูกยกเลิก (ดู รายละเอียดเพิ่มเติมได้ที่หน้า Microsoft Talisman )
Direct3D 7.0
DirectX 7.0 (วางจำหน่ายในเดือนกันยายน พ.ศ. 2542) ได้แนะนำรูปแบบพื้นผิว.dds [ 28 ]และการสนับสนุนการเร่งความเร็วฮาร์ดแวร์ สำหรับ การแปลงและแสง[ 29 ] (ใช้งานได้ครั้งแรกบนฮาร์ดแวร์พีซีด้วยGeForce 256 ของ Nvidia ) รวมถึงความสามารถในการจัดสรรบัฟเฟอร์จุดยอดในหน่วยความจำฮาร์ดแวร์ บัฟเฟอร์จุดยอดฮาร์ดแวร์ถือเป็นการปรับปรุงที่สำคัญครั้งแรกเหนือ OpenGL ในประวัติศาสตร์ของ DirectX Direct3D 7.0 ยังเพิ่มการสนับสนุนฮาร์ดแวร์มัลติเท็กซ์เจอร์ของ DirectX และเป็นจุดสูงสุดของฟีเจอร์ไปป์ไลน์มัลติเท็กซ์เจอร์แบบฟังก์ชันคงที่ แม้ว่าจะมีประสิทธิภาพ แต่ก็ซับซ้อนในการเขียนโปรแกรมมากจนต้องใช้โมเดลการเขียนโปรแกรมใหม่เพื่อเปิดเผยความสามารถในการแรเงาของฮาร์ดแวร์กราฟิก Direct3D 7.0 ยังได้แนะนำคุณสมบัติ DXVA อีกด้วย
Direct3D 8.0
DirectX 8.0 (วางจำหน่ายในเดือนพฤศจิกายน พ.ศ. 2543) ได้นำเสนอความสามารถในการเขียนโปรแกรมในรูปแบบของเวอร์เท็กซ์และพิกเซลเชเดอร์ทำให้ผู้พัฒนาสามารถเขียนโค้ดได้โดยไม่ต้องกังวลเกี่ยวกับสถานะฮาร์ดแวร์ที่ไม่จำเป็น[ 30 ]ความซับซ้อนของโปรแกรมเชเดอร์ขึ้นอยู่กับความซับซ้อนของงาน และไดรเวอร์แสดงผล จะ คอมไพล์เชเดอร์เหล่านั้นเป็นคำสั่งที่ฮาร์ดแวร์สามารถเข้าใจได้ Direct3D 8.0 และความสามารถในการเขียนเชเดอร์แบบโปรแกรมได้ถือเป็นการเปลี่ยนแปลงครั้งสำคัญครั้งแรกจากสถาปัตยกรรมฟังก์ชันคงที่แบบ OpenGL ซึ่งการวาดภาพถูกควบคุมโดยเครื่องสถานะที่ซับซ้อน Direct3D 8.0 ยังได้กำจัดDirectDraw ออก จากการเป็น API แยกต่างหาก[ 31 ] [ 32 ] Direct3D ได้รวมการเรียกใช้ API ของ DirectDraw ที่เหลือทั้งหมดที่ยังคงจำเป็นสำหรับการพัฒนาแอปพลิเคชัน เช่น Present() ซึ่งเป็นฟังก์ชันที่ใช้ในการแสดงผลลัพธ์การเรนเดอร์
เดิมที Direct3D ไม่ค่อยเป็นมิตรกับผู้ใช้ แต่ตั้งแต่ DirectX เวอร์ชัน 8.1 เป็นต้นมา ปัญหาด้านการใช้งานหลายอย่างก็ได้รับการแก้ไขแล้ว Direct3D 8 มีคุณสมบัติกราฟิก 3 มิติที่ทรงพลังมากมาย เช่นvertex shaders , pixel shaders , fog , bump mappingและtexture mapping
Direct3D 9
Direct3D 9.0 [ 33 ] (วางจำหน่ายในเดือนธันวาคม พ.ศ. 2545) ได้เพิ่มเวอร์ชันใหม่ของภาษา Shader ระดับสูง[ 34 ] [ 35 ]รองรับรูปแบบพื้นผิวแบบจุดลอยตัวเป้าหมายการเรนเดอร์หลายรายการ (MRT) [ 36 ]พื้นผิวหลายองค์ประกอบ[ 37 ]การค้นหาพื้นผิวใน shader เวอร์เท็กซ์ และเทคนิคบัฟเฟอร์สเตนซิล[ 38 ]
Direct3D 9Ex
Direct3D 9Ex [ 39 ] (เวอร์ชันก่อนหน้าคือ 9.0L โดย "L" ย่อมาจาก Longhorn ซึ่งเป็นชื่อรหัสของ Windows Vista) เป็นส่วนขยายที่มีเฉพาะใน Windows Vista และเวอร์ชันที่ใหม่กว่า ช่วยให้สามารถใช้ประโยชน์จากข้อดีของ Windows Display Driver Model (WDDM) ของ Windows Vista และใช้สำหรับWindows Aero [ 40 ] Direct3D 9Ex ร่วมกับไดรเวอร์ WDDM คลาส DirectX 9 ช่วยให้หน่วยความจำกราฟิกสามารถจำลองเสมือนและแยกไปยังหน่วยความจำระบบ ช่วยให้การทำงานของกราฟิกสามารถถูกขัดจังหวะและกำหนดเวลา และช่วยให้พื้นผิว DirectX สามารถแชร์ข้ามกระบวนการได้[ 41 ] Direct3D 9Ex เคยเป็นที่รู้จักในชื่อเวอร์ชัน 1.0 ของ Windows Graphics Foundation (WGF)
การปรับปรุง Direct3D 9Ex - แอปพลิเคชัน Win32
ไดเร็กต์3ดี 10
Windows Vistaมีการอัปเดต API Direct3D ครั้งใหญ่ เดิมเรียกว่า WGF 2.0 (Windows Graphics Foundation 2.0) จากนั้นเป็น DirectX 10 และ DirectX Next ปัจจุบันDirect3D 10 [ 42 ]มีโมเดล shader 4.0 ที่ได้รับการอัปเดต และความสามารถในการขัดจังหวะได้สำหรับโปรแกรม shader [ 41 ]ในโมเดลนี้ shader ยังคงประกอบด้วยขั้นตอนคงที่เช่นเดียวกับในเวอร์ชันก่อนหน้า แต่ทุกขั้นตอนรองรับอินเทอร์เฟซที่เป็นหนึ่งเดียวเกือบทั้งหมด รวมถึงกระบวนทัศน์การเข้าถึงทรัพยากรที่เป็นหนึ่งเดียว เช่น พื้นผิวและค่าคงที่ shader ภาษาเองก็ได้รับการขยายให้แสดงออกได้มากขึ้น รวมถึงการดำเนินการจำนวนเต็ม จำนวนคำสั่งที่เพิ่มขึ้นอย่างมาก และโครงสร้างภาษาที่คล้ายกับ C มากขึ้น นอกจากขั้น ตอน vertexและpixel shader ที่มีอยู่ก่อนหน้านี้แล้ว API ยังมี ขั้นตอน geometry shaderที่ทำลายโมเดลเก่าของหนึ่งจุดยอดเข้า/หนึ่งจุดยอดออก เพื่อให้สามารถสร้างรูปทรงเรขาคณิตจากภายใน shader ได้ ทำให้สามารถสร้างรูปทรงเรขาคณิตที่ซับซ้อนได้ทั้งหมดโดยฮาร์ดแวร์กราฟิก
Windows XP และเวอร์ชันก่อนหน้าไม่ได้รับการสนับสนุนโดย DirectX 10.0 ขึ้นไป นอกจากนี้ Direct3D 10 ยังยกเลิกการสนับสนุน API โหมดคงสภาพซึ่งเป็นส่วนหนึ่งของ Direct3D มาตั้งแต่เริ่มต้น ทำให้ Windows Vista ไม่สามารถใช้งานร่วมกับเกม 3 มิติที่ใช้ API โหมดคงสภาพเป็นเอ็นจิ้นการเรนเดอร์ได้[ 43 ]
แตกต่างจากเวอร์ชันก่อนหน้าของ API Direct3D 10 ไม่ได้ใช้ "บิตความสามารถ" (หรือ "caps") เพื่อระบุว่าอุปกรณ์กราฟิกใดรองรับคุณสมบัติใดบ้างอีกต่อไป แต่จะกำหนดมาตรฐานขั้นต่ำของความสามารถฮาร์ดแวร์ที่ระบบแสดงผลต้องรองรับเพื่อให้ "เข้ากันได้กับ Direct3D 10" นี่เป็นการเปลี่ยนแปลงครั้งสำคัญ โดยมีเป้าหมายเพื่อลดความซับซ้อนของโค้ดแอปพลิเคชันโดยการลบโค้ดตรวจสอบความสามารถและกรณีพิเศษที่ขึ้นอยู่กับการมีอยู่หรือไม่มีอยู่ของความสามารถเฉพาะ
เนื่องจากฮาร์ดแวร์ Direct3D 10 ค่อนข้างหายากหลังจากการเปิดตัวWindows Vista ครั้งแรก และเนื่องจากฐานผู้ใช้งานการ์ดกราฟิกที่ไม่รองรับ Direct3D 10 จำนวนมาก เกมที่รองรับ Direct3D 10 เกมแรกๆ จึงยังคงใช้เส้นทางการเรนเดอร์ Direct3D 9 ตัวอย่างของเกมดังกล่าว ได้แก่ เกมที่เขียนขึ้นสำหรับ Direct3D 9 ในตอนแรกและถูกพอร์ตไปยัง Direct3D 10 หลังจากการเปิดตัว เช่นCompany of Heroesหรือเกมที่พัฒนาขึ้นสำหรับ Direct3D 9 ในตอนแรกและมีการเพิ่มเส้นทาง Direct3D 10 ในภายหลังระหว่างการพัฒนา เช่นHellgate: LondonหรือCrysis SDK ของ DirectX 10 เปิดให้ใช้งานได้ในเดือนกุมภาพันธ์ พ.ศ. 2550 [ 44 ]
Direct3D 10.0
ฮาร์ดแวร์ระดับ Direct3D 10.0ต้องรองรับคุณสมบัติต่อไปนี้: ความสามารถในการประมวลผลพรีมิทีฟทั้งหมดในขั้นตอน geometry-shader ใหม่ ความสามารถในการส่งออกข้อมูลจุดยอดที่สร้างจากไปป์ไลน์ไปยังหน่วยความจำโดยใช้ขั้นตอน stream-output การสนับสนุน alpha-to-coverage แบบมัลติแซมเปิล การอ่านกลับของพื้นผิวความลึก/สเตนซิลหรือทรัพยากรแบบมัลติแซมเปิลเมื่อไม่ได้ผูกเป็นเป้าหมายการเรนเดอร์อีกต่อไป การบูรณาการ HLSL อย่างสมบูรณ์ – เชเดอร์ Direct3D 10 ทั้งหมดเขียนด้วย HLSL และใช้งานด้วยแกนเชเดอร์ทั่วไป การดำเนินการเชเดอร์แบบจำนวนเต็มและบิต การจัดระเบียบสถานะไปป์ไลน์เป็นวัตถุสถานะที่ไม่เปลี่ยนแปลง 5 รายการ การจัดระเบียบค่าคงที่เชเดอร์เป็นบัฟเฟอร์ค่าคงที่ จำนวนเป้าหมายการเรนเดอร์ พื้นผิว และแซมเปิลที่เพิ่มขึ้น ไม่มีข้อจำกัดความยาวเชเดอร์ ประเภททรัพยากรและรูปแบบทรัพยากรใหม่[ 45 ]เลเยอร์รันไทม์/API แบบเลเยอร์[ 46 ]ตัวเลือกในการดำเนินการสลับและตั้งค่าวัสดุต่อพรีมิทีฟโดยใช้ geometry shader การเข้าถึงทรัพยากรแบบทั่วไปที่เพิ่มขึ้นโดยใช้มุมมอง การลบบิตความสามารถของฮาร์ดแวร์แบบเดิม (ตัวพิมพ์ใหญ่)
- ท่อส่งคงที่[ 47 ]กำลังถูกยกเลิกเพื่อแทนที่ด้วยท่อส่งที่ตั้งโปรแกรมได้อย่างสมบูรณ์ (มักเรียกว่าสถาปัตยกรรมท่อส่งแบบรวม) ซึ่งสามารถตั้งโปรแกรมให้เลียนแบบได้เช่นเดียวกัน
- อ็อบเจ็กต์สถานะใหม่ที่ช่วยให้ (ส่วนใหญ่) CPU สามารถเปลี่ยนสถานะได้อย่างมีประสิทธิภาพ
- โมเดลเชเดอร์แบบรวมช่วยเพิ่มความสามารถในการเขียนโปรแกรมของไปป์ไลน์กราฟิกโดยเพิ่มคำสั่งสำหรับการคำนวณจำนวนเต็มและบิต
- แกนประมวลผลเชเดอร์ทั่วไป[ 48 ]มีชุดการดำเนินการจำนวนเต็ม 32 บิตและการดำเนินการบิตที่สอดคล้องกับมาตรฐาน IEEE อย่างครบถ้วน การดำเนินการเหล่านี้ช่วยให้สามารถใช้อัลกอริธึมประเภทใหม่ในฮาร์ดแวร์กราฟิกได้ ตัวอย่างเช่น เทคนิคการบีบอัดและการบรรจุ FFT และการควบคุมการไหลของโปรแกรมบิตฟิลด์
- เฉดสีเรขาคณิต[ 49 ] [ 50 ]ซึ่งทำงานบนสามเหลี่ยมที่อยู่ติดกันซึ่งประกอบเป็นตาข่าย
- อาร์เรย์ พื้นผิวช่วยให้สามารถสลับพื้นผิวใน GPU ได้โดยไม่ต้องอาศัยการแทรกแซงจาก CPU
- การเรนเดอร์แบบมีเงื่อนไขช่วยให้สามารถละเว้นคำสั่งวาดภาพได้โดยอิงจากเงื่อนไขอื่นๆ บางประการ ซึ่งช่วยให้สามารถคัดกรอง วัตถุที่บดบังได้อย่างรวดเร็ว โดยป้องกันไม่ให้วัตถุถูกเรนเดอร์หากมองไม่เห็นหรืออยู่ไกลเกินกว่าจะมองเห็นได้
- รองรับ Instancing 2.0ซึ่งอนุญาตให้เรนเดอร์โมเดลหลายอินสแตนซ์ที่คล้ายกัน เช่น กองทัพ หญ้า หรือต้นไม้ ในการเรียกวาดเพียงครั้งเดียว ลดเวลาการประมวลผลที่จำเป็นสำหรับวัตถุที่คล้ายกันหลายชิ้นให้เหลือเท่ากับวัตถุชิ้นเดียว[ 51 ]
Direct3D 10.1
ไมโครซอฟต์ประกาศDirect3D 10.1 [ 52 ] ไม่นานหลังจากการเปิดตัว Direct3D 10 ในรูปแบบการอัปเดตเล็กน้อย ข้อกำหนดได้รับการสรุปด้วยการเปิดตัว DirectX SDK ในเดือนพฤศจิกายน 2550 และรันไทม์ถูกจัดส่งพร้อมกับ Windows Vista SP1ซึ่งมีให้ใช้งานตั้งแต่กลางเดือนมีนาคม 2551
Direct3D 10.1 กำหนดมาตรฐานคุณภาพของภาพเพิ่มเติมสำหรับผู้จำหน่ายกราฟิก และให้ผู้พัฒนาควบคุมคุณภาพของภาพได้มากขึ้น[ 53 ] [ 54 ]คุณสมบัติต่างๆ ได้แก่ การควบคุมการลดรอยหยักที่ละเอียดขึ้น (ทั้งการสุ่มตัวอย่างหลายจุดและการสุ่มตัวอย่างขั้นสูงด้วยการแรเงาต่อตัวอย่างและการควบคุมตำแหน่งตัวอย่างตามแอปพลิเคชัน) และความยืดหยุ่นที่มากขึ้นสำหรับคุณสมบัติที่มีอยู่บางอย่าง (อาร์เรย์คิวบ์แมปและโหมดการผสมอิสระ) ฮาร์ดแวร์ระดับ Direct3D 10.1 ต้องรองรับคุณสมบัติต่อไปนี้: การสุ่มตัวอย่างหลายจุดได้รับการปรับปรุงเพื่อทำให้ความโปร่งใสตามการครอบคลุมเป็นแบบทั่วไปและทำให้การสุ่มตัวอย่างหลายจุดทำงานได้อย่างมีประสิทธิภาพมากขึ้นกับการเรนเดอร์แบบหลายรอบ พฤติกรรมการคัดกรองที่ดีขึ้น – หน้าที่มีพื้นที่เป็นศูนย์จะถูกคัดกรองโดยอัตโนมัติ การเปลี่ยนแปลงนี้มีผลเฉพาะกับการเรนเดอร์โครงร่างเส้น (wireframe rendering), โหมดการผสมสีอิสระต่อเป้าหมายการเรนเดอร์, การทำงานของพิกเซลเชเดอร์ความถี่ตัวอย่างใหม่พร้อมการแรสเตอร์แบบพื้นฐาน, แบนด์วิดท์ของขั้นตอนไปป์ไลน์ที่เพิ่มขึ้น, พื้นผิว MSAA ทั้งสีและความลึก/สเตนซิลสามารถใช้กับ CopyResource เป็นแหล่งที่มาหรือปลายทางได้แล้ว, MultisampleEnable มีผลเฉพาะกับการแรสเตอร์เส้น (จุดและสามเหลี่ยมไม่ได้รับผลกระทบ) และใช้เพื่อเลือกอัลกอริทึมการวาดเส้น ซึ่งหมายความว่าการแรสเตอร์แบบมัลติแซมเปิลบางส่วนจาก Direct3D 10 จะไม่ได้รับการสนับสนุนอีกต่อไป, การสุ่มตัวอย่างพื้นผิว – คำสั่ง sample_c และ sample_c_lz ถูกกำหนดให้ทำงานร่วมกับทั้ง Texture2DArrays และ TextureCubeArrays โดยใช้สมาชิก Location (ส่วนประกอบอัลฟา) เพื่อระบุดัชนีอาร์เรย์, รองรับ TextureCubeArrays
- การกรองแบบจุดลอยตัว 32 บิตเป็นสิ่งจำเป็น
- กฎการคำนวณเลขทศนิยม – ใช้กฎ IEEE-754 เดียวกันสำหรับเลขทศนิยม ยกเว้นการคำนวณเลขทศนิยม 32 บิต ซึ่งได้รับการปรับปรุงให้มีความแม่นยำยิ่งขึ้น โดยให้ผลลัพธ์มีความคลาดเคลื่อนไม่เกิน 0.5 หน่วยหลักสุดท้าย (0.5 ULP) จากผลลัพธ์ที่มีความแม่นยำสูงสุด (ความแม่นยำ 0.5 ULP สำหรับการคูณ และ 1.0 ULP สำหรับส่วนกลับ)
- รูปแบบ – ความแม่นยำของการผสมค่า float16 เพิ่มขึ้นเป็น 0.5 ULP การผสมค่านี้จำเป็นสำหรับรูปแบบ UNORM16/SNORM16/SNORM8 ด้วยเช่นกัน
- การแปลงรูปแบบขณะคัดลอกระหว่างทรัพยากรที่มีโครงสร้างล่วงหน้าแบบ 32/64/128 บิต และการแสดงผลแบบบีบอัดที่มีความกว้างบิตเดียวกัน
- การสนับสนุน MSAA 4x เป็นสิ่งจำเป็นสำหรับเป้าหมายการเรนเดอร์ทั้งหมด ยกเว้น R32G32B32A32 และ R32G32B32 [ 55 ]
- โมเดลเชเดอร์ 4.1
ต่างจาก Direct3D 10 ซึ่งต้องการฮาร์ดแวร์และอินเทอร์เฟซไดรเวอร์ระดับ Direct3D 10 อย่างเคร่งครัด รันไทม์ Direct3D 10.1 สามารถทำงานบนฮาร์ดแวร์ Direct3D 10.0 ได้โดยใช้แนวคิดของ " ระดับฟีเจอร์ " [ 56 ] [ 57 ] [ 58 ]แต่ฟีเจอร์ใหม่จะได้รับการสนับสนุนเฉพาะฮาร์ดแวร์ใหม่ที่เปิดเผยระดับฟีเจอร์ 10_1 เท่านั้น
ณ เดือนมิถุนายน 2551 ฮาร์ดแวร์ที่รองรับ Direct3D 10.1 มีเพียงการ์ดจอRadeon HD 3000 seriesและRadeon HD 4000 seriesจากATI เท่านั้น ต่อมาในปี 2552 ก็มี GPU Chrome 430/440GTจากS3 Graphicsและรุ่นระดับล่างบางรุ่นในGeForce 200 seriesจากNvidia เข้ามาเสริม และในปี 2554 ชิปเซ็ต ของ Intelก็เริ่มรองรับ Direct3D 10.1 ด้วยการเปิดตัวIntel HD Graphics 2000 (GMA HD)
ไดเร็กต์3ดี 11
Direct3D 11 [ 59 ]ได้รับการเผยแพร่เป็นส่วนหนึ่งของ Windows 7 โดยนำเสนอในงาน Gamefest 2008 เมื่อวันที่ 22 กรกฎาคม 2008 และสาธิตในงาน ประชุมทางเทคนิค Nvision 08 เมื่อวันที่ 26 สิงหาคม 2008 [ 60 ] [ 61 ] Direct3D 11 Technical Preview ได้ถูกรวมอยู่ในเวอร์ชัน DirectX SDK ที่วางจำหน่ายในเดือนพฤศจิกายน 2008 [ 62 ] AMD ได้แสดงตัวอย่างฮาร์ดแวร์ DirectX11 ที่ใช้งานได้จริงในงาน Computex เมื่อวันที่ 3 มิถุนายน 2009 โดยรันตัวอย่าง DirectX 11 SDK บางส่วน[ 63 ]
รันไทม์ Direct3D 11 สามารถทำงานบนฮาร์ดแวร์และไดรเวอร์ ระดับ Direct3D 9 และ 10.x ได้ โดยใช้แนวคิดของ"ระดับฟีเจอร์"ซึ่งเป็นการขยายฟังก์ชันการทำงานที่นำเสนอครั้งแรกในรันไทม์ Direct3D 10.1 [ 56 ] [ 64 ] [ 65 ]ระดับฟีเจอร์ช่วยให้นักพัฒนาสามารถรวมไปป์ไลน์การเรนเดอร์ภายใต้ API ของ Direct3D 11 และใช้ประโยชน์จากการปรับปรุง API เช่น การจัดการทรัพยากรที่ดีขึ้นและการทำงานแบบมัลติเธรด แม้แต่บนการ์ดระดับเริ่มต้นก็ตาม แม้ว่าฟีเจอร์ขั้นสูง เช่น โมเดลเชเดอร์ใหม่และขั้นตอนการเรนเดอร์จะเปิดเผยเฉพาะบนฮาร์ดแวร์ระดับสูงกว่าเท่านั้น[ 64 ] [ 66 ]มีโปรไฟล์ "10 Level 9" สามโปรไฟล์ซึ่งรวบรวมความสามารถต่างๆ ของการ์ด DirectX 9.0a ยอดนิยม และ Direct3D 10, 10.1 และ 11 แต่ละตัวมีระดับฟีเจอร์แยกต่างหาก โดยแต่ละระดับบนสุดเป็นซูเปอร์เซ็ตที่เข้มงวดของระดับล่างกว่า[ 67 ]
ก่อนหน้านี้มีการพิจารณาใช้ เทสเซลเลชันสำหรับ Direct3D 10 แต่ต่อมาได้ยกเลิกไป GPU เช่นRadeon R600มีเอ็นจิ้นเทสเซลเลชันที่สามารถใช้กับ Direct3D 9/10/10.1 [ 68 ] [ 69 ] [ 70 ]และ OpenGL [ 71 ]ได้ แต่ไม่สามารถใช้งานร่วมกับ Direct3D 11 ได้ (ตามข้อมูลของ Microsoft) ฮาร์ดแวร์กราฟิกรุ่นเก่า เช่น Radeon 8xxx, GeForce 3/4 รองรับเทสเซลเลชันรูปแบบอื่น (RT patches, N patches) แต่เทคโนโลยีเหล่านั้นไม่เคยถูกนำมาใช้งานอย่างแพร่หลาย ดังนั้นจึงถูกยกเลิกการสนับสนุนในฮาร์ดแวร์รุ่นใหม่กว่า
นอกจากนี้ ไมโครซอฟต์ยังได้กล่าวถึงคุณสมบัติอื่นๆ เช่นความโปร่งใสที่ไม่ขึ้นกับลำดับการทำงานซึ่งไม่เคยมีการเปิดเผยใน API ของ Direct3D แต่ได้รับการสนับสนุนอย่างโปร่งใสโดยฮาร์ดแวร์ Direct3D รุ่นแรกๆ เช่นชิปตระกูล PowerVR ของ Videologic
Direct3D 11.0
คุณสมบัติของ Direct3D 11.0ประกอบด้วย: การสนับสนุน Shader Model 5.0, การเชื่อมโยง shader แบบไดนามิก, ทรัพยากรที่สามารถระบุที่อยู่ได้, ประเภททรัพยากรเพิ่มเติม, [ 72 ]รูทีนย่อย, การสร้างอินสแตนซ์เรขาคณิต, การครอบคลุมเป็นอินพุต shader พิกเซล, การประมาณค่าแบบโปรแกรมได้ของอินพุต, รูปแบบการบีบอัดพื้นผิวใหม่ (รูปแบบ LDR ใหม่ 1 รูปแบบและรูปแบบ HDR ใหม่ 1 รูปแบบ), ตัวจำกัดพื้นผิวเพื่อจำกัดการโหลดล่วงหน้า WDDM, ต้องใช้ความแม่นยำ subtexel และ sub-mip 8 บิตในการกรองพื้นผิว, ขีดจำกัดพื้นผิว 16K, Gather4 (รองรับพื้นผิวหลายองค์ประกอบ, รองรับออฟเซ็ตแบบโปรแกรมได้), DrawIndirect, oDepth แบบอนุรักษ์นิยม, Depth Bias, [ 73 ] [ 74 ]เอาต์พุตสตรีมที่สามารถระบุที่อยู่ได้, การจำกัด mipmap ต่อทรัพยากร, วิวพอร์ตแบบจุดลอยตัว, คำสั่งการแปลง shader, มัลติเธรดดิ้งที่ได้รับการปรับปรุง
- โมเดลเชเดอร์ 5 [ 75 ]
- การสนับสนุนสำหรับTessellation [ 76 ]และ Tessellation Shaders [ 77 ]เพื่อเพิ่มจำนวนโพลีกอนที่มองเห็นได้จากโมเดลโพลีกอนที่มีรายละเอียดต่ำในระหว่างการทำงาน
- การเรนเดอร์แบบมัลติเธรด — เพื่อเรนเดอร์ไปยังวัตถุอุปกรณ์ Direct3D เดียวกันจากเธรดต่างๆ สำหรับซีพียูแบบมัลติคอร์
- เชเดอร์ประมวลผล — ซึ่งเปิดเผยไปป์ไลน์เชเดอร์สำหรับงานที่ไม่ใช่กราฟิก เช่นการประมวลผลสตรีมและการเร่งความเร็วทางฟิสิกส์ คล้ายกับสิ่งที่ OpenCL , Nvidia CUDA , ATI Streamและ HLSL Shader Model 5 ทำได้ เป็นต้น [ 60 ] [ 61 ]
- การสนับสนุนที่จำเป็นสำหรับ 4x MSAA สำหรับเรนเดอร์เป้าหมายทั้งหมด และ 8x MSAA สำหรับรูปแบบเรนเดอร์เป้าหมายทั้งหมด ยกเว้นรูปแบบ R32G32B32A32 [ 55 ]
คุณสมบัติเด่นอื่นๆ ได้แก่ การเพิ่มอัลกอริธึมการบีบอัดพื้นผิวใหม่สองแบบเพื่อการบรรจุพื้นผิวคุณภาพสูงและ HDR/อัลฟาได้อย่างมีประสิทธิภาพมากขึ้น และแคช พื้นผิว ที่เพิ่มขึ้น
Windows 7ปรากฏครั้งแรกในเวอร์ชันRelease Candidateซึ่งรวมการสนับสนุน Direct3D 11 เวอร์ชันแรกที่เปิดตัวการอัปเดตแพลตฟอร์มสำหรับWindows Vista ประกอบด้วยรันไทม์ Direct3D 11 ที่มีคุณสมบัติครบถ้วนและการ อัปเดต DXGI 1.1 รวมถึงส่วนประกอบอื่นๆ ที่เกี่ยวข้องจาก Windows 7 เช่นWARP , Direct2D , DirectWriteและWIC [ 78 ] [ 79 ]
Direct3D 11.1
Direct3D 11.1 [ 80 ] [ 81 ]เป็นการอัปเดต API ที่มาพร้อมกับWindows 8 [ 82 ] [ 83 ] รันไทม์ Direct3D ใน Windows 8 มีDXGI 1.2 [ 84 ]และต้องการไดรเวอร์อุปกรณ์WDDM 1.2 ใหม่ [ 85 ] [ 86 ]เวอร์ชันเบื้องต้นของ Windows SDK สำหรับ Windows 8 Developer Preview ได้รับการเผยแพร่เมื่อวันที่ 13 กันยายน 2011
คุณสมบัติ API ใหม่ประกอบด้วยการติดตาม เชเดอร์ และการปรับปรุงคอมไพเลอร์ HLSL การสนับสนุนประเภทข้อมูลสเกลาร์ HLSL ที่มีความแม่นยำขั้นต่ำ[ 87 ] UAVs (Unordered Access Views) ในทุกขั้นตอนของไปป์ไลน์ การแรสเตอร์ไรเซชันที่ไม่ขึ้นกับเป้าหมาย (TIR) ตัวเลือกในการแมป SRV ของบัฟเฟอร์แบบไดนามิกด้วย NO_OVERWRITE การประมวลผลเชเดอร์ของทรัพยากรวิดีโอ ตัวเลือกในการใช้การดำเนินการเชิงตรรกะในเรนเดอร์ทาร์เก็ต ตัวเลือกในการผูกช่วงย่อยของบัฟเฟอร์คงที่กับเชเดอร์และเรียกใช้ ตัวเลือกในการสร้างบัฟเฟอร์คงที่ขนาดใหญ่กว่าที่เชเดอร์สามารถเข้าถึงได้ ตัวเลือกในการทิ้งทรัพยากรและมุมมองทรัพยากร ตัวเลือกในการเปลี่ยนทรัพยากรย่อยด้วยตัวเลือกการคัดลอกใหม่ ตัวเลือกในการบังคับจำนวนตัวอย่างเพื่อสร้างสถานะแรสเตอร์ไรเซอร์ ตัวเลือกในการล้างมุมมองทรัพยากรทั้งหมดหรือบางส่วน ตัวเลือกในการใช้ Direct3D ในกระบวนการเซสชัน 0 ตัวเลือกในการระบุระนาบคลิปผู้ใช้ใน HLSL ในระดับคุณสมบัติ 9 ขึ้นไป การสนับสนุนบัฟเฟอร์เงาในระดับคุณสมบัติ 9 การสนับสนุนการเล่นวิดีโอ การสนับสนุนเพิ่มเติมสำหรับทรัพยากร Texture2D ที่ใช้ร่วมกัน และการสลับระหว่างกันแบบทันที บริบทและระดับฟีเจอร์ของ Direct3D 10 และ 11 Direct3D 11.1 ประกอบด้วยระดับฟีเจอร์ใหม่ 11_1 ซึ่งนำการอัปเดตเล็กน้อยมาสู่ภาษาเชเดอร์ เช่น บัฟเฟอร์ค่าคงที่ขนาดใหญ่ขึ้นและคำสั่งความแม่นยำสองเท่าที่เป็นตัวเลือก รวมถึงโหมดการผสมที่ได้รับการปรับปรุงและการสนับสนุนรูปแบบสี 16 บิตที่จำเป็นเพื่อปรับปรุงประสิทธิภาพของ GPU ระดับเริ่มต้น เช่นIntel HD Graphics [ 86 ] [ 88 ] WARP ได้รับการอัปเดตเพื่อรองรับระดับฟีเจอร์ 11_1
การอัปเดตแพลตฟอร์มสำหรับWindows 7ประกอบด้วยชุดคุณสมบัติที่จำกัดจาก Direct3D 11.1 แม้ว่าส่วนประกอบที่ขึ้นอยู่กับ WDDM 1.2 เช่นระดับคุณสมบัติ 11_1 และ API ที่เกี่ยวข้อง หรือการบัฟเฟอร์แบบควอดสำหรับ การเรนเดอร์ แบบสเตอริโอสโคปิกจะไม่มีอยู่[ 89 ] [ 90 ]
Direct3D 11.2
Direct3D 11.2 [ 91 ] [ 92 ] [ 93 ]ถูกจัดส่งมาพร้อมกับWindows 8.1 [ 94 ] [ 95 ] คุณสมบัติฮาร์ดแวร์ใหม่ต้องการ DXGI 1.3 [ 96 ]พร้อมไดรเวอร์ WDDM 1.3 [ 97 ]และรวมถึงการแก้ไขและการเชื่อมโยงเชเดอร์รันไทม์ กราฟการเชื่อมโยงฟังก์ชัน (FLG) คอมไพเลอ ร์ HLSLในตัว ตัวเลือกในการใส่คำอธิบายประกอบคำสั่งกราฟิก[ 98 ]ระดับคุณสมบัติ 11_0 และ 11_1 แนะนำการสนับสนุนเพิ่มเติมสำหรับทรัพยากรแบบไทล์พร้อมการจำกัดระดับรายละเอียดของเชเดอร์ (Tier2) [ 99 ]คุณสมบัติหลังนี้ให้การควบคุมตารางเพจ ฮาร์ดแวร์ ที่มีอยู่ใน GPU ปัจจุบันจำนวนมากได้ อย่างมีประสิทธิภาพ [ 100 ] WARPได้รับการอัปเดตเพื่อรองรับคุณสมบัติใหม่ทั้งหมด[ 94 ] [ 101 ]อย่างไรก็ตาม ไม่มีระดับคุณสมบัติ 11_2 คุณสมบัติใหม่จะกระจายอยู่ทั่วระดับคุณสมบัติที่มีอยู่ คุณสมบัติที่ขึ้นอยู่กับฮาร์ดแวร์สามารถตรวจสอบได้ทีละรายการCheckFeatureSupportผ่าน[ 95 ] [ 102 ]คุณสมบัติ "ใหม่" บางอย่างใน Direct3D 11.2 จริงๆ แล้วเปิดเผยคุณสมบัติฮาร์ดแวร์เก่าบางอย่างในลักษณะที่ละเอียดกว่า ตัวอย่างเช่นD3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORTเปิดเผยการสนับสนุนบางส่วนสำหรับการสร้างอินสแตนซ์บนฮาร์ดแวร์ระดับคุณสมบัติ 9_1 และ 9_2 มิฉะนั้นจะได้รับการสนับสนุนอย่างเต็มที่ตั้งแต่ระดับคุณสมบัติ 9_3 เป็นต้นไป[ 103 ]
Direct3D 11.X
Direct3D 11.Xเป็นซูเปอร์เซ็ตของ DirectX 11.2 ที่ทำงานบนXbox One [ 104 ] [ 105 ]โดยมีคุณสมบัติบางอย่าง เช่น draw bundles ซึ่งต่อมาได้ประกาศเป็นส่วนหนึ่งของ DirectX 12 [ 106 ]
Direct3D 11.3
Direct3D 11.3 [ 107 ]วางจำหน่ายในเดือนกรกฎาคม 2015 พร้อมกับ Windows 10 โดยมีคุณสมบัติการเรนเดอร์เล็กน้อยจาก Direct3D 12 ในขณะที่ยังคงโครงสร้างโดยรวมของ API Direct3D 11.x ไว้[ 108 ] [ 109 ] [ 110 ] Direct3D 11.3 นำเสนอ Shader Specified Stencil Reference Value ที่เป็นตัวเลือก, Typed Unordered Access View Loads, Rasterizer Ordered Views (ROVs), Standard Swizzle ที่เป็นตัวเลือก, Default Texture Mapping ที่เป็นตัวเลือก, Conservative Rasterization (จากสามระดับ), [ 111 ] การสนับสนุน Unified Memory Access (UMA)ที่เป็นตัวเลือกและ Tiled Resources เพิ่มเติม (ระดับ 2) (Volume tiled resources) [ 112 ]
Direct3D 11.4
- Direct3D 11.4 เวอร์ชัน 1511 – Direct3D 11.4 รุ่นแรกได้รับการแนะนำพร้อมกับการอัปเดต Windows 10 Threshold 2 (เวอร์ชัน 1511) ซึ่งปรับปรุงการรองรับอะแดปเตอร์กราฟิกภายนอกและ DXGI 1.5 [ 113 ]
- Direct3D 11.4 เวอร์ชัน 1607 – Direct3D 11.4 ที่ได้รับการอัปเดตพร้อมกับ Windows 10 Anniversary Update (เวอร์ชัน 1607) ประกอบด้วยการรองรับ WDDM 2.1 และรูปแบบ UHDTV HDR10 ( ST 2084 ) รวมถึงการรองรับอัตราการรีเฟรชแบบแปรผันสำหรับแอปพลิเคชัน UWP
ไดเร็กต์3ดี 12
Direct3D 12 [ 114 ]อนุญาตให้มีการแยกส่วนฮาร์ดแวร์ในระดับที่ต่ำกว่าเวอร์ชันก่อนหน้า ทำให้แอปพลิเคชันในอนาคตสามารถปรับปรุงการปรับขนาดแบบมัลติเธรดและลดการใช้ CPU ได้อย่างมีนัยสำคัญ สิ่งนี้ทำได้โดยการจับคู่เลเยอร์การแยกส่วน Direct3D กับฮาร์ดแวร์พื้นฐานได้ดียิ่งขึ้น ผ่านคุณสมบัติใหม่ๆ เช่น การวาดภาพทางอ้อม ตารางคำอธิบาย อ็อบเจ็กต์สถานะไปป์ไลน์ที่กระชับ และบันเดิลการเรียกวาด การลดโอเวอร์เฮดของไดรเวอร์เป็นจุดเด่นหลักของ Direct3D 12 เช่นเดียวกับMantleของ AMD [ 114 ]ตามคำกล่าวของ Max McMullen หัวหน้าผู้พัฒนา เป้าหมายหลักของ Direct3D 12 คือการบรรลุ "ประสิทธิภาพระดับคอนโซล" และการทำงานแบบขนานของ CPU ที่ดีขึ้น[ 115 ] [ 116 ] [ 117 ]
แม้ว่า Nvidia จะประกาศการสนับสนุน Direct3D 12 อย่างกว้างขวาง แต่พวกเขาก็ยังค่อนข้างระมัดระวังเกี่ยวกับความนิยมของ API ใหม่นี้ โดยระบุว่าในขณะที่นักพัฒนาเอนจิ้นเกมอาจกระตือรือร้นที่จะจัดการทรัพยากร GPU โดยตรงจากโค้ดแอปพลิเคชันของพวกเขา แต่ "คนอื่นๆ อีกจำนวนมากจะไม่" พอใจที่จะต้องทำเช่นนั้น[ 118 ]
คุณสมบัติฮาร์ดแวร์ใหม่บางอย่างมีอยู่ใน Direct3D 12 เช่นกัน[ 110 ] [ 108 ] [ 119 ]รวมถึง Shader Model 5.1 [ 120 ] Volume Tiled Resources (Tier 2) [ 120 ] Shader Specified Stencil Reference Value, Typed UAV Load, Conservative Rasterization (Tier 1), การชนและการตัดที่ดีขึ้นด้วย Conservative Rasterization, Rasterizer Ordered Views (ROVs), Standard Swizzles, Default Texture Mapping, Swap Chains, swizzled resourcesและcompressed resources [ 121 ]โหมดการผสมเพิ่มเติม[ 122 ] การผสมที่ตั้งโปรแกรมได้ และ ความ โปร่งใสที่ไม่ขึ้นกับลำดับ (OIT) ที่มีประสิทธิภาพด้วย pixel ordered UAV [ 123 ]
อ็อบเจ็กต์สถานะไปป์ไลน์ (PSO) [ 124 ]ได้รับการพัฒนามาจาก Direct3D 11 และสถานะไปป์ไลน์ที่กระชับขึ้นใหม่นี้หมายความว่ากระบวนการได้รับการทำให้ง่ายขึ้น DirectX 11 นำเสนอความยืดหยุ่นในการเปลี่ยนแปลงสถานะ ซึ่งส่งผลเสียต่อประสิทธิภาพ การทำให้กระบวนการง่ายขึ้นและการรวมไปป์ไลน์ (เช่น สถานะพิกเซลเชเดอร์) เข้าด้วยกันทำให้กระบวนการคล่องตัวมากขึ้น ลดค่าใช้จ่ายลงอย่างมาก และช่วยให้การ์ดกราฟิกสามารถเรียกใช้งานได้มากขึ้นในแต่ละเฟรม เมื่อสร้าง PSO แล้วจะไม่สามารถเปลี่ยนแปลงได้[ 125 ]
ลายเซ็นรากจะแนะนำการกำหนดค่าเพื่อเชื่อมโยงรายการคำสั่งกับทรัพยากรที่จำเป็นสำหรับเชเดอร์ โดยจะกำหนดเค้าโครงของทรัพยากรที่เชเดอร์จะใช้และระบุว่าทรัพยากรใดจะถูกผูกไว้กับไปป์ไลน์ รายการคำสั่งกราฟิกจะมีทั้งลายเซ็นรากกราฟิกและลายเซ็นรากการคำนวณ ในขณะที่รายการคำสั่งการคำนวณจะมีเพียงลายเซ็นรากการคำนวณเท่านั้น ลายเซ็นรากเหล่านี้เป็นอิสระจากกันโดยสิ้นเชิง แม้ว่าลายเซ็นรากจะกำหนดประเภทของข้อมูลที่เชเดอร์จะใช้ แต่ก็ไม่ได้กำหนดหรือแมปหน่วยความจำหรือข้อมูลจริง[ 126 ]
พารามิเตอร์รากเป็นประเภทหนึ่งของรายการในลายเซ็นราก ค่าจริงของพารามิเตอร์รากที่ได้รับการแก้ไขในขณะรันไทม์เรียกว่าอาร์กิวเมนต์ราก นี่คือข้อมูลที่เชเดอร์อ่าน[ 126 ]
ใน Direct3D 11 คำสั่งจะถูกส่งจาก CPU ไปยัง GPU ทีละคำสั่ง และ GPU จะประมวลผลคำสั่งเหล่านั้นตามลำดับ ซึ่งหมายความว่าประสิทธิภาพของคำสั่งจะถูกจำกัดด้วยความเร็วในการส่งคำสั่งของ CPU ในลักษณะเชิงเส้น ใน DirectX 12 คำสั่งเหล่านี้จะถูกส่งเป็นรายการคำสั่ง ซึ่งประกอบด้วยข้อมูลที่จำเป็นทั้งหมดภายในแพ็กเกจเดียว จากนั้น GPU จะสามารถประมวลผลและดำเนินการคำสั่งนี้ได้ในกระบวนการเดียว โดยไม่ต้องรอข้อมูลเพิ่มเติมจาก CPU
ภายในรายการคำสั่งเหล่านี้จะมีชุดคำสั่งอยู่ ในอดีต คำสั่งต่างๆ จะถูกนำไปใช้แล้วก็ถูกลืมโดย GPU แต่ปัจจุบัน ชุดคำสั่งเหล่านี้สามารถนำกลับมาใช้ซ้ำได้ ซึ่งจะช่วยลดภาระงานของ GPU และทำให้สามารถใช้ทรัพยากรที่ซ้ำกันได้เร็วขึ้นมาก
ถึงแม้ว่าการผูกทรัพยากรจะค่อนข้างสะดวกสำหรับนักพัฒนาใน Direct3D 11 ในขณะนี้ แต่ประสิทธิภาพที่ต่ำทำให้ความสามารถของฮาร์ดแวร์สมัยใหม่หลายอย่างถูกใช้งานอย่างไม่เต็มที่ เมื่อเอนจิ้นเกมต้องการทรัพยากรใน DX11 มันต้องดึงข้อมูลมาตั้งแต่ต้นทุกครั้ง ซึ่งหมายถึงกระบวนการซ้ำซ้อนและการใช้งานที่ไม่จำเป็น ใน Direct3D 12 ฮีปและตารางตัวอธิบายหมายความว่านักพัฒนาสามารถจัดสรรทรัพยากรที่ใช้บ่อยที่สุดลงในตาราง ซึ่ง GPU สามารถเข้าถึงได้อย่างรวดเร็วและง่ายดาย สิ่งนี้สามารถนำไปสู่ประสิทธิภาพที่ดีกว่า Direct3D 11 บนฮาร์ดแวร์ที่เทียบเท่ากัน แต่ก็หมายความว่านักพัฒนาจะต้องทำงานมากขึ้นด้วย
Dynamic Heaps ก็เป็นคุณสมบัติหนึ่งของ Direct3D 12 เช่นกัน[ 127 ]
Direct3D 12 มีคุณสมบัติรองรับอะแดปเตอร์หลายตัวอย่างชัดเจน ทำให้สามารถควบคุมระบบการกำหนดค่า GPU หลายตัว (mGPU) ได้อย่างชัดเจน การกำหนดค่าดังกล่าวสามารถสร้างขึ้นได้โดยใช้อะแดปเตอร์กราฟิกจากผู้ผลิตฮาร์ดแวร์รายเดียวกันหรือจากผู้ผลิตฮาร์ดแวร์ที่แตกต่างกันก็ได้[ 128 ]
การสนับสนุนแบบทดลองของ D3D 12 สำหรับ Windows 7 SP1 ได้รับการเผยแพร่โดย Microsoft ในปี 2019 ผ่านแพ็คเกจ NuGet เฉพาะ[ 129 ] [ 130 ] [ 131 ]
- Direct3D 12 เวอร์ชัน 1607 – ด้วยการอัปเดต Windows 10 Anniversary Update (เวอร์ชัน 1607) ที่เผยแพร่เมื่อวันที่ 2 สิงหาคม 2559 รันไทม์ Direct3D 12 ได้รับการอัปเดตเพื่อรองรับโครงสร้างสำหรับการทำงานแบบมัลติเธรดและการสื่อสารระหว่างกระบวนการอย่างชัดเจน ทำให้ผู้พัฒนาสามารถใช้ประโยชน์จาก GPU แบบขนานขนาดใหญ่ที่ทันสมัยได้[ 132 ]คุณสมบัติอื่นๆ ได้แก่ ลายเซ็นรูทเวอร์ชัน 1.1 ที่ได้รับการอัปเดต รวมถึงการรองรับ รูปแบบ HDR10และอัตราการรีเฟรชแบบแปรผัน
- Direct3D 12 เวอร์ชัน 1703 – ด้วยการอัปเดต Windows 10 Creators Update (เวอร์ชัน 1703) ที่วางจำหน่ายเมื่อวันที่ 11 เมษายน 2560 รันไทม์ Direct3D 12 ได้รับการอัปเดตเพื่อรองรับ Shader Model 6.0 และDXILและ Shader Model 6.0 ต้องการ Windows 10 Anniversary Update (เวอร์ชัน 1607) WDDM 2.1 คุณสมบัติกราฟิกใหม่ ได้แก่ การทดสอบขอบเขตความลึกและ MSAA ที่ตั้งโปรแกรมได้[ 133 ]
- Direct3D 12 เวอร์ชัน 1709 – Direct3D ใน Windows 10 Fall Creators Update (เวอร์ชัน 1709) ซึ่งวางจำหน่ายเมื่อวันที่ 17 ตุลาคม 2017 มีการปรับปรุงการดีบัก[ 133 ]
- Direct3D 12 เวอร์ชัน 1809 – การอัปเดต Windows 10 เดือนตุลาคม 2018 (เวอร์ชัน 1809) รองรับDirectX Raytracingทำให้ GPU สามารถใช้ประโยชน์จาก API นี้ได้
- Direct3D 12 เวอร์ชัน 1903 – Windows 10 May 2019 Update (เวอร์ชัน 1903) นำมาซึ่งการสนับสนุน DirectML และNPU [ 134 ] [ 135 ] DirectML สามารถรองรับทั้งcompute shadersและtensor shaders ได้
- Direct3D 12 เวอร์ชัน 2004 – การอัปเดต Windows 10 พฤษภาคม 2020 (เวอร์ชัน 2004) นำมาซึ่งการสนับสนุนDirectX 12 Ultimate , Mesh & Amplification Shaders, [ 136 ] Sampler Feedback, [ 137 ]รวมถึง DirectX Raytracing Tier 1.1 [ 138 ]และการปรับปรุงการจัดสรรหน่วยความจำ[ 139 ]
- Direct3D 12 เวอร์ชัน 21H2 – Windows 10 เวอร์ชัน 21H2 และ Windows 11 เวอร์ชัน 21H2 รองรับDirectStorageแล้ว
สถาปัตยกรรม

Direct3D เป็น ส่วนประกอบย่อยของระบบ API DirectX ของ Microsoft จุดประสงค์ของ Direct3D คือการลดความซับซ้อนของการสื่อสารระหว่างแอปพลิเคชันกราฟิกและไดรเวอร์ฮาร์ดแวร์กราฟิก โดยนำเสนอในรูปแบบของเลเยอร์นามธรรมบาง ๆ ในระดับที่เทียบได้กับGDI (ดูแผนภาพประกอบ) Direct3D มีคุณสมบัติมากมายที่ GDI ไม่มี
Direct3D เป็น API กราฟิก แบบ Immediate modeมันให้ส่วนต่อประสานระดับต่ำสำหรับฟังก์ชัน 3 มิติทุกอย่างของการ์ดแสดงผล ( การแปลง การตัด การจัดแสงวัสดุพื้นผิวการบัฟเฟอร์ความลึกและ อื่นๆ) เดิมทีเคยมีส่วนประกอบ แบบ Retained mode ที่มีระดับสูงกว่าแต่ปัจจุบันได้ยกเลิกอย่างเป็นทางการแล้ว
โหมด Direct3D immediate นำเสนอแนวคิดหลักสามประการ ได้แก่อุปกรณ์ทรัพยากรและSwap Chains (ดูแผนภาพประกอบ) อุปกรณ์ มีหน้าที่ในการเรนเดอร์ฉาก 3 มิติ โดยมีอินเทอร์เฟซที่มีความสามารถในการเรนเดอร์ที่แตกต่างกัน ตัวอย่างเช่น อุปกรณ์ แบบโมโนให้การเรนเดอร์สีขาวดำ ในขณะที่ อุปกรณ์ RGBเรนเดอร์สี มีอุปกรณ์อยู่สี่ประเภท:
- อุปกรณ์ HAL ( Hardware Abstraction Layer ): สำหรับอุปกรณ์ที่รองรับการเร่งความเร็วด้วยฮาร์ดแวร์

- อุปกรณ์ อ้างอิง : จำลองฟังก์ชันใหม่ที่ยังไม่มีในฮาร์ดแวร์ จำเป็นต้องติดตั้ง Direct3D SDKเพื่อใช้งานอุปกรณ์ประเภทนี้
- อุปกรณ์ อ้างอิงว่าง : ไม่ทำอะไรเลย อุปกรณ์นี้จะถูกใช้เมื่อไม่ได้ติดตั้ง SDK และมีการร้องขออุปกรณ์อ้างอิง
- อุปกรณ์ ซอฟต์แวร์แบบเสียบปลั๊ก : ทำการเรนเดอร์ซอฟต์แวร์ อุปกรณ์นี้ถูกนำมาใช้ในDirectX 9.0 [ 140 ]
อุปกรณ์ทุกชิ้นมีอย่างน้อยหนึ่งสวอปเชนสวอปเชนประกอบด้วย พื้นผิว แบ็คบัฟเฟอร์ หนึ่งหรือมากกว่านั้น การแสดงผลเกิดขึ้นในแบ็คบัฟเฟอร์
นอกจากนี้ อุปกรณ์ยังประกอบด้วยชุดทรัพยากรซึ่งเป็นข้อมูลเฉพาะที่ใช้ในระหว่างการแสดงผล โดยแต่ละทรัพยากรมีคุณลักษณะสี่ประการ:
- ประเภท : กำหนดประเภทของทรัพยากร: พื้นผิว, ปริมาตร, เท็กซ์เจอร์, เท็กซ์เจอร์ลูกบาศก์, เท็กซ์เจอร์ปริมาตร, เท็กซ์เจอร์พื้นผิว, บัฟเฟอร์ดัชนี หรือบัฟเฟอร์จุดยอด
- พูล : [ 141 ]อธิบายวิธีการจัดการทรัพยากรโดยรันไทม์และตำแหน่งที่จัดเก็บ ใน พูล เริ่มต้นทรัพยากรจะมีอยู่เฉพาะในหน่วยความจำของอุปกรณ์เท่านั้น ทรัพยากรใน พูล ที่จัดการจะถูกจัดเก็บไว้ในหน่วยความจำของระบบ และจะถูกส่งไปยังอุปกรณ์เมื่อจำเป็น ทรัพยากรใน พูล หน่วยความจำของระบบจะมีอยู่เฉพาะในหน่วยความจำของระบบเท่านั้น สุดท้าย พูล ชั่วคราวโดยพื้นฐานแล้วเหมือนกับพูลหน่วยความจำของระบบ แต่ทรัพยากรจะไม่ถูกจำกัดด้วยข้อจำกัดของฮาร์ดแวร์
- รูปแบบ : อธิบายโครงสร้างของข้อมูลทรัพยากรในหน่วยความจำ ตัวอย่างเช่นค่ารูปแบบD3DFMT_R8G8B8 หมายถึง ความลึกของสี 24 บิต (8 บิตสำหรับสีแดง 8 บิตสำหรับสีเขียว และ 8 บิตสำหรับสีน้ำเงิน)
- การใช้งาน : อธิบายวิธีการใช้งานทรัพยากรโดยแอปพลิเคชันโดยใช้บิตแฟล็กบิตแฟล็กเหล่านี้จะกำหนดว่าทรัพยากรใดถูกใช้ในรูปแบบการเข้าถึงแบบไดนามิกหรือแบบคงที่ ค่าของทรัพยากรแบบคงที่จะไม่เปลี่ยนแปลงหลังจากโหลดแล้ว ในขณะที่ค่าของทรัพยากรแบบไดนามิกอาจถูกแก้ไขได้
Direct3D รองรับโหมดการแสดงผลสองโหมด:
- โหมดเต็มหน้าจอ: แอปพลิเคชัน Direct3D จะสร้างเอาต์พุตกราฟิกทั้งหมดสำหรับอุปกรณ์แสดงผล ในโหมดนี้ Direct3D จะจับการสลับหน้าจอ Alt-Tab โดยอัตโนมัติ และตั้งค่า/กู้คืนความละเอียดหน้าจอและรูปแบบพิกเซลโดยไม่ต้องมีการแทรกแซงจากโปรแกรมเมอร์ ซึ่งก่อให้เกิดปัญหามากมายสำหรับการดีบักเนื่องจาก 'โหมดความร่วมมือแบบพิเศษ'
- โหมดหน้าต่าง: ผลลัพธ์จะแสดงภายในพื้นที่ของหน้าต่าง Direct3D สื่อสารกับGDIเพื่อสร้างเอาต์พุตกราฟิกบนหน้าจอแสดงผล โหมดหน้าต่างสามารถมีประสิทธิภาพในระดับเดียวกับโหมดเต็มหน้าจอ ขึ้นอยู่กับการรองรับของไดรเวอร์
ท่อส่ง

Microsoft Direct3D 11 API กำหนดกระบวนการแปลงกลุ่มของจุดยอด พื้นผิว บัฟเฟอร์ และสถานะให้เป็นภาพบนหน้าจอ กระบวนการนี้เรียกว่าไปป์ไลน์การเรนเดอร์ที่มีหลายขั้นตอนที่แตกต่างกัน ขั้นตอนต่างๆ ของไปป์ไลน์ Direct3D 11 ได้แก่: [ 142 ]
- ตัวประกอบอินพุต : [ 143 ]อ่านข้อมูลจุดยอดจากบัฟเฟอร์จุดยอดที่แอปพลิเคชันจัดหาให้และส่งต่อไปยังไปป์ไลน์
- Vertex Shader : [ 144 ]ดำเนินการกับจุดยอดทีละจุด เช่น การแปลง การหุ้มผิว หรือการให้แสง
- Hull-Shader : [ 145 ]ดำเนินการกับชุดของจุดควบคุมแพทช์ และสร้างข้อมูลเพิ่มเติมที่เรียกว่าค่าคงที่แพทช์
- เทสเซลเลเตอร์ : [ 146 ]แบ่งย่อยเรขาคณิตเพื่อสร้างการแสดงแทนลำดับที่สูงขึ้นของตัวถัง
- Domain-Shader : [ 147 ]ดำเนินการกับจุดยอดที่ส่งออกโดยขั้นตอนการแบ่งพื้นที่ ในลักษณะเดียวกับ vertex shader
- Geometry Shader : [ 148 ]ประมวลผลรูปทรงพื้นฐานทั้งหมด เช่น สามเหลี่ยม จุด หรือเส้น เมื่อได้รับรูปทรงพื้นฐานแล้ว ขั้นตอนนี้จะทิ้งรูปทรงพื้นฐานนั้น หรือสร้างรูปทรงพื้นฐานใหม่หนึ่งรูปหรือมากกว่านั้น
- สตรีมเอาต์พุต : [ 149 ]สามารถเขียนผลลัพธ์ของขั้นตอนก่อนหน้าลงในหน่วยความจำได้ ซึ่งมีประโยชน์ในการหมุนเวียนข้อมูลกลับเข้าสู่ไปป์ไลน์
- Rasterizer : [ 150 ] [ 151 ]แปลงรูปทรงพื้นฐานเป็นพิกเซล แล้วป้อนพิกเซลเหล่านี้เข้าไปใน pixel shader Rasterizer อาจทำงานอื่นๆ เช่น การตัดส่วนที่ไม่สามารถมองเห็นได้ หรือการประมาณค่าข้อมูลจุดยอดเป็นข้อมูลต่อพิกเซล
- Pixel Shader : [ 152 ]กำหนดสีพิกเซลสุดท้ายที่จะเขียนลงใน render target และยังสามารถคำนวณค่าความลึกที่จะเขียนลงใน depth buffer ได้อีกด้วย
- การรวมเอาต์พุต : [ 153 ]รวมข้อมูลเอาต์พุตประเภทต่างๆ ( ค่า พิกเซลเชเดอร์ , การผสมอัลฟ่า, ความลึก/สเตนซิล...) เพื่อสร้างผลลัพธ์สุดท้าย
ขั้นตอนต่างๆ ในไปป์ไลน์ที่แสดงด้วยกรอบวงกลมนั้นสามารถตั้งโปรแกรมได้อย่างสมบูรณ์ แอปพลิเคชันนี้มีโปรแกรมเชเดอร์ที่อธิบายการทำงานที่แน่นอนที่จะต้องทำในแต่ละขั้นตอน หลายขั้นตอนเป็นทางเลือกและสามารถปิดใช้งานได้ทั้งหมด
ระดับคุณสมบัติ
ใน Direct3D เวอร์ชัน 5 ถึง 9 เมื่อ API เวอร์ชันใหม่เพิ่มการรองรับความสามารถของฮาร์ดแวร์ใหม่ ๆ ส่วนใหญ่เป็นตัวเลือกเสริม – ผู้ผลิตกราฟิกแต่ละรายจะรักษาชุดคุณสมบัติที่รองรับของตนเองไว้ นอกเหนือจากฟังก์ชันพื้นฐานที่จำเป็น การรองรับคุณสมบัติแต่ละอย่างต้องกำหนดโดยใช้ "บิตความสามารถ" หรือ "caps" ทำให้การเขียนโปรแกรมกราฟิกข้ามผู้ผลิตเป็นงานที่ซับซ้อน
Direct3D 10 นำเสนอชุดข้อกำหนดฮาร์ดแวร์ที่จำเป็นซึ่งง่ายขึ้นมาก โดยอิงจากความสามารถยอดนิยมส่วนใหญ่ของ Direct3D 9 ซึ่งการ์ดกราฟิกที่รองรับทั้งหมดต้องปฏิบัติตาม โดยมีเพียงความสามารถเสริมเล็กน้อยสำหรับรูปแบบพื้นผิวและการดำเนินการที่รองรับเท่านั้น
Direct3D 10.1 เพิ่มข้อกำหนดฮาร์ดแวร์ที่จำเป็นใหม่บางประการ และเพื่อให้ยังคงเข้ากันได้กับฮาร์ดแวร์และไดรเวอร์ 10.0 คุณสมบัติเหล่านี้จึงถูกห่อหุ้มไว้ในสองชุดที่เรียกว่า "ระดับคุณสมบัติ" โดยระดับ 10.1 เป็นซูเปอร์เซ็ตของระดับ 10.0 เมื่อ Direct3D 11.0, 11.1 และ 12 เพิ่มการรองรับฮาร์ดแวร์ใหม่ ความสามารถที่จำเป็นใหม่เหล่านี้จึงถูกจัดกลุ่มเพิ่มเติมในระดับคุณสมบัติที่สูงขึ้น[ 56 ]
Direct3D 11 ยังได้แนะนำ "10level9" ซึ่งเป็นชุดย่อยของ API Direct3D 10 ที่มีฟีเจอร์สามระดับซึ่งครอบคลุมการ์ด Direct3D 9 ต่างๆ ที่มีไดรเวอร์WDDM และ Direct3D 11.1 ได้นำฟีเจอร์เสริมบางอย่างกลับมาใช้ใหม่สำหรับทุกระดับ[ 154 ]ซึ่งได้รับการขยายใน Direct3D 11.2 และเวอร์ชันต่อมา
แนวทางนี้ช่วยให้นักพัฒนาสามารถรวมไปป์ไลน์การเรนเดอร์และใช้ API เวอร์ชันเดียวบนฮาร์ดแวร์ทั้งรุ่นใหม่และรุ่นเก่า โดยใช้ประโยชน์จากประสิทธิภาพและการปรับปรุงการใช้งานในรันไทม์รุ่นใหม่[ 60 ]
มีการเพิ่มระดับฟีเจอร์ใหม่ ๆ ในเวอร์ชันที่อัปเดตของ API และโดยทั่วไปจะประกอบด้วย:
- คุณสมบัติหลักที่จำเป็น – (Direct3D 11.0, 12)
- คุณสมบัติเล็กน้อยบางประการ (Direct3D 10.1, 11.1) หรือ
- ชุดคุณสมบัติทั่วไปที่เคยเป็นตัวเลือกเสริม (Direct3D 11.0 "10 ระดับ 9")
แต่ละระดับบนเป็นซูเปอร์เซ็ตที่เข้มงวดของระดับล่าง โดยมีเพียงคุณสมบัติใหม่หรือคุณสมบัติเสริมบางส่วนเท่านั้นที่ย้ายไปยังฟังก์ชันหลักในระดับบน[ 67 ]คุณสมบัติขั้นสูงเพิ่มเติมในการแก้ไข API Direct3D ครั้งใหญ่ เช่น โมเดลเชเดอร์ใหม่และขั้นตอนการเรนเดอร์ จะถูกเปิดเผยเฉพาะบนฮาร์ดแวร์ระดับบนเท่านั้น[ 65 ] [ 66 ]
มีความสามารถแยกต่างหากเพื่อระบุการสนับสนุนสำหรับการดำเนินการพื้นผิวเฉพาะและรูปแบบทรัพยากร โดยจะระบุตามรูปแบบพื้นผิวแต่ละแบบโดยใช้แฟล็กความสามารถแบบผสมผสาน[ 155 ] [ 156 ]
ระดับฟีเจอร์จะใช้เครื่องหมายขีดล่างเป็นตัวคั่น (เช่น "12_1") ในขณะที่เวอร์ชัน API/รันไทม์จะใช้จุด (เช่น "Direct3D 11.4")
ระดับ Direct3D 11
ใน Direct3D 11.4 สำหรับ Windows 10 มีระดับคุณสมบัติเก้าระดับที่จัดเตรียมโดยD3D_FEATURE_LEVELโครงสร้าง ระดับ 9_1, 9_2 และ 9_3 (รวมเรียกว่าDirect3D 10 ระดับ 9 ) ห่อหุ้มคุณสมบัติต่างๆ ของการ์ด Direct3D 9 ยอดนิยมอีกครั้ง ระดับ 10_0 และ 10_1 หมายถึงเวอร์ชันดั้งเดิมของ Direct3D 10 ตามลำดับ[ 65 ] 11_0 และ 11_1 สะท้อนถึงคุณสมบัติที่แนะนำใน API และรันไทม์ Direct3D 11 และ Direct3D 11.1 ตามลำดับ ในขณะที่ระดับ 12_0 และ 12_1 สอดคล้องกับระดับคุณสมบัติใหม่ที่แนะนำใน API Direct3D 12
| ระดับคุณสมบัติ | คุณสมบัติฮาร์ดแวร์ที่จำเป็น | คุณสมบัติเสริม |
|---|---|---|
| 9_1 | Shader Model 2.0 ( vs_2_0/ ps_2_0), เท็กซ์เจอร์ 2K, เท็กซ์เจอร์ปริมาตร, การสอบถามเหตุการณ์, BC1-3 (หรือที่รู้จักในชื่อ DXTn), และความสามารถเฉพาะอื่นๆ อีกเล็กน้อย | ไม่มีข้อมูล |
| 9_2 | การสอบถามการบดบัง, รูปแบบจุดลอยตัว (ไม่มีการผสมผสาน), ฝาปิดแบบขยาย, คุณสมบัติ 9_1 ทั้งหมด | |
| 9_3 | vs_2_aพร้อมps_2_xการสร้างอินสแตนซ์และขีดจำกัดเชเดอร์เพิ่มเติม เท็กซ์เจอร์ 4K เป้าหมายการเรนเดอร์หลายรายการ (4 MRT) การผสมแบบจุดลอยตัว (แบบจำกัด) และคุณสมบัติทั้งหมดของ 9_2 | |
| 10_0 | Shader Model 4.0, geometry shader, stream out, alpha-to-coverage, เท็กซ์เจอร์ 8K, เท็กซ์เจอร์ MSAA, stencil สองด้าน, มุมมองเป้าหมายการเรนเดอร์ทั่วไป, texture arrays, BC4/BC5, รองรับรูปแบบ floating-point เต็มรูปแบบ, คุณสมบัติทั้งหมดของ 9_3 | การดำเนินการผสมเชิงตรรกะ, DirectCompute (CS 4.0/4.1), รูปแบบพิกเซลแบบขยาย[ 154 ] |
| 10_1 | Shader Model 4.1, อาร์เรย์ cubemap, MSAA แบบขยาย, คุณสมบัติ 10_0 ทั้งหมด | |
| 11_0 | Shader Model 5.0/5.1, hull & domain shaders, DirectCompute (CS 5.0/5.1), เท็กซ์เจอร์ 16K, BC6H/BC7, รูปแบบพิกเซลแบบขยาย, คุณสมบัติ 10_1 ทั้งหมด | |
| 11_1 | การดำเนินการผสมผสานเชิงตรรกะ การแรสเตอร์ไรเซชันที่ไม่ขึ้นกับเป้าหมาย โดรนในทุกขั้นตอนของไปป์ไลน์ด้วยจำนวนช่องที่เพิ่มขึ้น การเรนเดอร์เฉพาะโดรนด้วยจำนวนตัวอย่างที่กำหนด การชดเชยบัฟเฟอร์คงที่ และการอัปเดตบางส่วน ทั้งหมดนี้เป็นคุณสมบัติของเวอร์ชัน 11_0 | |
| 12_0 | ทรัพยากรแบบเรียงต่อกัน ระดับ 2 (Texture2D), การโหลด UAV แบบระบุประเภท (รูปแบบเพิ่มเติม) | |
| 12_1 | การสร้างภาพแรสเตอร์แบบอนุรักษ์นิยม ระดับ 1, มุมมองที่เรียงลำดับของตัวสร้างภาพแรสเตอร์ |
Direct3D 12 ระดับ
Direct3D 12 สำหรับ Windows 10 ต้องการฮาร์ดแวร์กราฟิกที่สอดคล้องกับระดับคุณสมบัติ 11_0 และ 11_1 ซึ่งรองรับการแปลที่อยู่หน่วยความจำเสมือนและต้องการไดรเวอร์ WDDM 2.0 มีระดับคุณสมบัติใหม่สองระดับคือ 12_0 และ 12_1 ซึ่งรวมถึงคุณสมบัติใหม่บางอย่างที่เปิดเผยโดย Direct3D 12 ซึ่งเป็นตัวเลือกในระดับ 11_0 และ 11_1 [ 157 ]คุณสมบัติบางอย่างที่เคยเป็นตัวเลือกจะถูกจัดเรียงใหม่เป็นพื้นฐานในระดับ 11_0 และ 11_1 Shader Model 6.0 ได้รับการเผยแพร่พร้อมกับ Windows 10 Creators Update และต้องการ Windows 10 Anniversary Update และไดรเวอร์ WDDM 2.1
| ระดับ | คุณสมบัติที่จำเป็น | คุณสมบัติเสริม |
|---|---|---|
| 11_0 | คุณสมบัติ 11_0 ที่จำเป็นทั้งหมดจาก Direct3D 11, Shader Model 5.1, Resource binding Tier 1 | การดำเนินการผสมเชิงตรรกะ การดำเนินการจุดลอยตัวความแม่นยำสองเท่า (64 บิต) ความแม่นยำจุดลอยตัวขั้นต่ำ (10 หรือ 16 บิต) การผูกทรัพยากร (สามระดับ), ทรัพยากรแบบเรียงต่อกัน (สี่ระดับ), การแรสเตอร์แบบอนุรักษ์นิยม (สามระดับ), ค่าอ้างอิงสเตนซิลจาก Pixel Shader, มุมมองที่เรียงลำดับโดยตัวแรสเตอร์, การโหลด UAV แบบมีประเภทสำหรับรูปแบบเพิ่มเติม, การสร้างอินสแตนซ์มุมมอง โมเดลเชเดอร์ 6.0–6.7 เมตาคอมมานด์, อัตราการแรเงาแบบแปรผัน, เรย์เทรซซิ่ง, เมชเชเดอร์, ฟีดแบ็กของแซมpler คุณสมบัติเสริมอื่นๆ[ 158 ] |
| 11_1 | ||
| 12_0 | การผูกทรัพยากรระดับ 2, ทรัพยากรแบบเรียงต่อกันระดับ 2 (Texture2D), การโหลด UAV แบบมีประเภท (รูปแบบเพิ่มเติม), โมเดล Shader 6.0 | |
| 12_1 | การสร้างภาพแรสเตอร์แบบอนุรักษ์นิยม ระดับ 1, มุมมองที่เรียงลำดับของตัวสร้างภาพแรสเตอร์ | |
| 12_2 | DirectX 12 Ultimate : Shader Model 6.5, Raytracing Tier 1.1, Mesh Shaders, Variable-Rate Shading, Sampler Feedback, Resource Binding Tier 3, Tiled Resources Tier 3 (Texture3D), Conservative Rasterization Tier 3, พื้นที่แอดเดรสเสมือน 40 บิต |
Direct3D 12 นำเสนอโมเดลการผูกทรัพยากรที่ได้รับการปรับปรุงใหม่ ซึ่งช่วยให้สามารถควบคุมหน่วยความจำได้อย่างชัดเจน อ็อบเจ็กต์ "มุมมองทรัพยากร" นามธรรม[ 159 ]ขณะนี้ถูกแทนด้วยตัวอธิบายทรัพยากร ซึ่งถูกจัดสรรโดยใช้ฮีปและตารางหน่วยความจำ[ 160 ]ระดับการผูกทรัพยากรจะกำหนดจำนวนทรัพยากรสูงสุดที่สามารถเข้าถึงได้โดยใช้ CBV (มุมมองบัฟเฟอร์คงที่), SRV (มุมมองทรัพยากรเชเดอร์) และ UAV (มุมมองการเข้าถึงแบบไม่เรียงลำดับ) รวมถึงหน่วยตัวอย่างพื้นผิว ฮาร์ดแวร์ระดับ 3 อนุญาตให้ใช้ทรัพยากรแบบไม่ผูกอย่างสมบูรณ์โดยมีข้อจำกัดเฉพาะขนาดของฮีปตัวอธิบาย ในขณะที่ฮาร์ดแวร์ระดับ 1 และระดับ 2 กำหนดข้อจำกัดบางประการเกี่ยวกับจำนวนตัวอธิบาย ("มุมมอง") ที่สามารถใช้งานพร้อมกันได้[ 161 ] [ 162 ]
| ข้อจำกัดด้านทรัพยากร | ระดับ 1 | ระดับ 2 | ระดับ 3 |
|---|---|---|---|
| ตัวอธิบายในฮีป CBV/SRV/UAV | 1 ล้าน | 1 ล้าน | >1 ล้าน |
| CBV ต่อขั้นตอนเชเดอร์ | 14 | 14 | กองเต็ม |
| SRV ต่อขั้นตอนเชเดอร์ | 128 | กองเต็ม | |
| โดรนในทุกขั้นตอน | 8, 64 † | 64 | กองเต็ม |
| ตัวสุ่มตัวอย่างต่อขั้นตอนเชเดอร์ | 16 | กองเต็ม | |
| † 64 สล็อตบนฮาร์ดแวร์ระดับฟีเจอร์ 11_1 | |||
มัลติเธรดดิ้ง
โมเดลไดรเวอร์ WDDM ใน Windows Vista และเวอร์ชันที่สูงกว่า รองรับบริบทการทำงาน (หรือเธรด) จำนวนมากได้อย่างไม่จำกัด ทั้งในระดับฮาร์ดแวร์หรือซอฟต์แวร์ ในขณะที่ Windows XP รองรับเฉพาะการเข้าถึง Direct3D แบบมัลติทาสก์เท่านั้น โดยที่แอปพลิเคชันแยกต่างหากสามารถทำงานในหน้าต่างต่างๆ และใช้การเร่งความเร็วด้วยฮาร์ดแวร์ได้ และระบบปฏิบัติการมีการควบคุมที่จำกัดเกี่ยวกับสิ่งที่ GPU สามารถทำได้ และไดรเวอร์สามารถสลับเธรดการทำงานได้อย่างอิสระ
ความสามารถในการเรียกใช้รันไทม์ในโหมดมัลติเธรดได้รับการแนะนำในรันไทม์ Direct3D 11 แต่ละบริบทการทำงานจะได้รับมุมมองทรัพยากรของ GPU บริบทการทำงานได้รับการปกป้องจากกันและกัน อย่างไรก็ตาม แอปพลิเคชันที่ไม่พึงประสงค์หรือเขียนไม่ดีอาจควบคุมการทำงานในไดรเวอร์โหมดผู้ใช้และอาจเข้าถึงข้อมูลจากกระบวนการอื่นภายในหน่วยความจำ GPU โดยการส่งคำสั่งที่แก้ไขแล้ว ถึงแม้จะได้รับการป้องกันจากการเข้าถึงของแอปพลิเคชันอื่นแล้ว แอปพลิเคชันที่เขียนอย่างดีก็ยังจำเป็นต้องปกป้องตัวเองจากความล้มเหลวและการสูญเสียอุปกรณ์ที่เกิดจากแอปพลิเคชันอื่น
ระบบปฏิบัติการจะจัดการเธรดทั้งหมดด้วยตนเอง ทำให้ฮาร์ดแวร์สามารถสลับจากเธรดหนึ่งไปยังอีกเธรดหนึ่งได้ตามความเหมาะสม และยังจัดการการจัดการหน่วยความจำและการแบ่งหน้า (ไปยังหน่วยความจำระบบและไปยังดิสก์) ผ่านการจัดการหน่วยความจำแบบบูรณาการระหว่างระบบปฏิบัติการและเคอร์เนล
การสลับบริบทที่ละเอียดกว่า กล่าวคือ สามารถสลับเธรดการทำงานสองเธรดที่ระดับคำสั่ง shader แทนที่จะเป็นระดับคำสั่งเดียวหรือแม้แต่กลุ่มคำสั่ง ได้ถูกนำมาใช้ใน WDDM/DXGI 1.2 ซึ่งมาพร้อมกับ Windows 8 [ 86 ]ซึ่งช่วยแก้ปัญหาการจัดตารางเวลาที่อาจเกิดขึ้นเมื่อแอปพลิเคชันมีการดำเนินการคำสั่งเดียว/กลุ่มคำสั่งเป็นเวลานานมาก และจะต้องถูกยุติโดยตัวจับเวลาเฝ้าระวังของระบบปฏิบัติการ[ 163 ]
WDDM 2.0 และ DirectX 12 ได้รับการออกแบบใหม่เพื่อให้สามารถเรียกใช้งานการวาดภาพแบบมัลติเธรดได้อย่างเต็มที่ ซึ่งทำได้โดยการทำให้ทรัพยากรทั้งหมดไม่สามารถเปลี่ยนแปลงได้ (กล่าวคือ อ่านอย่างเดียว) การจัดลำดับสถานะการเรนเดอร์ และการใช้ชุดการเรียกใช้งานการวาดภาพ วิธีนี้ช่วยหลีกเลี่ยงการจัดการทรัพยากรที่ซับซ้อนในไดรเวอร์โหมดเคอร์เนล ทำให้สามารถเรียกใช้งานไดรเวอร์โหมดผู้ใช้ซ้ำได้หลายครั้งผ่านบริบทการทำงานพร้อมกันที่จัดหาโดยเธรดการเรนเดอร์ที่แยกต่างหากในแอปพลิเคชันเดียวกัน
Direct3D Mobile
Direct3D Mobile พัฒนามาจาก Direct3D แต่ใช้หน่วยความจำ น้อย กว่าWindows CEให้การสนับสนุน Direct3D Mobile [ 164 ]
การนำไปใช้งานทางเลือก
มีการใช้งาน API Direct3D ทางเลือกอื่นๆ ดังต่อไปนี้ ซึ่งมีประโยชน์สำหรับแพลตฟอร์มที่ไม่ใช่ Windows และสำหรับฮาร์ดแวร์ที่ไม่มีการรองรับ DX บางเวอร์ชัน:
- DXVK – เลเยอร์การแปลแบบโอเพนซอร์ส ที่ใช้ Vulkanสำหรับ Direct3D 8/9/10/11 ซึ่งช่วยให้สามารถเรียกใช้แอปพลิเคชัน 3 มิติบน Linuxโดยใช้ Wine [ 165 ] [ 166 ] Proton / Steam [ 167 ]ใช้สำหรับ Linux DXVK สามารถเรียกใช้เกม Windows สมัยใหม่จำนวนมากภายใต้ Linux ได้
- D7VK – ฟอร์กของ DXVK สำหรับ Direct3D 3, 5, 6 และ 7 โดยเฉพาะ[ 168 ] [ 169 ] [ 170 ] [ 171 ]
- D8VK – เวอร์ชันที่ล้าสมัยของ DXVK สำหรับเพิ่มการรองรับ Direct3D 8 บน Linux [ 172 ]มันถูกรวมเข้ากับ DXVK เวอร์ชัน 2.4 ซึ่งวางจำหน่ายเมื่อวันที่ 10 กรกฎาคม 2024
- D9VK – เวอร์ชันที่ล้าสมัยของ DXVK สำหรับเพิ่มการรองรับ Direct3D 9 [ 173 ]ซึ่งรวมอยู่ใน Steam/Proton บน Linux [ 174 ]เมื่อวันที่ 16 ธันวาคม 2019 D9VK ได้ถูกรวมเข้ากับ DXVK [ 175 ]
- Gallium Nine – Gallium Nine ทำให้สามารถเรียกใช้แอปพลิเคชัน Direct3D 9 บน Linux ได้โดยตรง กล่าวคือโดยไม่ต้องมีการแปลการเรียกใช้ใดๆ ซึ่งทำให้ได้ความเร็วใกล้เคียงกับความเร็วแบบเนทีฟ ขึ้นอยู่กับ Wine และ Mesa [ 176 ] [ 177 ]
- vkd3d – vkd3d เป็นไลบรารีกราฟิก 3 มิติแบบโอเพนซอร์สที่สร้างขึ้นบน Vulkan ซึ่งช่วยให้สามารถเรียกใช้แอปพลิเคชัน Direct3D 12 บนVulkanได้[ 178 ]โดยส่วนใหญ่ใช้โดยโครงการWine [ 179 ] [ 180 ]และตอนนี้รวมอยู่ในโครงการ Proton ของ Valve ที่รวมอยู่กับ Steam บน Linux
- WineD3D – โครงการโอเพนซอร์ส Wine มีการใช้งาน API ของ Direct3D ที่ใช้งานได้จริงผ่านการแปลงเป็นOpenGL [ 181 ] การใช้งานของ Wine ยังสามารถทำงานบน Windows ได้ภายใต้เงื่อนไขบางประการ [ 182 ]
เครื่องมือที่เกี่ยวข้อง
ดี3ดีเอ็กซ์
Direct3D มาพร้อมกับ D3DX ซึ่งเป็นไลบรารีเครื่องมือที่ออกแบบมาเพื่อทำการคำนวณทางคณิตศาสตร์ทั่วไปบนเวกเตอร์เมทริกซ์และสี รวมถึงการคำนวณเมทริกซ์ การมองและการฉาย ภาพการประมาณค่าแบบสปลายน์และงานที่ซับซ้อนกว่านั้นอีกหลายอย่าง เช่น การคอมไพล์หรือการประกอบเชเดอร์ที่ใช้สำหรับการเขียนโปรแกรมกราฟิก 3 มิติ การ จัดเก็บ ภาพเคลื่อนไหวโครงกระดูก แบบบีบอัด และการเรียงซ้อนเมทริกซ์ นอกจากนี้ยังมีฟังก์ชันหลายอย่างที่ให้การดำเนินการที่ซับซ้อนบนเมช 3 มิติ เช่น การคำนวณพื้นที่สัมผัส การลดความซับซ้อนของเมช การถ่ายโอนความสว่างที่คำนวณไว้ล่วงหน้าการเพิ่มประสิทธิภาพเพื่อความเป็นมิตรต่อแคชจุดยอดและการแยกส่วน และตัวสร้างเมชข้อความ 3 มิติ คุณสมบัติ 2 มิติประกอบด้วยคลาสสำหรับการวาดเส้นในพื้นที่หน้าจอ ข้อความ และระบบอนุภาคแบบส ไป รต์ ฟังก์ชันเชิงพื้นที่ประกอบด้วยรูทีนการตัดกันต่างๆ การแปลงจาก/ไปยังพิกัดแบรีเซนทริกและ ตัวสร้าง กล่องขอบเขต /ทรงกลม D3DX มีให้ในรูปแบบไลบรารีการเชื่อมโยงแบบไดนามิก (DLL) D3DX ถูกยกเลิกการใช้งานตั้งแต่ Windows 8 เป็นต้นไป และไม่สามารถใช้ในแอป Windows Store ได้[ 183 ]
คุณสมบัติบางอย่างที่มีอยู่ใน D3DX เวอร์ชันก่อนหน้าถูกลบออกใน Direct3D 11 และตอนนี้มีให้ในรูปแบบซอร์สแยกต่างหาก: [ 184 ]
- Windows SDK และ Visual Studio [ 185 ]
- ส่วนใหญ่ของไลบรารีคณิตศาสตร์ถูกลบออกไปแล้ว ไมโครซอฟต์แนะนำให้ใช้ไลบรารีคณิตศาสตร์ DirectX แทน
- คณิตศาสตร์ฮาร์มอนิกทรงกลมถูกลบออกและตอนนี้ถูกแจกจ่ายเป็นซอร์สโค้ด[ 186 ]
- เฟรมเวิร์ก Effect ถูกลบออกและตอนนี้มีการเผยแพร่เป็นซอร์สโค้ดผ่าน CodePlex [ 187 ]
- อินเทอร์เฟซ Mesh และฟังก์ชันเรขาคณิตถูกลบออกและตอนนี้มีการแจกจ่ายเป็นซอร์สโค้ดผ่าน CodePlex ภายใต้ไลบรารีการประมวลผลเรขาคณิต DirectXMesh [ 188 ]
- ฟังก์ชันพื้นผิวถูกลบออกและตอนนี้มีการแจกจ่ายเป็นซอร์สโค้ดผ่าน CodePlex ภายใต้ไลบรารีการประมวลผลพื้นผิว DirectXTex [ 189 ]
- ตัวช่วยทั่วไปถูกลบออกและตอนนี้ถูกเผยแพร่เป็นซอร์สโค้ดผ่าน CodePlex ภายใต้โครงการ DirectX Tool Kit (DirectXTK) [ 190 ]
- แผนที่พื้นผิวไอโซชาร์ตถูกลบออกและตอนนี้เผยแพร่เป็นซอร์สโค้ดผ่าน CodePlex ภายใต้โครงการ UVAtlas [ 191 ]
ดีเอ็กซ์ยูที
DXUT (เรียกอีกอย่างว่าเฟรมเวิร์กตัวอย่าง) เป็นเลเยอร์ที่สร้างขึ้นบน API ของ Direct3D เฟรมเวิร์กนี้ออกแบบมาเพื่อช่วยให้โปรแกรมเมอร์ใช้เวลาน้อยลงกับงานที่น่าเบื่อ เช่น การสร้างหน้าต่าง การสร้างอุปกรณ์ การประมวลผลข้อความของ Windows และการจัดการเหตุการณ์ของอุปกรณ์ DXUT ถูกลบออกไปใน Windows SDK 8.0 และตอนนี้มีการเผยแพร่เป็นซอร์สโค้ดผ่าน CodePlex [ 192 ]
ดูเพิ่มเติม
- รายชื่อ API สำหรับการเรนเดอร์ภาพ 3 มิติ
- รายชื่อไลบรารีกราฟิก 3 มิติ
- ภาษาเชเดอร์ระดับสูง
- เชเดอร์
- DirectX – ชุด API ที่ใช้ในการทำงานของ Direct3D
- ไดเร็กดรอว์
- กราฟิกคอมพิวเตอร์ 3 มิติ
ลิงก์ภายนอก
- เว็บไซต์ DirectX
- MSDN: กราฟิก DirectX และการเล่นเกม
- DirectX 10: อนาคตของเกมพีซีบทความทางเทคนิคที่กล่าวถึงคุณสมบัติใหม่ของ DirectX 10 และผลกระทบต่อเกมคอมพิวเตอร์
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ไดเร็กต์3ดี
Direct3D เป็น อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน กราฟิก (API) สำหรับ Microsoft Windows ซึ่งเป็นส่วนหนึ่งของ DirectX Direct3D ใช้ในการเรนเดอร์ กราฟิกสามมิติ...
ภาพรวม
Direct3D 6.0 – การสร้างพื้นผิวหลายชั้น Direct3D 7.0 – การแปลงภาพด้วยฮาร์ดแวร์ การตัดภาพ และการจัดแสง (TCL/T&L), DXVA 1.0 Direct3D 8.0 – Pixel Shader 1.0/1.1 และ Vertex Shader 1.0/1.1 [ 9 ] Direct3D 8.1 – Pixel Shader 1.2/1.3/1.
Direct3D 2.0 และ 3.0
ในปี พ.ศ. 2535 Servan Keondjian, Doug Rabson และ Kate Seekings ได้ก่อตั้งบริษัทชื่อ RenderMorphics ซึ่งพัฒนา API กราฟิก 3 มิติชื่อ Reality Lab ซึ่งใช้ในซอฟต์แวร์การสร้างภาพทางการแพทย์และ CAD [ 15 ] มีการเปิดตัว API นี้สองเวอร์ชัน [ 16 ] Microsoft ซื้อ...
Direct3D 4.0
ไม่มีการวางแผนการเปลี่ยนแปลงที่สำคัญใดๆ สำหรับ Direct3D สำหรับ DirectX 4.0 ซึ่งมีกำหนดวางจำหน่ายในช่วงปลายปี 1996 แล้วถูกยกเลิก [ 20 ]