Глава 6 - огляд шейдеров

огляд шейдеров

Навіть після значних удосконалень в Direct3D 7.0 між іграми не з'явилося багато відмінностей, вони просто заробили швидше, могли мати багато полігонів, застосовували стиснення текстур і ефекти мультитекстурирования для відображення декількох текстур і змішування їх воєдино. Справжня революція прийшла з DirectX 8 і DirectX 9. DirectX 8 остаточно видалив компонент DirectDraw і ввів вершинні шейдери, піксельні шейдери і багато ефектів - накладення рельєфу, нестандартне накладення текстур і т.д. - але підтримував тільки шейдерну модель 1.0, і спочатку був не дуже легкий у використанні через численні змін в API і необхідності писати шейдери на мові асемблера.

Шейдери всюди в XNA

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

Якщо ви раніше працювали з OpenGL або DirectX і користувалися тільки фіксованим конвеєром функцій, то можете дивуватися, навіщо треба так багато зусиль витрачати на шейдери і чому не можна просто візуалізувати деякі тривимірні дані на екрані, як робилося досі. Так, написання коду стало дещо важче, і, хоча ви могли в DirectX візуалізувати моделі .x майже нічого не знаючи про матрицях і внутрішніх принципах роботи GPU, вам не вдасться внести в візуалізацію значні зміни, якщо ви не розберетеся в деталях. Можливо, вивчити всі про шейдерах важко, але, по крайней мере, ви тісніше познайомитеся з графічним обладнанням, краще зрозумієте як полігони візуалізуються на екрані, чому можуть відбуватися помилки і як швидко виправити їх.

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

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

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

Глава 6 - огляд шейдеров

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

приклади ігор

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

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

Глава 6 - огляд шейдеров

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

Схожі статті