+38 (093)  990-30-70

Новости

Королевский бал у Вас дома

Ядерний API. Перший погляд на DirectX 11

  1. Ми чекаємо змін
  2. За методикою Юлія Цезаря
  3. На заміну процесору
  4. * * *

До виходу нової - одинадцятої - версії DirectX залишилося не так багато часу. Імовірно він з'явиться вже цієї осені в складі Windows 7 і Service Pack 2 для Windows Vista. Чи зможе новий API стати новою загальновизнаною платформою для розробників ігор? Чи не чекає його та ж доля, що і DirectX 10? Саме в цьому ми і спробуємо розібратися.

Почнемо з невеликої передісторії. Якщо вірити чуткам (а вони спираються на цілком конкретні факти), найперша версія DirectX носила кодову назву Manhattan Project. Це прямий натяк на ядерну програму США (крім Америки в дослідженнях брали участь вчені з Канади, Великобританії та Німеччини), результатом якої стала поява атомної бомби. Також є припущення, що перший логотип DirectX був розроблений за образом і подобою значка, що попереджає про радіаційну небезпеку (що й казати, схожість дійсно є).

Що ж стосується назви технології, то, за словами глави проекту DirectX Алекса Джона, DX розроблявся в парі з приставкою Xbox, яка спочатку називалася DirectXbox. Проекти повинні були розвалити японський ринок відеоігор так само, як колись скинуті атомні бомби стерли з лиця землі міста Хіросіма і Нагасакі. Зрозуміло, компанія Microsoft все заперечує і говорить про те, що дизайн першого логотипу не має ніякого відношення до фатального жовто-чорному значку.

До виходу нової - одинадцятої - версії DirectX залишилося не так багато часу

Ось такі складні ефекти освітлення в DirectX 11 можна буде робити без всяких програмних фокусів.

Перша версія DirectX з'явилася в 1995 році. Вона увійшла в комплект другого пакету оновлень для Windows 95. Під загальною назвою було зібрано відразу кілька компонентів: Direct3D, DirectDraw, DirectMusic, DirectPlay, DirectSound (за що відповідає кожен з них, зрозуміло з назви) і т.д. По суті, програмістам запропонували набір засобів для розробки (так званий SDK) тривимірної і растрової графіки, музики, комунікації та інших ігрових і програмних модулів. До складу DirectX входили всі необхідні бібліотеки, документація та заголовки.

Курс з самого початку був узятий на зручність і масовість. Кожне оновлення API додавало важливі функції, оперативно виправлялися помилки. DirectX рушили вперед семимильними кроками. Девелопери просувалися до фотореалізму, якість графіки поліпшувалося і продовжує поліпшуватися з кожним новим поколінням API.

Розвиток йшло гладко до того моменту, як на світ не з'явився DirectX 10, жорстко прив'язаний до Windows Vista. Популярність цієї ОС досі залишає бажати кращого, а балом продовжує правити DirectX 9. Розробники ігор зійшлися на думці, що переваги десятої версії не такі значущі, щоб цілком перейти на цей API. З новим DirectX Microsoft не збирається повторювати свої старі помилки. Одинадцята версія буде працювати і на Windows 7, і на «Вісті».

Ми чекаємо змін

Нас найбільше цікавить графічна складова DX. Давайте розберемося, як вона працює. Основне завдання API - перенесення опису тривимірного об'єкту на двомірний екран. Інтерфейс передає об'єкт драйверу відеокарти і «пояснює» їй, що з ним потрібно робити. Фінальне зображення формується в кілька стадій, які разом називаються графічний конвеєр.

Відбувається все приблизно так. Тривимірний об'єкт розділяється на двомірні фрагменти - полігони. Полігони обробляються окремо, на них накладаються текстури, застосовуються різні способи висвітлення пікселів і так далі. Після проходження останньої стадії полігони з текстурами виводяться на екран у вигляді тривимірної картинки.

Нова версія API додасть в графічний конвеєр кілька нових пунктів, головний з яких - оновлений блок тесселяції, який дозволить без проблем виводити на екран моделі, що складаються з декількох мільйонів полігонів (в сучасних іграх об'єкти рідко складаються більше ніж з декількох десятків тисяч трикутників).

Нова версія API додасть в графічний конвеєр кілька нових пунктів, головний з яких - оновлений блок тесселяції, який дозволить без проблем виводити на екран моделі, що складаються з декількох мільйонів полігонів (в сучасних іграх об'єкти рідко складаються більше ніж з декількох десятків тисяч трикутників)

З моменту виходу Crysis пройшло вже півтора року, а він як і раніше залишається найкрасивішою грою під DX10.

З моменту виходу Crysis пройшло вже півтора року, а він як і раніше залишається найкрасивішою грою під DX10

Піксельні шейдери забезпечують адекватне відображення води, але, як не намагаються розробники, рідина все ще далека від фотореалізму.

За методикою Юлія Цезаря

Ефекти HDR Lighting дозволяють отримати дуже реалістичне освітлення в іграх, а за допомогою DX11 стане набагато легше обробляти алгоритми HDR.

Ще один дуже важливий момент. Нові можливості DX11 дозволяють з легкістю адаптувати всі написані на ньому програми під більш ранні версії API, раніше з цим було чимало проблем. В першу чергу мова йде про зворотну сумісність з DX10 і DX10.1.

Поступово еволюціонуючи, DirectX перетворюється з програмного інтерфейсу з обмеженими можливостями в повноцінну середу для створення тривимірних світів. Зараз DirectX являє собою строгий набір інструкцій, які будуть працювати на будь-якій платформі. Розробники ігор зможуть писати для DX11 код, який можна запускати на обладнанні, сумісному і з DX10, - доведеться пожертвувати лише деякими функціями.

Ще однією важливою особливістю DX11 стане многопоточность. Сучасні ігри тільки починають пристосовуватися до чотирьохядерним процесорам, розробники ще толком не навчилися писати відповідний для них програмний код. Поява механізму для одночасного управління декількома діями суттєво спростить перехід до багатопотоковим обчислень.

Починаючи з восьмого DirectX, у кожній наступній ітерації API почали з'являтися нові версії піксельних шейдеров. DX11 не став винятком. Тільки раніше всі зміни стосувалися в основному функціоналу. Тобто шейдери видавали більш реалістичні ефекти. У DX11 змінена сама модель програмування. Microsoft допрацювала шейдерний мову HLSL, зокрема, додала в нього кілька способів об'єктно-орієнтованого програмування. Код стане легше читати, зникнуть нескінченні нагромадження функцій і звернень.

Поле битви: гра

Відкритий стандарт OpenGL не зміг конкурувати з DirectX на ринку комп'ютерних ігор. Хоча спочатку дітище Microsoft не було настільки популярно, як зараз. Перші версії API піддавалися критиці з боку розробників ігор: в плані графіки DirectX не пропонував істотних поліпшень, але для реалізації найпростіших функцій був потрібний цілий ряд непотрібних команд. У OpenGL, навпаки, все було просто.

Microsoft намагалася задавити SGI (розробників OpenGL) за допомогою рекламних вивертів. Вони обіцяли, що DirectX буде працювати швидше конкурента. Вже тоді було зрозуміло, що низька швидкість роботи OpenGL пов'язана не з самим API, а з невдалою його реалізацією в середовищі Windows. З іншого боку, багато ігор тоді не використовували DirectX для рендеринга. Замість цього вони зверталися безпосередньо до ресурсів відеокарт через DirectDraw. OpenGL спирався на підтримку з боку виробників заліза, але з появою нових відеокарт програмні недоліки цього API стали видні неозброєним оком.

Як би там не було, але війну виграла Microsoft. Вона випускала все нові версії API з новими функціями. Поява DirectX 8 з підтримкою піксельних шейдеров і шейдерного мови високого рівня відкинуло SGI далеко назад.

Поява DirectX 8 з підтримкою піксельних шейдеров і шейдерного мови високого рівня відкинуло SGI далеко назад

Гра Rage - останній на сьогодні оплот OpenGL в світі тривимірних ігор.

На заміну процесору

Наукова програма Folding @ Home дозволяє розраховувати структуру білків на дому. Відкрите з їх швидкої шейдерной архітектурою справляються з обчисленнями куди краще центральних процесорів.

Пару років тому виробники вирішили, що відеокарти можна використовувати не тільки для виведення графіки, але і для чогось ще. Благо базис вже є: мікроархітектура графічних чіпів еволюціонувала, замість строго запрограмованого конвеєра з'явилися обчислювальні блоки. Виявилося, що відеокарти можуть справлятися з деякими специфічними розрахунками набагато швидше центральних процесорів.

Відразу ж провели експеримент. Вчені створили програму Folding @ Home, моделює тривимірну структуру протеїнів, і оптимізували її для роботи з графічним чіпом. Дуже швидко з'ясувалося, що навіть стародавня відеокарта AMD Radeon X1900 робить розрахунки майже в двадцять разів швидше найпотужнішого чотирьох ядерного процесора. Натхненні успіхом, виробники графічних плат почали розвивати новий напрямок, який одержав назву GPGPU (General-Purpose Graphics Processing Units, GPU загального призначення).

NVIDIA і AMD практично одночасно представили власні концепції, але в лідери відразу вибилася технологія NVIDIA CUDA. І людей не зупиняє навіть той факт, що програми, написані з її допомогою, можуть працювати тільки на відкритих GeForce (починаючи з восьмого покоління і вище).

Photoshop CS4 став першою програмою з підтримкою розрахунків за допомогою графічного чіпа. Правда, на даний момент все зводиться до плавного зумуванню, обертанню і ще парі не особливо потрібних функцій.

Поява DX11 розставить все по своїх місцях. Цей API містить новий тип шейдеров, які стандартизують всі математичні обчислення графічних процесорів. Виконувати розрахунки за допомогою піксельних шейдеров було важко, так як вони не підтримують структурні дані. Обчислювальні шейдери в DX11 вирішують всі проблеми. Програмісти зможуть поміщати дані в блок шейдерів, минаючи непотрібні стадії графічного конвеєра. Всі розрахунки візьмуть на себе процесори відеокарти.

Тільки уявіть собі, скільки в найближчому майбутньому вийде програмних блоків та ігор, які будуть використовувати можливості відеокарт. З'являться просунуті технології затінення, сверхкачественние повноекранне згладжування - як звичайних, так і прозорих текстур. Обчислювальні шейдери візьмуть на себе розрахунок ігрової фізики, штучного інтелекту і багато іншого, що зазвичай перекладається на плечі центрального процесора. Один з найбільш яскравих прикладів - просунуті ефекти освітлення HDR Lighting. Зараз для їх розрахунку доводиться проганяти алгоритм через ЦП кілька разів. Обчислювальним шейдерам досить одного заходу на ціль.

Виробляти спільні розрахунки зможе будь-яка відеокарта з підтримкою DX11. Технологія знайде своє застосування не тільки в іграх, але і в інших додатках під Windows. Photoshop CS 4 вже використовує можливості відеокарти, але поки на самому примітивному рівні.

Відеокарта NVIDIA GeForce GTX 295 нагадує стару VHS-касету. Але швидкість роботи - феноменальна.

Але швидкість роботи - феноменальна

Графічний конвеєр DX11 обзавівся кількома новими стадіями.

3D-словник

Тесселяція - розбиття моделі на полігони.

Анізотропна фільтрація (AF) - метод зниження спотворень картинки. Усуває ефект розмитості, підвищує різкість текстур. На даний момент існують режими 2x, 4x, 8x і 16x.

Повноекранне згладжування (FSAA, AA) - усунення ефекту «драбинки», нечітких країв об'єктів. На даний момент існують наступні види антіаліазінга: суперсемплінг (SuperSampling), мультісемплінг (MultiSampling) і CSAA (Coverage Sampling AntiAliasing). За якістю зображення на першому місці стоїть суперсемплінг, але він сильно знижує продуктивність. Мультісемплінг забезпечує хорошу якість згладжування при менших витратах. CSAA - відносно нова технологія, яка забезпечує високий клас згладжування при розумному витраті ресурсів відеокарти.

Широкий динамічний діапазон (HDR) - технологія, яка дозволяє добитися оптично правильного освітлення, а також дає можливість імітувати ефект адаптації людського зору (наприклад, вихід з темного приміщення на яскраве сонячне світло).

Шейдери - програми, які визначають вид поверхні об'єкту. За останні кілька років шейдерниє програми сильно еволюціонували, а крім піксельних і вершинних шейдеров з'явився новий вид - геометричні.

Піксельні шейдери - відповідають за різні ефекти і властивості кінцевих об'єктів, дозволяючи програмістам реалізувати, наприклад, шорсткість поверхонь, воду, волосяний покрив.

Вершинні шейдери - виробляють різні операції над вершинами 3D-об'єктів. Завдяки їм в сучасних іграх з'явилися красиво анімовані дерева і трава, хвилі, що розвивається одяг.

Геометричні шейдери - дозволяють графічному процесору динамічно створювати і змінювати геометрію об'єктів. Геометричні шейдери додають ще більше реалістичності волоссю, води, вогню. При цьому вони розвантажують центральний процесор і підвищують швидкість обробки графіки.

Вершинні і піксельні процесори - блоки графічного чіпа, які відповідають за обробку відповідно вершинних і піксельних шейдеров. Чим більше таких блоків несе в собі чіп і чим вище їх частота, тим швидше буде йти виконання шейдерних програм.

* * *

Судячи з усього, новий DirectX забезпечить якісний стрибок не тільки в графіку, але і в ігровій архітектурі в цілому. Навіть щодо старе залізо завдяки розподілу навантаження між ЦП і графічним процесором зможе видавати дуже якісну картинку, та ще розраховувати фізику і, припустимо, AI. Але до всього цього нам з вами ще належить дожити. Навіть якщо DirectX 11 з'явиться без запізнень, до масового переходу на нього розробникам потрібно ще мінімум півтора-два роки.

Чи зможе новий API стати новою загальновизнаною платформою для розробників ігор?
Чи не чекає його та ж доля, що і DirectX 10?