See artikkel vajab toimetamist. (November 2022) Palun aita artiklit toimetada. (Kuidas ja millal see märkus eemaldada?)
See artikkel ootab keeletoimetamist. (November 2022) Kui oskad, siis palun aita artiklit keeleliselt parandada. (Kuidas ja millal see märkus eemaldada?)
Direct3D
Arendaja Microsoft
Esmaväljalase 5. juuni 1996
Viimane väljalase 12 / 29. juuli 2015
OS Microsoft Windows, Xbox One
Platvorm x86, ARM
Veebisait https://docs.microsoft.com/en-us/windows/win32/direct3d

Direct3D on tehnoloogiaettevõtte Microsoft loodud madala taseme graafika rakendusliides, mis on Windowsi operatsioonisüsteemides saadaval alates Windows 95 versioonist, osana DirectX-i rakendusliidete kogust.[1] Direct3D avaldati osana DirectX 2-st. Direct3D aitab joonistada primitiive (nt punktid, jooned, pinnad), kasutades renderdamise toru, ja on võimeline tegema kõrge paralleelsusega operatsioone graafikaprotsessori peal.[2] Direct3D võimaldab teha edasijõudnud 3D-renderdamist ja kasutada riistvaralise kiirenduse teenuseid. Samuti võimaldab Direct3D anda arendajatele ligipääsu graafilistele võimalustele ja võimekustele, eriti suuremat võimsust vajavate lahenduste, näiteks mängude, animatsioonide ja filmide jaoks.[1]

Üldiselt toetavad uuema Direct3D versiooni toetavad riistvaralahendused ka vastavale versioonile eelnevaid Direct3D versioone, näiteks toetab mõni uuem graafikaprotsessor, millel on Direct3D 12 võimekus, ka vanemat Direct3D-d kasutavaid rakendusi, näiteks Direct3D 9 peale ehitatud rakendust.[3] Oluline on seejuures märkida, et Direct3D 12 ise ei toeta Direct3D 9 rakendust, vaid riistvaraliselt on olemas Direct3D 9 tugi. Renderdamise toru toimimist võib visualiseerida kui jõge, millesse voolavad erinevad ojad, millest mõned osad on programmeeritavad, mõned on mõjutatavad.[3] Direct3D sisaldab ka funktsionaalsust, et täita ülesandeid, mis pole seotud graafika kuvamisega, näiteks mahukad, paralleelsust vajavad arvutused. Nende ülesannete jaoks saab kasutada Direct3D arvutusvarjutaja (ing.k Compute Shader) võimalusi.[4]

Direct3D asukoht riistvara-tarkvara hierarhias

Direct3D põhiline konkurent on OpenGL ning selle järg Vulkan. Programme, mis kasutavad Direct3D rakendusliidest, võib olla võimalik kasutada ka teiste operatsioonisüsteemide peal läbi mõne emulaatori või ühilduvuskihi. Üks populaarsemaid ühilduvuskihte Windowsile kirjutatud tarkvara, kaasa arvatud Direct3D-d kasutavad rakendused, käivitamiseks POSIX operatsioonisüsteemidel on Wine. Wine, lühend sõnast Wine Is Not an Emulator, ei ole emulaator, kuna see tõlgendab Windowsi rakendusliideste käsud otse POSIXile sobivateks käskudeks.[5] Aastast 2018 on olnud saadaval Valve'i arendatud Winel põhinev ühilduvuskiht Proton, mis erinevalt Wine'ist toetab ka Direct3D 12 ning on mõeldud eeskätt Steami mängude võimaldamiseks UNIX süsteemidel, kaasa arvatud Valve enda hiljutisel tootel Steam Deck, mis kasutab operatsioonisüsteemina Valve'i arendatud SteamOS-i.[6]

Ülevaade versioonidest

Direct3D 9

Direct3D 9 avaldamine aastal 2002 tõi endaga Microsofti poolt suurema pühendumuse videomängude arendajatele, nende eesmärk selle Direct3D versiooniga oli muuhulgas ka keskenduda mänguarendajate töö efektiivsemaks ja mugavamaks tegemisele.[9] Direct3D 9 uus funktsionaalsus võrreldes varasemate versioonidega sisaldab muuhulgas ujukoma arvudega arvutamise tuge, varem oli toetatud vaid täisarvudega kalkulatsioonid. Palju uuendusi tehti ka varjutajate programmeerimise võimalustes, Direct3D 9 toetas võrreldes Direct3D 8-ga tunduvalt suuremal määral varjutajate programmeeritavust, kusjuures varjutajate programmeerimist oli võimalik teostada universaalselt arusaadavas Microsofti HLSL-is, milles kirjutatud koodi suutis NVIDIA loodud Cg (C for graphics) kompilaator kompileerida vastavale rakendusliidesele (Direct3D 8, Direct3D 9 või OpenGL) sobivaks masinkoodiks. Direct3D renderdamise toru avatus suurenes piksli ja verteksi varjutajate programmeeritavuse (Shader Model 2.0) tõttu tunduvalt.[24]

Skeemil on välja toodud Direct3D 9 renderdamise toru astmed.[25]

Direct3D 10

Direct3D 10 Renderdamise Toru

Direct3D 10 väljalase aastal 2006 tõi endaga Windows XP operatsioonisüsteemi toe kadumise, väljalaskehetkel oli Direct3D 10 saadaval vaid Windows Vista operatsioonisüsteemil. Direct3D 10 riistvara standardid muutusid tunduvalt rangemaks võrreldes Direct3D 9-ga, muutes arendajate töö mugavamaks, kuna nad said olla kindlamad, et nende kirjutatud kood töötab eesmärgipäraselt ja stabiilselt mitmetel erinevatel riistvarakonfiguratsioonidel.[26] Direct3D 10 toetab Varjutaja Mudel 4.0 (Shader Model 4.0) varjutajate funktsionaalsust. Varjutaja Mudel 4.0 toetab muuhulgas >=64000 instruktsiooni pesa, võrreldes Varjutaja Mudel 3.0 >=512 pesaga. Samuti on tugi kuni 8K x 8K 2D tekstuuride suurusele, võrreldes Varjutaja Mudel 3.0 2K x 2K maksimaalse tekstuuride suurusega.[27] Kõik D3D10 renderdamise toru astmed on programmeeritavad HLSL-is. Renderdamise torusse on lisatud täiesti uus aste, geomeetria varjutaja aste, millega on võimalik protsessida terveid primitiive.[10]

Direct3D 10 renderdamise toru on nähtav pildil. Toru astmeid, mis on kujutatud ümmarguste nurkadega kastides, on võimalik programmeerida kasutades Microsofti HLSL programmeerimiskeelt.[28]

Sisend-assembler astme ülesanne on lugeda primitiivide andmeid (punktid, jooned ja/või kolmnurgad) kasutaja täidetud puhvritest ning koostada andmete põhjal primitiivid, mida saavad järgnevad toru astmed kasutada.[29]

Verteksi varjutaja aste teostab sisendi astmest saadud verteksitega operatsioone. Verteksi varjutajad alati opereerivad ühe sisend-verteksi peal ning produtseerivad ühe väljund-verteksi. Verteksi varjutaja aste peab alati olema torus aktiivne, juhul, kui seda ei kasutata, peab siiski looma varjutaja, mis saadab sisendi väljundisse. Iga verteksi varjutaja sisend saab koosneda kuni 16st 32-bitilisest 4 komponendiga vektorist. Verteksi varjutaja aste on programmeeritav HLSL-is.[30]

Geomeetria varjutaja astmes, erinevalt verteksi varjutajast (kus opereeritakse vaid ühe verteksi peal), on sisendiks primitiiv (üks verteks punkti puhul, kaks verteksit joone puhul või kolm verteksit kolmnurga puhul). Geomeetria varjutaja saab võtta sisendis juurde ka primitiiviga ühiseid külgi omavate primitiivide info. Geomeetria varjutaja astme väljundit saab saata kas Striim-väljundi astmesse või Rasterisaatori astmesse. Geomeetria varjutaja on programmeeritav HLSL-is.[31]

Striim-Väljund aste tegeleb talle saadetud andmete pideva väljastamisega (striimimisega) puhvritesse mälus. Mällu striimitud andmeid saab saata kas uuesti toru algusest sisse, või saata kasutuseks mujale. Toetatud on kuni nelja puhvrisse korraga striimimine.[32]

Rasterisaatori aste teostab vektor-informatsiooni (kujundid ja primitiivid) konversiooniga rasterpildiks, mis koosneb pikslitest. Rasterisatsiooni ajal muundatakse iga primitiiv piksliteks. Rasterisaator tegeleb ka verteks-infost perspektiivi loomisega, primitiivide info teiseldamisega kahedimensioonilisele vaatenurgale ning määratlemisega, mis moel rakendada piksli varjutajat.[33]

Piksli varjutaja aste võimaldab rikkaid varjutuse võimalusi, näiteks piksli-kaupa valgustus ja järeltöötlus. Piksli varjutaja kombineerib konstandid, teksuurid, verteksite väärtused ja muud andmed et produtseerida piksli kaupa väljundeid. Piksli varjutaja aste on võimalik vahele jätta. Piksli varjutaja võtab kuni 32 32-bitist 4 komponendiga sisendit (16 tükki juhul kui geomeetria varjutaja aste jäeti vahele). Piksli varjutaja väljastab kuni 8 32-bitist 4 komponendiga värvi. Piksli varjutaja on programmeeritav HLSL-is[34]

Väljund-Liitja aste genereerib lõpliku renderdatud piksli, kasutades kombinatsiooni renderdamise toru astmete väljundite andmetest ja puhvrites asetsevatest andmetest. Selles astmes otsustatakse, millised pikslis on nähtavad ning teostatakse viimased piksli värvide korrektuurid.[35]

Direct3D 11

Direct3D 11 avaldati aastal 2009 koos operatsioonisüsteemiga Windows 7. Direct3D 11 tõi esimese Direct3D versioonina arvutusvarjutaja, Compute Shader, toe, mille abil on võimalik kasutada Direct3D funktsionaalsust, et täita mitte-graafilisi arvutusi. Sarnaselt teiste varjutajatega saab seda varjutajat programmeerida HLSL-is, kuid seal sarnasused ka lõppevad. Arvutusvarjutaja suudab ära kasutada tänapäevaste graafikaprotsessorite suurt hulka paralleelseid protsessorituumi, et täita kiirelt erinevaid arvutusülesandeid.[4] Direct3D 11 toob endaga Varjutaja Mudel 5.0-i, mis muuhulgas toetab varjutajate dünaamilist sidumist. Varem graafikaarendajad on pidanud looma kas väga suuri, kõike hõlmavaid varjutajaid või väga palju väikseid erinevaid varjutajaid erinevate riistvara ja muude muutujate muutumise tarvis. Varjutaja Mudel 5.0 lahendab selle probleemi läbi dünaamilise varjutajate sidumise, mis lisab objekt-orienteeritud programmeerimise elemente varjutajate programmeerimisele, et oleks lihtsam siduda varjutaja koodi fragmente omavahel läbi virtuaalsete funktsioonide, lubades rakendusel valida endale sobiliku fragmendi jooksmise ajal. See säästab ressursse, kuna pole vaja töötada läbi tervet suurt kõike hõlmavat varjutaja koodi.[36] Samuti on alates D3D11-st toetatud protsessori mitme lõime paralleelne kasutus.[12] Direct3D 11 tõi ka toe tessellatsiooni programmeerimiseks läbi varjutajate.

Direct3D 11 tõi renderdamise torule kolm uut astet, Kesta-varjutaja aste, Tessellatsiooni aste ja Domeeni-varjutaja aste. Kõigi kolme uue astme eesmärk on täiendada Direct3D tessellatsiooni võimekust.[13] Skeemil on kolm uut astet märgitud teise värviga. Renderdamise toru üldine funktsionaalsus, välja arvatud tessellatsioon, ja astmete tööpõhimõtted on väga sarnane Direct3D 10 renderdamise torule.

Direct3D 11 Renderdamise Toru

Direct3D 12

Direct3D 12 tuli välja aastal 2015 koos Windows 10-ga. Direct3D 12 on võrreldes varasemate versioonidega tunduvalt madalama taseme rakendusliides, andes arendajatele otsesema ligipääsu riistvara funktsionaalsusele. Direct3D 12 vähendab protsessori kasutust kuni 50%. Direct3D 12 renderdamise toru muudeti suuremahuliselt; Kui varem (D3D11 ja varasemad) oli renderdamise toru põhimõtteliselt ridamisi ühendatud blokid, mida sai individuaalselt programmeerida/mõjutada, mis on küll mugav kõrgetasemeline represenstatsioon graafiliste arvutuste toimumisest, kuid tänapäeval ei ühti enam eriti lähedalt reaalse graafikaprotsessori tööga. Direct3D 12 toob selle asemele Toru oleku objektid (ing. k. Pipeline state objects), mida on võimalik jooksvalt adapteerida riistvara vajadustele, nende objektide lõplik asetus ja ühenduvus finaliseeritakse lõplikult alles nende loomisel.[37]

Viited

  1. 1,0 1,1 Techopedia. "Direct3D". Techopedia.
  2. Microsoft (09.10.2021). "Direct3D".
  3. 3,0 3,1 Microsoft (01.27.2022). "Getting Started with Direct3D". Microsoft Documentation. ((netiviide)): kontrolli kuupäeva väärtust: |aeg= (juhend)
  4. 4,0 4,1 Microsoft (04.09.2021). "Compute Shader Overview". Microsoft Documentation.
  5. "About Wine". WineHQ.
  6. ValveSoftware (25.02.2022). "Proton". github. Vaadatud 27.04.2022.
  7. Microsoft (20.08.2020). "DDS". Microsoft Documentation. Vaadatud 27.04.2022.
  8. Microsoft (9.10.2000). "Microsoft Announces Release of DirectX 8.0". Microsoft. Vaadatud 27.04.2022.
  9. 9,0 9,1 Microsoft (03.01.2003). "DirectX 9.0 Features Revolutionary High-Level Shader Language". Microsoft News Center. Originaali arhiivikoopia seisuga 27. august 2010. Vaadatud 27.04.2022.
  10. 10,0 10,1 Microsoft (06.01.2021). "API Features (Direct3D 10)". Microsoft Documentation. Vaadatud 27.04.2022.
  11. "Direct3D 11". Vaadatud 27.04.2022.
  12. 12,0 12,1 Microsoft (23.08.2019). "MultiThreading". Microsoft Documentation. Vaadatud 27.04.2022.
  13. 13,0 13,1 Microsoft (16.09.2020). "Tessellation Stages". Microsoft Documentation. Vaadatud 27.04.2022.
  14. Microsoft (20.08.2020). "HLSL Shader Model 5". Microsoft Documentation. Vaadatud 27.04.2022.
  15. Microsoft (23.08.2019). "Introduction To Textures in Direct3D 11". Microsoft Documentation. Vaadatud 27.04.2022.
  16. Microsoft (20.10.2020). "Direct3D 11 Features". Microsoft Documentation. Vaadatud 27.04.2022.
  17. 17,0 17,1 Microsoft (29.10.2021). "Direct3D Feature levels". Microsoft Documentation. Vaadatud 27.04.2022.
  18. Microsoft (20.08.2020). "Direct3D 11.1 Features". Microsoft Documentation. Vaadatud 27.04.2022.
  19. Microsoft (20.08.2020). "Direct3D 11.2 Features". Microsoft Documentation. Vaadatud 27.04.2022.
  20. Microsoft (04.11.2020). "Direct3D 11.3 Features". Microsoft Documentation. Vaadatud 27.04.2022.
  21. 21,0 21,1 Microsoft (30.12.2021). "What is Direct3D 12?". Microsoft Documentation. Vaadatud 27.04.2022.
  22. Bryan L (29.07.2015). "Windows 10 and DirectX 12 released!". DirectX Developer Blog. Vaadatud 27.04.2022.
  23. Mircosoft (30.12.2021). "Work submission in Direct3D 12". Microsoft Documentation. Vaadatud 27.04.2022.
  24. Weinand, Lars (18.11.2002). "GeForceFX: NVIDIA goes Hollywood?". Tom's Hardware. Vaadatud 28.04.2022.
  25. Microsoft (06.01.2021). "Direct3D Architecture (Direct3D 9)". Microsoft Documentation. Vaadatud 28.04.2022.
  26. Borden, Ed (28.02.2007). "DirectX 10, What is all the Fuss?". Puget Systems. Vaadatud 28.04.2022.
  27. Blythe, David (2006). The Direct3D 10 System. ACM. Lk 2.
  28. Microsoft (06.01.2021). "Pipeline Stages (Direct3D 10)". Microsoft Documentation. Vaadatud 28.04.2022.
  29. Microsoft (04.11.2020). "Input-Assembler Stage". Microsoft Documentation. Vaadatud 28.04.2022.
  30. Microsoft (01.03.2022). "Vertex-shader stage". Microsoft Documentation. Vaadatud 28.04.2022.
  31. Microsoft (24.05.2021). "Geometry Shader Stage". Microsoft Documentation. Vaadatud 28.04.2022.
  32. Microsoft (04.11.2020). "Stream-Output Stage". Microsoft Documentaton. Vaadatud 28.04.2022.
  33. Microsoft (04.11.2020). "Rasterizer Stage". Microsoft Documentation. Vaadatud 28.04.2022.
  34. Microsoft (20.08.2020). "Pixel Shader Stage". Microsoft Documentation. Vaadatud 28.04.2022.
  35. Microsoft (24.05.2021). "Output-Merger Stage". Microsoft Documentation. Vaadatud 28.04.2022.
  36. Microsoft (23.08.2019). "Dynamic Linking". Microsoft Documentation. Vaadatud 29.04.2022.
  37. D3D Team (20.03.2014). "DirectX 12". DirectX Developer Blog. Vaadatud 29.04.2022.