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. А тобі? Якщо не набридло, то прочитай ось це: 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>

*

*