Direct3D 10 (D3D10) — оновлений набір DirectX API (англ. application programming interface) функцій, 10-а версія Direct3D, наступник Direct3D 9. Direct3D 10 надає функції для взаємодії операційної системи і програм з драйверами відеокарти, підтримується апаратно відеокартами класу NV GeForce 8x00, ATI Radeon 2x00 і вище. Ці функції прив'язані до операційної системи в лінійці Windows і доступні в Windows Vista і Windows 7. Windows XP не підтримує DirectX 10 та старші версії. Частково D3D10 працює на відеокартах з підтримкою Direct3D 9.
Офіційна фінальна версія вийшли 10 листопада 2006 року в складі Windows Vista.
Можливості та особливості
Нова модель драйвера
У Windows Vista абсолютно нова модель драйвера — WDDM (Windows Display Driver Model, раніше звана LDDM — ) — серйозна зміна в моделі відеодрайвера з часів появи апаратного прискорення. У XDDM (Windows XP Display Driver Model) кожен виклик DirectX додавав покажчик команди (токен) в буфер команд у незалежному від відеокарти форматі. Коли DX Runtime вирішував, що буфер досить заповнений, викликалася функція драйвера (в режимі ядра), яка отримувала цей буфер. Після цього драйвер розбирав цей буфер і передавав дані відеокарти. Тобто ніяких функцій драйвера в режимі користувача не було. Розвиток відеокарт і, як наслідок, ускладнення буфера команд призвело до того, що драйвер став немислимо великим і у випадку будь-якої помилки провокував BSOD. Також у XDDM у операційної системи немає способів встановлення пріоритету, управління відеопам'яттю, планування викликів DX, що ускладнює поділ відеокарти між декількома процесами — причина «втрати пристрою».
У новій моделі драйвера зроблено поділ між користувальницької і працюючої у режимі ядра частиною драйвера. Всі виклики DX безпосередньо йдуть в користувальницький драйвер, який готує відразу буфер з вмістом, залежних від устаткування. Цей буфер передає дані в ядро операційної системи, звідки вони йдуть на відеокарту. Таким чином вся важка робота виконується в користувача частини, а в ядрі — пересилання зібраного буфера в DMA-трансфер відеокарти. Як підсумок, якщо користувальницький драйвер впаде, нічого страшного не трапиться — закриється конкретна програма (але не BSOD). І у драйвера більше контролю (коли і скільки викликів функцій ядра робити). Також DX Runtime стає зовсім тонкий — немає буферів команд, безпосередньо викликаються функції драйвера. Крім цього між призначеними для користувача і ядерними частинами є планувальник завдань, який обирає які зібрані буфери відправляти відеокарті (поділ GPU на багато процесів).
Віртуалізація відеопам'яті
Тепер якщо не вистачає відеопам'яті, то ресурси переносяться в системну (звідки можуть бути відсвоплені). За рахунок наявності у Windows Vista контролю виділення відеопам'яті (раніше, у драйвера) можна розподіляти її більш ефективно, ніж POOL_MANAGED в XDDM. На даному етапі це працює на програмному рівні — планувальник GPU перед передачею DMA-пакета мапі завантажує всі потрібні текстури у відеопам'ять (вміє довантажувати їх заздалегідь, поки GPU зайнятий іншим і вільна шина). Якщо програма повноекранна, все зайве з відеопам'яті буде перенесено в системну пам'ять в міру необхідності; якщо у віконному режимі, то відбувається розподіл пам'яті між поточними процесами. Якщо потрібно гарантувати 100% наявність ресурсу в відеопам'яті, то необхідно використовувати повноекранний режим і контроль над розміром виділень.
Відсутність ситуації «втрати пристрою» (Device Lost)
У попередніх версіях з різних причин міг відбуватися Device Lost, після чого було потрібно завантажувати всі ресурси у відеопам'ять заново і робити відновлення об'єктів. З новою моделлю драйвера цієї проблеми більше не існує. Можлива ситуація Device Removed, яка означає, що відеокарта була фізично видалена з системи або що відеодрайвер був оновлений. Ситуація зустрічається дуже рідко.
Прибрані списки можливостей (D3D caps)
У DX10 більше немає капсів, як таких. Гарантується наявність всієї функціональності, тобто якщо карта підтримує DX10, то вона зобов'язана підтримувати останню версію шейдерів в повному обсязі, підтримувати всі формати текстур, всі можливі режими фільтрації, шаблону (stencil) і всього іншого. Більше того, для DX10 написали специфікацію правил растеризації, тобто тепер картинка на різних відеокартах на однаковому коді завжди повинна бути однаковою і збігатися з еталонним програмним растерізатором. Якщо це не так, то це баг виробника відеокарти. Надалі функціональність буде розширюватися (пакет DX10.1, DX11 і т. д.).
Зменшено час виклику функцій DirectX
Зменшено час виклику функцій (в тому числі DIP) на CPU. За даними презентацій Microsoft можна спостерігати 10x зменшення часу. Це суттєво, тому що важка гра може проводити близько 10 + мілісекунд у викликах DX. Велику частину часу виклику раніше йшло на Runtime і Driver. тепер driver model фактично нічого не робить, а відразу надає виконання драйверу.
Об'єкти стану (State Objects) і Constant Buffers
З'явилися State Objects — об'єкти, які можна заздалегідь зібрати при створенні і потім швидко встановлювати на відеокарті. Додані Constant Buffers, що дозволяють більш ефективно виставляти константи шейдерів.
Використання об'єктів стану
Всі Set * State замінені на об'єкти стану (State Objects). Стани розділені по кільком групам:
- Rasterizer State — fill mode, cull mode, depth bias, multisample, scissor і т. д.
- Blend State — alpha blend, color write mask, blend op і т. д.
- Depth State — depth func, stencil func і т. д.
- SamplerState — tex filtering, clamping і т. д.
Стани для кожної групи ставляться цілком, а не кожен окремо, як в . Для кожної групи можна створити State Object, яким при створенні вказується повний набір станів групи, і «встановити» можна тільки його. Створення State Object — дорога і повільна операція і повинна викликатися рідко. Мотивація цього нововведення — такий API дозволяє драйверу згенерувати набір команд відеокарті заздалегідь (при створенні State Object) і не генерувати його щоразу під час рендера при викликах Set * State.
Буфери і біндінг
Для основних типів даних (вершин, індексів, констант) запроваджено єдиний буфер — ID3D10Buffer — набір байтів в пам'яті. Type safe забезпечується за рахунок вказівки при створенні вмісту буфера. Для ресурсів введені окремі об'єкти для біндінга до конвеєра — resource views. Тобто спочатку створюємо текстуру як об'єкт в пам'яті, а потім її resource view як інпут для шейдера або як render target, і вже з цим view викликаємо PSSetShaderResources (замість SetTexture) і OMSetRenderTargets (замість SetRenderTarget). Варто відзначити, що в одного ресурсу може бути кілька resource views.
Такий принцип дозволяє працювати узагальнено. Існують «безтипні» (typeless) ресурси, тобто ресурси, які не мають певного типу (не зазначений при створенні) — наприклад, DXGI_FORMAT_R32G32B32_TYPELESS. Тип таких ресурсів визначається під час створення view (наприклад, DXGI_FORMAT_R32G32B32_UINT або DXGI_FORMAT_R32G32B32_FLOAT) і вибору елемента / Слайса з масиву текстур / об'ємної текстури.
Використання буферів констант
Set * ShaderConstant замінені на Constant Buffers — групи констант (буфер на n констант), встановлюваних за раз. Групу можна локати і записувати як звичайний буфер. Біндінг до шейдеру проводиться починаючи з деякого слота.
Таким чином використання констант зводиться до поділу їх на кілька груп за частотою оновлення (per-object, per-material, per-pass, per-scene) і створенню для кожної групи Constant Buffer. Крім додаткової продуктивності такий підхід дає драйверу високорівневу картину — більше можливостей для оптимізації.
Параметри шейдерів
VertexDeclaration замінений на Input Layout. Він вимагає при створенні Shader Input Signature, тобто список input-параметрів шейдера. Створений об'єкт можна використовувати як Vertex Declaration з будь-яким шейдером, які мають такий же список input-параметрів. У Vertex Declaration встановлювався незалежно від шейдера при рендері і тому драйверам доводилося серйозно модифікувати сетап при зміні vdecl. Зараз vdecl жорстко прив'язаний до входу шейдера, що дозволяє драйверу передобчислювати все заздалегідь.
Прибрані asm-шейдери
Шейдери більше не можна писати на асемблері — потрібно користуватися HLSL. Хоча асемблер для shader model 4.x є і можна дивитися результат компіляції шейдерів в нього, але більше немає можливості отримати бінарний код шейдера з тексту асемблера (те що робили psa.exe / vsa.exe). Отреверсінженіріть бінарний код, втім, ніхто не заважає.
Компілятор HLSL 4.0
Щоб було легше портувати код шейдерів, компілятор вміє компілювати HLSL-шейдери старих версій (SM2.0, SM 3.0) в SM4.0. У новому HLSL додали атрибути для хінтів компілятору — розмотування циклів і вибір dynamic vs static branching для умовних переходів.
Еволюційні зміни в шейдерах
У 4 додані цілочисельні інструкції і бітові операції (можна вважати в чесному fixed point і передавати булеві прапорці), прибрано обмеження на кількість інструкцій (але дуже довгий шейдер може впертися в обмеження за часом виконання пакету на GPU, до 10 сек)
Геометричні шейдери (Geometry Shader)
Геометричний шейдер — додатковий шейдер між вершинним (Vertex Shader) і піксельним (Pixel Shader), який може генерувати примітиви. На вхід йому подається примітив з інформацією про сусідів, на вихід — можна згенерувати кілька (не фіксоване число).
Stream Out
Це можливість записувати результат роботи Vertex Shader / Geometry Shader в пам'ять. Наприклад, кешувати обробку геометрії або взагалі геометрію, створену GS. Можна вважати ітеративні ефекти, типу Cloth / Water. Тобто тепер можна напряму трансформувати і записувати геометрію на GPU, не тільки малювати пікселі в Render Target. Також є можливість читати в шейдері з буфера в пам'яті за індексом, тобто мати достатньо велику read-only shared memory. NV наприклад пропонує там константи анімації зберігати для інстансінга.
Зменшення кількості draw calls і перемикань станів
З'явилися масиви текстур, тобто контейнер однакових за розміром і форматом текстур, з якого шейдер може вибирати за індексом (у DX10.1 — можна і cubemap arrays). Це той самий atlasing done right — раніше коли в одній текстурі зберігали декілька різних, доводилося турбуватися за міп-левели, залишати зазор між текстурами і т. д. Тепер не треба. У шейдер приходять primitive / instance id, залежно від instance ID можна використовувати інший набір текстур / координат / whatever. Очікується, що dynamic branch в шейдері швидкий (краще, ніж у DX9-hardware), тому можна передавати Material ID і бранчитись за матеріалами в шейдері. Тобто, в теорії, можна за один виклик генерувати велику кількість геометрії з різними параметрами, текстурами і взагалі матеріалами. На практиці, найбільше заважає таки вартість dynamic branch і проблем, з ним пов'язаних (обчислення градієнтів текстурних координат). А решта — цілком можна і потрібно використовувати.
Multi-sampling antialiasing features
Невелика можливість, заради якої можна переходити на DX10. Тепер у шейдері можна читати кожен MSAA-семпл окремо, тобто писати свій власний AA-фільтр, осудно семплити під час процесу і взагалі використовувати MSAA RT як текстуру. Ще й AlphaToCoverage разом з цим тепер офіційно присутня. У D3D10.1 це можна робити і з depth textures.
Підтримка depth textures
Тепер depth buffer можна використовувати як текстуру. Можна сказати, щоб при семплінзі порівнював із значенням і робив фільтрацію сусідів, можна дістати чистий depth value. Можна навіть stencil value дістати.
Інші цікаві можливості
- є рендер в volume texture
- в DX10.1 можна скопіювати зі звичайної текстури в стислу на GPU
- є справжній conditional render, тобто можливість викидати цілий draw call за результатами роботи GPU асинхронно (можна робити occlusion culling повноцінно)
Додаткові факти
Операційна система Windows XP не підтримує DX10. Причина в тому, що перенесення нової драйверної моделі неможливе — потрібно занадто багато змін в ядрі операційної системи. Якщо ж переносити тільки набір нових функціональних можливостей DX10, то теж виникають проблеми: віртуалізацію і шедулінг неможливо здійснити в старій моделі драйвера, перенесення апаратних можливостей — занадто великий обсяг роботи для Microsoft і .
Див. також
- GDI
- OpenGL
- Simple DirectMedia Layer
- X (DirectX) — формат файла для зберігання 3D об'єктів, розроблений Microsoft для DirectX
Посилання
- Direct3D 10 Graphics [ 12 травня 2013 у Wayback Machine.]
- Александр Корень (16 лютого 2007 року). DirectX 10 – десятый шаг навстречу виртуальному миру. еженедельник «Компьютерное Обозрение». Архів оригіналу за 17 березня 2012. Процитовано 2 серпня 2009.
- Александр Будик (2 грудня 2008 року). . 3DNews. Архів оригіналу за 5 грудня 2008. Процитовано 2 грудня 2008.
- BlackCat (4 грудня 2008 року). В Windows 7 запуск приложений Direct3D 10/10.1 будет возможен на CPU. IXBT.com. Архів оригіналу за 17 березня 2012. Процитовано 4 грудня 2008.
Інформація і ресурси для розробників
- — Сайт Wolfgang Engel'а (Direct3D)
- Drunken Hyena [ 3 червня 2013 у Wayback Machine.] — уроки, код, утиліти, ігри
- — охоплює 2D, 3D, звук, музику, введення
- — Приклади та уроки використання Direct3D в програмуванні ігор на і C#
- — Direct3D, уроки на С#, Craig Andera.
- — Архів уроків NeXe (Direct3D 8), archive.org
- — Direct3D, уроки на С#, Pieter Germishuys
- Clootie graphics pages [ 26 травня 2013 у Wayback Machine.] — Clootie graphics pages
- DirectX 10 WV [ 15 березня 2013 у Wayback Machine.] — Нова версія DirectX 10 для Windows XP (рос.)
- GameDev.ru [ 20 квітня 2022 у Wayback Machine.] — російськомовний сайт розробників 3D програм.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Direct3D 10 D3D10 onovlenij nabir DirectX API angl application programming interface funkcij 10 a versiya Direct3D nastupnik Direct3D 9 Direct3D 10 nadaye funkciyi dlya vzayemodiyi operacijnoyi sistemi i program z drajverami videokarti pidtrimuyetsya aparatno videokartami klasu NV GeForce 8x00 ATI Radeon 2x00 i vishe Ci funkciyi priv yazani do operacijnoyi sistemi v linijci Windows i dostupni v Windows Vista i Windows 7 Windows XP ne pidtrimuye DirectX 10 ta starshi versiyi Chastkovo D3D10 pracyuye na videokartah z pidtrimkoyu Direct3D 9 Logotip DirectX 10 Oficijna finalna versiya vijshli 10 listopada 2006 roku v skladi Windows Vista Mozhlivosti ta osoblivostiNova model drajvera U Windows Vista absolyutno nova model drajvera WDDM Windows Display Driver Model ranishe zvana LDDM serjozna zmina v modeli videodrajvera z chasiv poyavi aparatnogo priskorennya U XDDM Windows XP Display Driver Model kozhen viklik DirectX dodavav pokazhchik komandi token v bufer komand u nezalezhnomu vid videokarti formati Koli DX Runtime virishuvav sho bufer dosit zapovnenij viklikalasya funkciya drajvera v rezhimi yadra yaka otrimuvala cej bufer Pislya cogo drajver rozbirav cej bufer i peredavav dani videokarti Tobto niyakih funkcij drajvera v rezhimi koristuvacha ne bulo Rozvitok videokart i yak naslidok uskladnennya bufera komand prizvelo do togo sho drajver stav nemislimo velikim i u vipadku bud yakoyi pomilki provokuvav BSOD Takozh u XDDM u operacijnoyi sistemi nemaye sposobiv vstanovlennya prioritetu upravlinnya videopam yattyu planuvannya viklikiv DX sho uskladnyuye podil videokarti mizh dekilkoma procesami prichina vtrati pristroyu U novij modeli drajvera zrobleno podil mizh koristuvalnickoyi i pracyuyuchoyi u rezhimi yadra chastinoyu drajvera Vsi vikliki DX bezposeredno jdut v koristuvalnickij drajver yakij gotuye vidrazu bufer z vmistom zalezhnih vid ustatkuvannya Cej bufer peredaye dani v yadro operacijnoyi sistemi zvidki voni jdut na videokartu Takim chinom vsya vazhka robota vikonuyetsya v koristuvacha chastini a v yadri peresilannya zibranogo bufera v DMA transfer videokarti Yak pidsumok yaksho koristuvalnickij drajver vpade nichogo strashnogo ne trapitsya zakriyetsya konkretna programa ale ne BSOD I u drajvera bilshe kontrolyu koli i skilki viklikiv funkcij yadra robiti Takozh DX Runtime staye zovsim tonkij nemaye buferiv komand bezposeredno viklikayutsya funkciyi drajvera Krim cogo mizh priznachenimi dlya koristuvacha i yadernimi chastinami ye planuvalnik zavdan yakij obiraye yaki zibrani buferi vidpravlyati videokarti podil GPU na bagato procesiv Virtualizaciya videopam yati Teper yaksho ne vistachaye videopam yati to resursi perenosyatsya v sistemnu zvidki mozhut buti vidsvopleni Za rahunok nayavnosti u Windows Vista kontrolyu vidilennya videopam yati ranishe u drajvera mozhna rozpodilyati yiyi bilsh efektivno nizh POOL MANAGED v XDDM Na danomu etapi ce pracyuye na programnomu rivni planuvalnik GPU pered peredacheyu DMA paketa mapi zavantazhuye vsi potribni teksturi u videopam yat vmiye dovantazhuvati yih zazdalegid poki GPU zajnyatij inshim i vilna shina Yaksho programa povnoekranna vse zajve z videopam yati bude pereneseno v sistemnu pam yat v miru neobhidnosti yaksho u vikonnomu rezhimi to vidbuvayetsya rozpodil pam yati mizh potochnimi procesami Yaksho potribno garantuvati 100 nayavnist resursu v videopam yati to neobhidno vikoristovuvati povnoekrannij rezhim i kontrol nad rozmirom vidilen Vidsutnist situaciyi vtrati pristroyu Device Lost U poperednih versiyah z riznih prichin mig vidbuvatisya Device Lost pislya chogo bulo potribno zavantazhuvati vsi resursi u videopam yat zanovo i robiti vidnovlennya ob yektiv Z novoyu modellyu drajvera ciyeyi problemi bilshe ne isnuye Mozhliva situaciya Device Removed yaka oznachaye sho videokarta bula fizichno vidalena z sistemi abo sho videodrajver buv onovlenij Situaciya zustrichayetsya duzhe ridko Pribrani spiski mozhlivostej D3D caps U DX10 bilshe nemaye kapsiv yak takih Garantuyetsya nayavnist vsiyeyi funkcionalnosti tobto yaksho karta pidtrimuye DX10 to vona zobov yazana pidtrimuvati ostannyu versiyu shejderiv v povnomu obsyazi pidtrimuvati vsi formati tekstur vsi mozhlivi rezhimi filtraciyi shablonu stencil i vsogo inshogo Bilshe togo dlya DX10 napisali specifikaciyu pravil rasterizaciyi tobto teper kartinka na riznih videokartah na odnakovomu kodi zavzhdi povinna buti odnakovoyu i zbigatisya z etalonnim programnim rasterizatorom Yaksho ce ne tak to ce bag virobnika videokarti Nadali funkcionalnist bude rozshiryuvatisya paket DX10 1 DX11 i t d Zmensheno chas vikliku funkcij DirectX Zmensheno chas vikliku funkcij v tomu chisli DIP na CPU Za danimi prezentacij Microsoft mozhna sposterigati 10x zmenshennya chasu Ce suttyevo tomu sho vazhka gra mozhe provoditi blizko 10 milisekund u viklikah DX Veliku chastinu chasu vikliku ranishe jshlo na Runtime i Driver teper driver model faktichno nichogo ne robit a vidrazu nadaye vikonannya drajveru Ob yekti stanu State Objects i Constant Buffers Z yavilisya State Objects ob yekti yaki mozhna zazdalegid zibrati pri stvorenni i potim shvidko vstanovlyuvati na videokarti Dodani Constant Buffers sho dozvolyayut bilsh efektivno vistavlyati konstanti shejderiv Vikoristannya ob yektiv stanu Vsi Set State zamineni na ob yekti stanu State Objects Stani rozdileni po kilkom grupam Rasterizer State fill mode cull mode depth bias multisample scissor i t d Blend State alpha blend color write mask blend op i t d Depth State depth func stencil func i t d SamplerState tex filtering clamping i t d Stani dlya kozhnoyi grupi stavlyatsya cilkom a ne kozhen okremo yak v Dlya kozhnoyi grupi mozhna stvoriti State Object yakim pri stvorenni vkazuyetsya povnij nabir staniv grupi i vstanoviti mozhna tilki jogo Stvorennya State Object doroga i povilna operaciya i povinna viklikatisya ridko Motivaciya cogo novovvedennya takij API dozvolyaye drajveru zgeneruvati nabir komand videokarti zazdalegid pri stvorenni State Object i ne generuvati jogo shorazu pid chas rendera pri viklikah Set State Buferi i binding Dlya osnovnih tipiv danih vershin indeksiv konstant zaprovadzheno yedinij bufer ID3D10Buffer nabir bajtiv v pam yati Type safe zabezpechuyetsya za rahunok vkazivki pri stvorenni vmistu bufera Dlya resursiv vvedeni okremi ob yekti dlya bindinga do konveyera resource views Tobto spochatku stvoryuyemo teksturu yak ob yekt v pam yati a potim yiyi resource view yak input dlya shejdera abo yak render target i vzhe z cim view viklikayemo PSSetShaderResources zamist SetTexture i OMSetRenderTargets zamist SetRenderTarget Varto vidznachiti sho v odnogo resursu mozhe buti kilka resource views Takij princip dozvolyaye pracyuvati uzagalneno Isnuyut beztipni typeless resursi tobto resursi yaki ne mayut pevnogo tipu ne zaznachenij pri stvorenni napriklad DXGI FORMAT R32G32B32 TYPELESS Tip takih resursiv viznachayetsya pid chas stvorennya view napriklad DXGI FORMAT R32G32B32 UINT abo DXGI FORMAT R32G32B32 FLOAT i viboru elementa Slajsa z masivu tekstur ob yemnoyi teksturi Vikoristannya buferiv konstant Set ShaderConstant zamineni na Constant Buffers grupi konstant bufer na n konstant vstanovlyuvanih za raz Grupu mozhna lokati i zapisuvati yak zvichajnij bufer Binding do shejderu provoditsya pochinayuchi z deyakogo slota Takim chinom vikoristannya konstant zvoditsya do podilu yih na kilka grup za chastotoyu onovlennya per object per material per pass per scene i stvorennyu dlya kozhnoyi grupi Constant Buffer Krim dodatkovoyi produktivnosti takij pidhid daye drajveru visokorivnevu kartinu bilshe mozhlivostej dlya optimizaciyi Parametri shejderiv VertexDeclaration zaminenij na Input Layout Vin vimagaye pri stvorenni Shader Input Signature tobto spisok input parametriv shejdera Stvorenij ob yekt mozhna vikoristovuvati yak Vertex Declaration z bud yakim shejderom yaki mayut takij zhe spisok input parametriv U Vertex Declaration vstanovlyuvavsya nezalezhno vid shejdera pri renderi i tomu drajveram dovodilosya serjozno modifikuvati setap pri zmini vdecl Zaraz vdecl zhorstko priv yazanij do vhodu shejdera sho dozvolyaye drajveru peredobchislyuvati vse zazdalegid Pribrani asm shejderi Shejderi bilshe ne mozhna pisati na asembleri potribno koristuvatisya HLSL Hocha asembler dlya shader model 4 x ye i mozhna divitisya rezultat kompilyaciyi shejderiv v nogo ale bilshe nemaye mozhlivosti otrimati binarnij kod shejdera z tekstu asemblera te sho robili psa exe vsa exe Otreversinzhenirit binarnij kod vtim nihto ne zavazhaye Kompilyator HLSL 4 0 Shob bulo legshe portuvati kod shejderiv kompilyator vmiye kompilyuvati HLSL shejderi starih versij SM2 0 SM 3 0 v SM4 0 U novomu HLSL dodali atributi dlya hintiv kompilyatoru rozmotuvannya cikliv i vibir dynamic vs static branching dlya umovnih perehodiv Evolyucijni zmini v shejderah U 4 dodani cilochiselni instrukciyi i bitovi operaciyi mozhna vvazhati v chesnomu fixed point i peredavati bulevi praporci pribrano obmezhennya na kilkist instrukcij ale duzhe dovgij shejder mozhe vpertisya v obmezhennya za chasom vikonannya paketu na GPU do 10 sek Geometrichni shejderi Geometry Shader Geometrichnij shejder dodatkovij shejder mizh vershinnim Vertex Shader i pikselnim Pixel Shader yakij mozhe generuvati primitivi Na vhid jomu podayetsya primitiv z informaciyeyu pro susidiv na vihid mozhna zgeneruvati kilka ne fiksovane chislo Stream Out Ce mozhlivist zapisuvati rezultat roboti Vertex Shader Geometry Shader v pam yat Napriklad keshuvati obrobku geometriyi abo vzagali geometriyu stvorenu GS Mozhna vvazhati iterativni efekti tipu Cloth Water Tobto teper mozhna napryamu transformuvati i zapisuvati geometriyu na GPU ne tilki malyuvati pikseli v Render Target Takozh ye mozhlivist chitati v shejderi z bufera v pam yati za indeksom tobto mati dostatno veliku read only shared memory NV napriklad proponuye tam konstanti animaciyi zberigati dlya instansinga Zmenshennya kilkosti draw calls i peremikan staniv Z yavilisya masivi tekstur tobto kontejner odnakovih za rozmirom i formatom tekstur z yakogo shejder mozhe vibirati za indeksom u DX10 1 mozhna i cubemap arrays Ce toj samij atlasing done right ranishe koli v odnij teksturi zberigali dekilka riznih dovodilosya turbuvatisya za mip leveli zalishati zazor mizh teksturami i t d Teper ne treba U shejder prihodyat primitive instance id zalezhno vid instance ID mozhna vikoristovuvati inshij nabir tekstur koordinat whatever Ochikuyetsya sho dynamic branch v shejderi shvidkij krashe nizh u DX9 hardware tomu mozhna peredavati Material ID i branchitis za materialami v shejderi Tobto v teoriyi mozhna za odin viklik generuvati veliku kilkist geometriyi z riznimi parametrami teksturami i vzagali materialami Na praktici najbilshe zavazhaye taki vartist dynamic branch i problem z nim pov yazanih obchislennya gradiyentiv teksturnih koordinat A reshta cilkom mozhna i potribno vikoristovuvati Multi sampling antialiasing features Nevelika mozhlivist zaradi yakoyi mozhna perehoditi na DX10 Teper u shejderi mozhna chitati kozhen MSAA sempl okremo tobto pisati svij vlasnij AA filtr osudno sempliti pid chas procesu i vzagali vikoristovuvati MSAA RT yak teksturu She j AlphaToCoverage razom z cim teper oficijno prisutnya U D3D10 1 ce mozhna robiti i z depth textures Pidtrimka depth textures Teper depth buffer mozhna vikoristovuvati yak teksturu Mozhna skazati shob pri semplinzi porivnyuvav iz znachennyam i robiv filtraciyu susidiv mozhna distati chistij depth value Mozhna navit stencil value distati Inshi cikavi mozhlivosti ye render v volume texture v DX10 1 mozhna skopiyuvati zi zvichajnoyi teksturi v stislu na GPU ye spravzhnij conditional render tobto mozhlivist vikidati cilij draw call za rezultatami roboti GPU asinhronno mozhna robiti occlusion culling povnocinno Dodatkovi faktiOperacijna sistema Windows XP ne pidtrimuye DX10 Prichina v tomu sho perenesennya novoyi drajvernoyi modeli nemozhlive potribno zanadto bagato zmin v yadri operacijnoyi sistemi Yaksho zh perenositi tilki nabir novih funkcionalnih mozhlivostej DX10 to tezh vinikayut problemi virtualizaciyu i sheduling nemozhlivo zdijsniti v starij modeli drajvera perenesennya aparatnih mozhlivostej zanadto velikij obsyag roboti dlya Microsoft i Div takozhGDI OpenGL Simple DirectMedia Layer X DirectX format fajla dlya zberigannya 3D ob yektiv rozroblenij Microsoft dlya DirectXPosilannyaDirect3D 10 Graphics 12 travnya 2013 u Wayback Machine Aleksandr Koren 16 lyutogo 2007 roku DirectX 10 desyatyj shag navstrechu virtualnomu miru ezhenedelnik Kompyuternoe Obozrenie Arhiv originalu za 17 bereznya 2012 Procitovano 2 serpnya 2009 Aleksandr Budik 2 grudnya 2008 roku 3DNews Arhiv originalu za 5 grudnya 2008 Procitovano 2 grudnya 2008 BlackCat 4 grudnya 2008 roku V Windows 7 zapusk prilozhenij Direct3D 10 10 1 budet vozmozhen na CPU IXBT com Arhiv originalu za 17 bereznya 2012 Procitovano 4 grudnya 2008 Informaciya i resursi dlya rozrobnikiv Sajt Wolfgang Engel a Direct3D Drunken Hyena 3 chervnya 2013 u Wayback Machine uroki kod utiliti igri ohoplyuye 2D 3D zvuk muziku vvedennya Prikladi ta uroki vikoristannya Direct3D v programuvanni igor na C i C Direct3D uroki na S Craig Andera Arhiv urokiv NeXe Direct3D 8 archive org Direct3D uroki na S Pieter Germishuys Clootie graphics pages 26 travnya 2013 u Wayback Machine Clootie graphics pages DirectX 10 WV 15 bereznya 2013 u Wayback Machine Nova versiya DirectX 10 dlya Windows XP ros GameDev ru 20 kvitnya 2022 u Wayback Machine rosijskomovnij sajt rozrobnikiv 3D program