Game development: Тяга до революцій / Сьогодення та недалеке майбутнє тривимірних технологій

"Шейдери" – один з найневдаліших термінів у всій історії IT, тим не менше ця технологія прийшла до нас досить давно і надовго зайняла ключове місце в нашому бюджеті. Однак шейдери – це не єдиний вид гризунів, які загрожують нашому бюджету дірками. Будемо готуватися до купюрність листопаду:)

історія

На платформі PC точкою відліку для шейдерів є відеокарта NVidia GeForce 2 GTS. Саме в цій карті вперше з'явилися шейдери, але вони не справили прориву. У зв'язку з тим, що в той час шейдери НЕ були специфіковані і не підтримувалися виробниками ігор, ця відеокарта так і залишилася якимось пробним каменем, запущеним в напрямку наших гаманців.

Офіційна історія шейдерів починається з серії GeForce 3 – у той час з'явилися шейдери версії 1.Х і специфікації DirectX 8.1. Для того щоб не обтяжувати тебе зайвими індексами та моделями карт, далі я буду розповідати тільки про покоління шейдерів (з точки зору програмістів). Отже, зараз ми маємо три покоління: 1.Х, 2.Х і 3.х. На сьогоднішній день (до релізу Windows Longhorn) остання програмна специфікація від Microsoft називається DirectX 9.0c, вона включає в себе підтримку всіх існуючих версій шейдерів.

термінологія

З точки зору розробника графічної програми, шейдер – це набір станів графічного конвеєра плюс програмний код, який виконується графічним процесором (GPU). Наприклад, у першому Quake теж були шейдери … Здивований? Все дуже просто, таким терміном обзивали програмну абстракцію, яка керувала різними станами відеокарти. Безглуздо розглядати код, що виконується GPU, окремо від станів графічного конвеєра – це єдине і неподільне ціле. На рис. «Приклад шейдера» зображено типовий шейдер – код програми, написаної мовою HLSL, плюс деякі додаткові навороти, що дозволяють встановити потрібні параметри відеокарти.

графічний конвеєр

Перш ніж починати вивчення шейдерів, необхідно уявляти собі, як працює сучасний графічний конвеєр, які дані приходять йому на вхід і як він обробляє їх. Уяви собі, що ти хочеш намалювати на екрані тривимірний куб. У пам'яті твій куб буде представлятися у вигляді набору вершин, які описують складові його трикутники (примітиви). Кожна вершина характеризується своїми координатами в 3D-просторі: x, y, z – мінімум, без якого не обійтися. Зазвичай вершина містить додаткові параметри: нормаль, дифузний і спекулярний кольору, декілька наборів текстурних координат і т.д. Для оптимізації і щоб задіяти верховий кеш більш ефективно, примітиви використовують загальні вершини. На рис. «Організація вершин» видно те, як сім вершин утворюють п'ять трикутників.

Формування зображення на екрані відбувається наступним чином. У кожний момент часу головний потік програми генерує кадри зображення. Наприклад, для комфортної гри в шутер необхідно генерувати мінімум 25 кадрів в секунду. Подивися на діаграму «Графічний конвеєр». Створення кадру починається з того, що карті повідомляється, яку саме геометрію їй необхідно намалювати для цього кадру (крок «буфер вершин »). Кожна вершина обробляється вершинним процесором, в який заздалегідь завантажена вершинна програма (верховий шейдер). Зазвичай ця програма трансформує вершини виходячи із заданих світової і видовий матриць і для кожної вершини обчислює специфічні дані (нормаль, колір). Як ти пам'ятаєш, вся геометрія розбивається на трикутники. Видимі на екрані фрагменти трикутників (після покидька невидимих фрагментів) потрапляють в піксельний процесор, де вони обробляються Фрагментний процесором (піксельний шейдер), який розраховує колір кожного фрагмента. Звідки беруться компоненти кольору фрагмента? З текстур, що покривають трикутник, з освітленості і затіненості фрагмента і інших ефектів. Параметри для кожного фрагмента передаються в піксельний шейдер інтерпольовані по всьому оброблюваному трикутнику, тобто вони перебувають у прямій залежності від параметрів вершин трикутника. Після розрахунку кольору фрагмента він змішується з поточним кадром в залежності від налаштувань конвеєра. Буфери між різними частинами конвеєра дозволяють задіяти конвеєр найбільш ефективно – з метою мінімізації його простоїв.

покоління процесорів

Порівняємо можливості вершинних і Фрагментний процесорів трьох поколінь. Оскільки перше покоління шейдерів було найчисленнішим (у плані версій), я візьму для порівняння тільки версію 1.4, решта практично не відрізняються від неї. Для версії шейдеров 2.0 буду розглядати специфікацію розширених шейдерів 2.Х.

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

верховий процесор

Тепер покопаємось в кішочках кожного процесора, перший у черзі – верховий. Як видно з діаграми «Графічний конвеєр», на його вхід потрапляють вершини трикутників, що утворюють сцену. Для кожної вершини виконується вершинний шейдер, заздалегідь складеним у відеокарту. Подивися на малюнок «Приклад шейдера»: в XML-сайті VertexShader міститься код вершинної програми (функція main). Ця програма досить проста, до кожної вершині вона додає дифузний колір і обчислює значення текстурних координат для спеціальної текстури, які змінюються в залежності від того, під яким кутом ми дивимося на сцену. Однак для того щоб почати розрахунок потрібних даних, ми повинні перевести координати вершини з базового простору (одиничної системи координат) у світовий простір – це вираховування обов'язкові, якщо ми хочемо, щоб сцена відображалася на екрані з урахуванням камери і координат в світовому (сценічному) просторі. Це перетворення виконується за допомогою рядки: o.pos = mul (i.pos, WorldViewProjection). Дані про вершину потрапляють у функцію main () з потоку вхідних даних – це так званий однорідний (uniform) введення даних, які потрапляють у процесор з локальної пам'яті відеокарти в регістри вхідних даних (Input registers). Дані, якими ти впливаєш на шейдер з своєї керуючої програми, що працює на CPU, потрапляють в програму через константні регістри (варійований вхід). Ці дані не можуть бути змінені в коді шейдера, тому й називаються константними. У нашому прикладі константні дані – різні матриці (видова та світова), а також дифузний колір вершини. Тимчасові регістри використовуються для збереження проміжних результатів обчислень (у нашому випадку – змінні nrm і e2v). Регістр предикатів містить у собі прапор – деяке умова, яка може бути задано заздалегідь (ззовні шейдера) або розраховано в програмі. За допомогою цієї умови можна вплинути на хід виконання програми (розгалуження). У шейдерах другого покоління (2.0 і 2.Х) можливі розгалуження коду, причому в шейдерах версії 2.0 можливі тільки статичні розгалуження (цикли і підпрограми), тобто перевірка умов, заданих ззовні шейдера. У розширених шейдерах 2.Х можливо і динамічне управління ходом виконання шейдера. Наприклад, якщо розрахований дифузний колір вершини червоний, то слід робити одне, якщо червоною компоненти не міститься – робити інше.

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

на шляху до Фрагментний процесору

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

Три готові вершини утворюють трикутник. Трикутник розбивається на фрагменти. Ці фрагменти перевіряються на видимість на екрані за допомогою Z-тесту (перевірка на видимість), і вже видимі фрагменти потрапляють на вхід Фрагментний програмі. Чому я загострюю твою увагу на цьому процесі? Тут є одна тонкість. Раніше ти розраховував текстурні координати для вершин, а Фрагментний процесору дістаються текстурні координати для фрагментів. Звідки вони беруться? Інтерполяцією по всьому трикутнику, між текстурними координатами трьох його вершин.

Фрагментний процесор

Подивися ще раз на код прикладу (XML вузол PixelShader). Вхідні дані для фрагментного процесора аналогічні вихідними даними вершинного процесора з урахуванням того, що вони інтерпретована для конкретного фрагмента всередині трикутника. На виході з Фрагментний програми ми повинні отримати результуючий колір фрагмента з урахуванням текстур, освітлення, затінення і т.д. (В залежності від розв'язуваної задачі). У константних регістрах процесора задаються константи з головної програми. Тимчасові регістри служать для збереження проміжних результатів обчислень. Самплери – це те ж саме, що і текстури. Регістри текстурних координат містять інтерпольовані текстурні координати для фрагмента. Регістр предикатів і, відповідно, статичні і динамічні розгалуження з'являються тільки в 2.Х-версії піксельних шейдерів. В останньому (третьому) поколінні шейдерів з'являється регістр сторони трикутника, який містить позитивне значення для передньої сторони і негативне – для задньої. Ця можливість використовується для вибору різних схем розрахунку результуючого кольору (вибір освітлення) для різних сторін трикутників.

недалеке майбутнє

Ворожіння на кавовій гущі – надзвичайно захоплюючий процес, саме їм і займаються багато аналітиків IT-ринку. Їх фантазії не можна назвати ніяк по-іншому. У пришестя технології шейдерів на платформу PC немає нічого дивного. Якщо минулого відеокарти виконували фіксований набір дій, то тепер цих дій стало на порядок більше за рахунок того, що з'явилася можливість писати керуючі програми (шейдери) для графічних процесорів. Після різкого переходу від технологій фіксованого до технологій програмованого графічного конвеєра індустрія продовжила свою еволюцію. Шейдери обростали м'ясом функціональності, новими можливостями і регістрами, високою частотою і можливостями розпаралелювання обчислень. На сьогодні мегамонстрів PC-графіки тримає на своєму борту 512 Мб пам'яті, працює на частоті 600 МГц, дані обробляються 24-ма піксельними конвеєрами. Також є рішення на базі технології SLI з двох відеокарт. У наявності тенденції до розпаралелювання обчислень. Чому існують такі тенденції? Все дуже просто, інженери підходять до кордонів мініатюризації технологічного процесу, подолати які неможливо фізично. Так що залишається рухатися в бік паралельних обчислень: багатоядерні процесори, багатоканальні контролери пам'яті, мультіконвейерние графічні рішення. У найближчому майбутньому нас очікує нова операційна система від Microsoft, разом з нею до нас прийде нова архітектура графічних драйверів і новий DirectX. Стрибнуть чи графічні технології ще раз вперед? Навряд чи. Чи отримаємо ми відчутну надбавку до продуктивності і якості? Напевно. Чи потрібно нам це як користувачам? Ось тут я сильно сумніваюся, мені, наприклад, набридло міняти відеокарту кожні два роки, отвалівая за неї від $ 100 до 200. А тобі? Якщо не набридло, то прочитай ось це: http://thg.ru/graphic/20060114/onepage.html.

в гостях у ньютона

Графіка – це не єдиний напрям, в якому спостерігається стійке появу все нових технологій на один геймерський долар. Крім шейдерів, в твій кишеню прагне залізти ще один прискорювач, на цей раз – прискорювач фізики PPU (Physic Processing Unit). Отже, на початку березня 2005 року, коли всі російські жінки готувалися приймати чергову дозу чергових компліментів, молода каліфорнійська компанія AGEIA оголосила про розробку пристрою, здатного зробити революцію, аналогічну колись тріумфальної появи Voodoo від компанії 3DFx. Як запевняють розробники, технологія PhysX повинна була взяти на себе завдання по обрахунку фізики сцени, які на той момент вирішувалися CPU. Динаміка твердих, гнучких і рідких тіл, зіткнення, моделювання волосся, хутра і т.д. відтепер будуть здійснюватися в процесорі PhysX. На відміну від сучасних ігор, ті ігри, які підтримують технології AGEIA, зможуть відображати на екрані не сотні об'єктів, які підпорядковуються спрощеним законам фізики, а десятки тисяч реальних об'єктів, повністю підкоряються всім законам фізики. У новій ері будуть зняті, здавалося б, монументальні обмеження на цілісність (не разрушаємость) світу і обмеженість моделі висвітлення та побудови тіней – PhysX може взяти на себе і ці обчислення. Чіп, що складається з 125 млн. транзисторів, буде випускатися за 130-нм техпроцесу у вигляді плати розширення з інтерфейсом PCI або PCI-Express. Споживання енергії складе близько 25 Вт. Крім самого чіпа, на борту плати буде розташовуватися 128 Мб 2.0 нс GDDR3-пам'яті, що працює на гігагерцовий частоті. У майбутньому планується використання XDR-пам'яті.

AGEIA являє собою невелике конструкторське бюро в Каліфорнії з офісами в Сент-Луїсі та відділами розробників у Швеції, Швейцарії та Китаї. Чіпи будуть проводитися, по всій видимості, на виробничих потужностях TSMC. Вартість чіпа складе від $ 100 до 400. В якості API для заліза буде виступати PhysX SDK, що включає в себе технології Megon і NovodeX, куплених в 2005 році. Обіцяний на Різдво 2005 року, випуск плат був відкладений на другий квартал 2006 року. За заявами офіційних осіб AGEIA, таке рішення було ухвалене для того, щоб плата не загубилася в натовпі різдвяних новинок. Однак не все так просто, як хотілося б AGEIA. Зрушення дати випуску PhysX потрібен для доопрацювання плати в плані її здешевлення. Зараз в Мережі циркулюють чутки про те, що залізяка буде коштувати $ 199. Однак головна причина криється, по всій видимості, в нечисленність ігор, що підтримують технологію AGEIA. Нагадаю, що PhysX SDK використовується в Unreal Engine 3. 17 січня 2006 про підтримку цієї технології оголосила компанія Emergent Game Technologies (виробники движка Gamebryo 3D). Таким чином, наступні тайтли напевно будуть підтримувати PhysX: The Elder Scrolls IV: Oblivion, Loki, Warhammer MMORPG, City of Villains, Tom Clancy "s Ghost Recon Advanced Warfighter. Ці та, напевно, багато інших ігор створять солідну критичну масу ігор, прискорюваних залізякою, і будуть солідними аргументами для гравців на користь придбання PhysX.

сумніву

Вже мало хто сумнівається в тріумфі AGEIA. Проте їхній конкурент, компанія Havok, анонсувала свою технологію – Havok FX, яка використовує для фізичних розрахунків і ресурси CPU, і ресурси GPU третій шейдерної моделі. Виробник чіпів Radeon, канадська компанія ATI, також пропонує використовувати піксельні шейдери 3.0 у відеокартах серії х1000 для довільних обчислень, при цьому текстури використовуються для зберігання даних, а Фрагментний процесор – для їх обробки. Для порівняння: процесор Pentium IV 3 ГГц має продуктивність близько 12 GFLOP, а його системна шина – смугу пропускання близько 6 Гб за секунду; Фрагментний процесор ATI Radeon X1800XT – 120 GFLOP і, відповідно, 42 Гб в секунду. Тести показали те ж, що і передбачала теорія. Продуктивність обчислень зросла у два-три рази при їх перенесення з CPU на GPU. Однак мене, наприклад, долають все нові й нові сумніви, коли ATI надуває щоки і грає біцепсами.

Вся справа у вартості рішень від AGEIA і ATI. AGEIA пропонує залізяку не дорожче ніж за $ 400, а ATI – за $ 600. Крім того, користувачам доведеться купувати другу таку ж відеокарту. Я кажу про технології ATI Crossfire – аналог SLI рішення від NVidia: у парі працюють дві карти, одна займається тільки фізичними розрахунками, друга – тільки графікою. Так що вартість рішення піднімається до $ 1200, що, погодься, не йде ні в яке порівняння з максимальними 400 у.о. від AGEIA. Однак знову мої сумніви зростають, коли в голову приходить думка про те, чи потрібні взагалі сучасного ринку ігор фізичні прискорювачі? Єдиним вдалим прикладом використання фізики в ігровому процесі є Half-Life 2. Причому з цієї фізикою (Havok 2) легко справляються сучасні процесори від Intel і AMD. Обидві компанії, між іншим, також не дрімають і оголошують від тому, що багатоядерні процесори будуть краще справлятися з іграми … Та годі вам, хлопці, дрихніте далі … Що ж стануть робити дизайнери ігор, якщо користувач буде чекати від них повної разрушаємості ігрового рівня? Куди подінуться класичні сюжетні перешкоди, якщо можна відшукати десь динаміту і підірвати до бісової матері двері, що не пропускає за сюжетом? Втім, відповідей на багато питань, якими будуть розвіяні мої сумніви, залишилося чекати недовго – не пізніше літа 2006. На цей час заплановано з десяток різних «революцій»: Longhorn, AGEIA PhysX, Sony PlayStation 3, Nintendo Revolution і, звичайно, купа мегатайтлов, супроводжуючих залізо, начебто Oblivion. Дивний збіг, чи не так? ..

Графіка

ТИП: WWW

msdn.microsoft.com / library / default.asp? url = / library/en-us/directx9_c/dx9_graphics_reference_asm.asp

www.ixbt.com/video2/dx-current.shtml

www.ixbt.com/video2/dx-next.shtml

www.ixbt.com/video2/dx-update.shtml

www.ixbt.com/video2/longhorn.shtml

Фізика

ТИП: WWW

www.ageia.com

www.havok.com

www.radeon2.ru/articles/r5xx/gp_gpu

«Шейдер» – один з найневдаліших ТЕРМІНІВ ВО ВСІЄЇ ІСТОРІЇ IT, ПРОТЕ ЕТА ТЕХНОЛОГІЯ ПРИЙШЛА ДО НАС ДОСИТЬ ДАВНО І НАДОВГО зайняти ключові МІСЦЕ У НАШОМУ БЮДЖЕТ

ОФІЦІЙНО ІСТОРІЯ Шейдери ПОЧИНАЄТЬСЯ З СЕРІЇ GEFORCE 3

З ТОЧКИ ЗОРУ РОЗРОБНИКА ГРАФІЧНОЇ ПРОГРАМИ, шейдери – ЦЕ НАБІР СТАНІВ ГРАФІЧНОГО КОНВЕЙЄРА ПЛЮС програмний код, який ВИКОНУЄТЬСЯ ГРАФІЧНИМ ПРОЦЕСОРОМ

У ПЕРШОМУ QUAKE ТЕЖ БУЛИ Шейдери …

З кожним новим поколінням ЗРОСТАЄ ДОВЖИНА шейдерів і Кількість регістрів, ЩО ДОЗВОЛЯЄ Ускладнює І ускладнює ЕФЕКТИ

НА ВХІД верхових процесорів ПОТРАПЛЯЄ ВЕРШИНИ ТРИКУТНИКІВ, ЇХНІМ ВИОКРЕМЛЕННЯМ СЦЕНУ. ДЛЯ КОЖНОЇ ВЕРШИНИ ВИКОНУЄТЬСЯ вершинний шейдер, ЗАЗДАЛЕГІДЬ ЗАВАНТАЖЕНІ у відеокарту

РЕГІСТР предикатів і, ВІДПОВІДНО, статичні і динамічні ГАЛУЖЕННЯ З'ЯВЛЯЮТЬСЯ ТІЛЬКИ В 2.Х-ВЕРСІЇ Піксельні шейдери

PHYSX SDK БУДЕ ВИКОРИСТОВУВАТИ НАВІТЬ шаховий симулятор FRITZ ВІД КОМПАНІЇ CHESSBASE

Як запевняють розробники, ТЕХНОЛОГІЯ PHYSX ПОВИННА ВЗЯТИ НА СЕБЕ ЗАВДАННЯ ПО Обрахунок ФІЗИКИ СЦЕНИ, який поки виконується CPU

ВОНИ СТВОРЯТЬ СОЛІДНА Критична маса ІГОР, прискорює Укрзалізниця, І ДЛЯ ГРАВЦІВ СТВОРЯТЬ СЕРЙОЗНИЙ АРГУМЕНТ НА КОРИСТЬ ПРИДБАННЯ PHYSX


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*