3d-графіка в іграх. Частина 1: коротка історія

148

Цей матеріал написаний відвідувачем сайту, і за нього нараховано винагороду.

3d-графіка ігор вдосконалюється і розвивається на комп’ютерах і консолях вже більше 25 років. Після виходу першої по-справжньому тривимірної гри quake в 1996 році, розвиток 3d-графіки пішло лавиноподібно, як і графічних api, які надавали розробникам все більше і більше можливостей для наближення рівня графіки до більш кінематографічної і реальної. Directx, opengl, glide-протистояння між різними api на пк на той момент виявилося неабияким, але в підсумку переміг directx. Glide повністю зник з ігор на початку 2000-х, так як nvidia купила займалася його розробкою компанію 3dfx, і не була зацікавлена в його подальшому розвитку. А opengl, в силу своєї відкритості, і, як наслідок, більш повільного темпу додавання інновацій, вже після випуску directx 6 в 1998 році став наздоганяючим за функціями, і його поширеність в реальних 3d-проектах з кожним роком розвитку directx тільки зменшувалася. Масові ігри з тих пір перебралися на directx, і залишаються на ньому досі практично безальтернативно. Нащадок opengl, сучасний api vulkan, майже не відстає по функціональності від directx, але все так же залишається доступний лише в декількох проектах, які можна перерахувати по пальцях.

графіка quake зразка 1996 року вже давно не вражає уяви, але на момент виходу, після тодішнього великої кількості 2d і псевдо-3d – перехід в даний повне 3d здавався чимось неймовірним. Quake engine-перший в світі повністю тривимірний графічний движок, що базується на opengl.

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

однією з перших ігор, що використовують переваги directx 6, стала thief: the dark project 1998 року.

В 1999 directx 7 приніс апаратну трансформацію і освітлення, дозволивши графічним движкам показувати картинку в іграх вже не такою плоскою, як раніше.

need for speed: porsche unleashed, що використовує directx 7. 2000 рік.

У 2000 році наступний directx 8 додав одну з головних інновацій в історії directx – шейдери, без яких і зараз не може обходитися жодна гра. Саме завдяки їм стало можливо імітувати поверхні різних матеріалів, воду, відображення і багато іншого, а не затягувати різні поверхні одноманітними текстурами. Через рік, з виходом windows xp, directx був оновлений до версії 8.1, як і шейдерная модель (shader model – далі по тексту просто sm) з версії 1.1 до 1.4. Модифікована версія directx 8.1 стала основою для першої приставки xbox, порівнянну графіку, хоч і на іншому api, показувала і знаменита playstation 2.

перша тривимірна частина серії gta-gta3, на pc використовувала функції directx 8 лише частково. Через реліз на playstation 2 в 2001, гра потрапила на комп’ютери тільки в 2002.кульмінація графічних можливостей чистого directx 8.1 і sm 1.4 в грі max payne 2: the fall of max payne, 2003 рік.

Далі шейдери удосконалювалися і ставали все складніше, що давало можливість використовувати все більше ефектів для поверхонь і їх освітлення. У 2002 році разом з directx 9.0 з’явилася sm 2.0. Однак, реальне використання її в іграх того часу було рідко: розробники движків воліли доводити до розуму графіку на перших шейдерах, так як в перші пару років карти з підтримкою directx 9 були дороги і мало поширені по відношенню до загальної кількості пк-гравців, а консолі все так же використовували directx 8 і його функціональні аналоги. Результатом стало те, що багато ігор пізніше просто перестрибнули з sm 1.x на sm 3.0, пропустивши sm 2.0, як splinter cell: chaos theory. Однак, движки деяких ігор не вміли працювати з hdr, в результаті використовувався directx 9 і комбінації sm 1.1/1.4 (для збереження сумісності зі старими відеокартами) і 2.0.

need for speed: most wanted 2005 року. Незважаючи на те, що гра на пк вимагає наявності directx 9, версія движка для цієї гри використовує спадщину sm 1.x в комбінації зі sm 2.0. Так як підтримки hdr немає, замість нього розробники застосували ефект постобробки bloom (на скріншоті зверніть увагу на небо), який своїм знаменитим сліпучим ефектом знаком всім шанувальникам даної частини nfs.

splinter cell: chaos theory 2005 року на виході пропонувала на вибір шейдери 1 або 3 покоління. Власникам карт з підтримкою sm 2.0 залишався тільки перший варіант. Пізніше вийшов патч, що додає поддердку і других шейдерів, але це був свого роду милиця, і якість картинки між 1 і 2 версією змінювалося не сильно, так як спочатку освітлення режиму directx 9 в грі було розраховане саме на sm 3.0 і супутній йому hdr-рендеринг, який на других шейдерах був неможливий.

Далі друга шейдерна модель допрацьовувалася, і виходили проміжні рішення у вигляді 2.0 a, яка просувалася nvidia, і 2.0 b, яка просувалася ati. Але через використання різними таборами трохи різних специфікацій sm, розробники ігор не поспішали інтегрувати їх можливості в свої творіння, вважаючи за краще зробити так, щоб на картах обох конкурентів гри працювали однаково. До того ж, неозброєним оком в іграх зміни від нових шейдерів помітити було важко, тому 2.0 a і 2.0 b в чистому вигляді використовувалися лищь в одиницях проектів. Але спільні напрацювання nvidia і amd не пропали даром, і наступна sm 3.0 об’єднала преіщущества попередніх версій в собі, ставши стандартом на довгі роки.

відмінності можливостей різних шейдерних моделей. Уніфікація прийшла лише до появи sm 3.0.

Найголовніша подія, завдяки якій ігри найсильніше наблизилися до реалізму в порівнянні з минулими і наступними релізами api – це вихід directx 9.0 c і sm 3.0 в 2004 році. Природно, графіка у всіх нових іграх в той же момент не стала набагато краще і реалістичніше, так як для нової версії api потрібно підтримує її обладнання у хоча б якоїсь частини гравців. Але для першопрохідця far cry 2004 року, хоч і розроблявся спочатку для sm 2.0, вже на початку 2005 року був випущений патч з підтримкою sm 3.0, і найкрасивіша гра того часу стала ще прекрасніше в своєму графічному виконанні.

far cry, без сумніву, стала першою грою, яка дійсно виділялася графікою в порівнянні з іграми минулого покоління. C неї і почалося повсюдне впровадження sm 3.0 і hdr. Цілком непогано вона виглядає і зараз, через 17 років, хіба що текстур високого дозволу не вистачає.

Саме цей момент можна вважати відправною точкою появи графіки дійсно нового покоління. У 2005 році вийшла перша ігрова консоль шостого покоління – xbox 360, в основу роботи якої ліг той же самий, злегка модифікований, directx 9.0 c. Через рік і sony випустили playstation 3, порівнянну за графічними можливостями. Хоча консоль sony використовувала не directx 9.0 с, а власну модифікацію opengl, вона підтримувала всі ті ж самі функції рендеринга завдяки використанню в якості дп модифікованої версії графіки nvidia geforce 7000 серії, яка спочатку проектувалася саме з урахуванням функцій directx 9.0 c.

До 2005 року всі великі ігрові движки та ігри на них вже підтримували sm 3.0, а з 2006 вона стала застосовуватися практично поголовно у всіх проектах. Саме з тих років ігри стали виглядати набагато краще, і більш наближено до того, що ми бачимо і зараз в 2021.

одна з найвищих точок демонстрації можливостей directx 9.0 c-crysis, 2007 рік. Такий рівень графіки і зараз мають далеко не всі проекти навіть під directx 11/12. Єдине, що не вистачає оригінальної crysis-це текстур високої чіткості. Воно й зрозуміло – на 2007 рік гра повинна була вміти працювати на прискорювачах з 256 і 512 мб пам’яті. В іншому проекти сучасності недалеко пішли.

Вихід directx 10 технічно був схожий на революцію – нова sm 4.0, універсальні шейдери замість використовувалися раніше вершинних і піксельних, обчислення на гп, зняття багатьох, раніше заважали, обмежень складності шейдерів. Але на практиці – виявився практично провалом. Причин цьому три, точніше дві причини і один наслідок: по-перше, новий directx підтримувався тільки в новій на той момент windows vista, яка була досить ресурсоємною для багатьох комп’ютерів 2006-2007 років, тому з «літаючої» на тому ж залозі windows xp на «гальмівну» vista переходити мало хто хотів. По-друге: незважаючи на значну зміну принципу роботи графічного конвеєра, графіка ігор directx 10 в порівнянні з грамотно зробленими їх версіями на directx 9 абсолютно не вражала. А все тому, що потужність перших сумісних зDirectx 10 відеокарт, крім флагманів, не дозволяла використовувати всі доступні цьому api переваги. Так, невелику різницю можна було побачити, але найчастіше ця різниця робилася навмисне – чого варта тільки можливість розблокування максимальних налаштувань графіки в грі crysis на windows xp, хоча спочатку, за словами розробників, цей режим повинен бути працездатний виключно на directx 10 і windows vista.

directx 9.0 c (зверху) з розблокованими максимальними налаштуваннями проти directx 10 (знизу) в crysis. Крім невеликих відмінностей контрастності, різницю потрібно шукати з лупою.реклама

Як наслідок, хоч у багатьох ігор і був режим directx 10, основним залишався режим directx 9.0 c, а деякі aaa-ігри, такі, як сall of duty: modern warfare 3, навіть в 2011 році працювали виключно під 9.0 c, не маючи якихось альтернатив. І тільки в 2012 році наступна гра цієї серії, call of duty: black ops 2, стала підтримувати додатково до directx 9.0 c і directx 11, по суті, перестрибнувши версію, як і в разі минулих переходів ігор з directx 8.1 на 9.0 c, минаючи проміжні 9.0/a/b. Вихід directx 10.1 роком пізніше практично нічого не змінив, так як містив лише дрібні поліпшення і підтримувався на момент виходу тільки відеокартами ati. Пізніше його напрацювання були включені до складу directx 11, і тоді вже стали доступні обом таборам.

сall of duty: modern warfare 3 і в 2011 використовувала directx 9.0 c. Яких-небудь істотних відмінностей у графіку з проектами-однолітками при цьому у неї не було, що ще раз підтверджувало – програмувати під sm 3.0 хоч і важче, але при оптимізації графічних можливостей движка для третіх шейдерів-четверті, в общем-то, і не особливо потрібні.

Вихід directx 11 в кінці 2009 року, по суті, додав тільки тесселяцию і directcompute-універсальну систему обчислення на графічних процесорах, яка повинна була допомогти перекласти деякі розрахунки в іграх з центрального процесора на відеокарту. Але популярності 11 версія api домоглася набагато більшою, ніж її попередник, ставши другим довгограючим directx після 9.0 с (який, нагадаю, використовувався всіма великими проектами аж до 2012, тобто протягом 8 (!) лет). Windows 7, разом з якою він з’явився, стала набагато популярніше попередниці vista, та й на vista був випущений пакет оновлень sp2, що приносить підтримку нового api. Дані операційні системи вже не були важкими для основної маси комп’ютерів в 2010 році, тому багато ігор 2010-2011 років вже пропонували режим directx 11 в альтернативу directx 9.

colin mcrae: dirt 2 стала однією з перших ігор, що використовує directx 11, вже в 2009 році. Хоча в грі був і більш звичний directx 9 в якості альтернативи, різниця між ними була видна на око набагато більше, ніж у випадку більшості ігор directx 9 проти directx 10. Графічний движок гри в той момент зробив величезний стрибок, і навіть через 10 років, в dirt rally 2.0 на більш новій версії того ж движка, розробникам не вдалося зробити графіку кардинально краще.

Вихід консолей восьмого покоління в кінці 2013 року перевів майже всі великі проекти на directx 11, в якості альтернативи якому деякий час залишався directx 10 – для сумісності зі старими відеокартами. Чому не 9.0 c? відповідь проста-directx 11-це той же directx 10 + тесселяція і обчислення directcompute, тому даунгрейд до десятки виконувався простим відключенням непотрібних функцій безпосередньо в движку гри, та й у користувачів на руках до того часу практично не залишилося карт з чистим 9.0 c, тому так було легше. Для підтримки 9.0 c у нових версій движків довелося б виконувати багато ручної роботи по оптимізації піксельних і вершинних шейдерів, тоді як directx 10 і 11 підтримують універсальні шейдери, з якими безпосередньо працювати простіше.

всім відома gta 5 на пк підтримує тільки directx 10 і 11. Directx 9.0 c залишився за бортом, що не дивно, адже гра вийшла на пк в 2015 році і не підтримує windows xp. Однак, сам движок цілком здатний працювати і з дев’ятим директом, адже гра виходила спочатку на ps3 і xbox 360, ставши, по суті кульмінацією графічних здібностей консолей сьомого покоління. Але на пк від спадщини directx 9.0 c було вирішено відмовитися.

Directx 12, що вийшов в 2015 році разом з windows 10, на відміну від своїх попередників не пропонував на старті будь-яких графічних поліпшень – замість цього компанія microsoft обіцяла чарівний приріст продуктивності за рахунок мультипоточного рендеринга на центральному процесорі. Говорячи простими словами, якщо раніше, аж до directx 11, обрахунком картинки на екрані займався тільки один потік процесора, то тепер можна було задіяти кілька потоків виключно для рендеринга. У теорії, при упорі в процесор і відсутності упору в відеокарту, це повинно було збільшити продуктивність кратно – наприклад, з 30 до 60 кадрів в секунду при слабкому багатопотоковому процесорі. Це стало спадщиною консолей восьмого покоління, в яких використовувалися 8-ядерні процесори зі слабкою за мірками десктопів-ровесників архітектурою і частотою всього 1.6 ггц. Однак, таких ідеальних умов в реальності бути не могло, так як умовних багатоядерних низькочастотних процесорів в домашніх пк не було. Однопотокова продуктивність до моменту поширення directx 12 у всіх сучасних процесорах, використовуваних в ігрових системах, вже була на хорошому рівні, а залишилися потоки в ігрових движках зазвичай займалися обробкою інших ігрових завдань – фізики, звуку та іншого. Крім цього, в directx 11 так само був режим багатопотокового рендеринга, який, правда, обмежувався двома потоками і рідко застосовувався, але при рекламі нового directx 12 про це замовчували. У підсумку, directx 12 практично повторив долю directx 10 в протистоянні directx 9 – начебто набагато технологічніше, але практично скрізь використовується як доповнення до рендеру directx 11, і, як відповідність, практично не підвищує продуктивність, а подекуди ще й проблем додає-так, у багатьох іграх першої хвилі з підтримкою directx 12, його включення призводило до пригальмовувань навіть при високій частоті кадрів. А в деяких іграх таке відбувається і до сих пір, тому рендер directx 11 використовується в більшості проектів і зараз, як більш безпроблемна і універсальна альтернатива directx 12 і vulkan api. Але саме цей api на xbox one і його функціональний аналог на playstation 4 дозволив цим приставкам не відставати від пк в продуктивності графіки через слабкий центральний процесор. На відміну від directx 11 і всіх минулих версій api, які працювали на високому рівні, directx 12 – низькорівневий, і оптимізувати його для певного апаратного забезпечення (консолей) набагато простіше, ніж для всіх наявних його варіацій (пк). Тому, все ж, directx 12 поступово повністю замінить собою свого попередника, але навряд чи це буде скоро, адже для цього все нові версії ігрових движків повинні розроблятися спочатку під нову версію api, а поки це станеться – вийде вже наступна версія directx. Однак, пара таких движків є вже і зараз, і вони демонструють непогану картинку вже сьогодні.

horizon: zero dawn. Використовуваний нею ігровий движок decima спочатку розроблений під низькорівневі api для застосування на консолях восьмого покоління, playstation 4 і xbox one. Саме ексклюзивом першої з них стала гра в 2017 році, на пк портована версія з’явилася лише в 2020 і вимагає обов’язкової підтримки directx 12.

Природно, що крім функціональності api, графіка в іграх теж повинна розвиватися. А без нових графічних можливостей api це неможливо. Тому в 2018 році був випущений directx 12 з підзаголовком ultimate. Основна відмінність від старого directx 12-підтримка трасування променів в реальному часі, перша графічна можливість, реально дає видимі неозброєним оком відмінності в графіку, аж з часів впровадження тесселяції в directx 11 в 2009 році. Саме такий рівень можливостей в графіку мають консолі останнього, дев’ятого покоління, playstation 5 і xbox series x/s.

metro exodus: enhanced edition, 2021 рік. Перша гра, а точніше, поліпшена версія гри 2019 року, повністю переведена на трасування променів замість растеризації і задіює всі можливості directx 12 ultimate. На момент написання статті-єдина aaa-гра з повною трасуванням, в інших іграх трасування використовується лише вибірково – тільки для освітлення, відображень або тіней.

Api vulkan, що є продовжувачем справи opengl, показує схожу з directx 11/12 картинку (в тому числі, в останніх версіях – так само з трасуванням променів), і став трохи більш поширений, ніж його предок. Він не відрізняється по функціональності від directx12, так само є низькорівневим, але при цьому не вимагає обов’язкової наявності windows 10, прекрасно працюючи і на старіших windows 7/8.1. Найчастіше його рендер більше оптимізований, і показує більшВисоку і більш стабільну продуктивність, ніж рендер directx. Однак, кількість ігор на ньому не перевищує одного-двох десятків за останні п’ять років. Розробники ігор, движки яких підтримують vulkan, далеко не завжди прагнуть витрачати свої ресурси на його версію рендера навіть для альтернативи, частіше вважаючи за краще залишити тільки більш поширений directx.

doom eternal, 2020 рік. Гра використовує движок id tech 7 і виключно vulkan api, хоча попередні версії движка так само підтримували і opengl. Графічний движок є прямим нащадком quake engine, саме того самого першого повністю тривимірного движка 1996 року. Ось як виглядає еволюція розвитку графіки за майже чверть століття.

Але з трасуванням не обійшлося без ложки дьогтю – для її використання на пк необхідні нові відеокарти з її апаратною підтримкою, а такі карти на момент виходу рейтрейсингу випустила лише nvidia в лінійці rtx2000, причому, позбавивши лінійку молодших моделей. А завдяки популярності майнінг, навіть наймолодша rtx2060 на момент виходу коштувала практично як топи попередніх поколінь, не кажучи вже про старших моделях, тому ні про яку популярність трасування променів серед масового користувача мови не йшло. На жаль, хоча на дворі вже 2021 рік, ситуація з картами, що підтримують трасування, практично не змінилася. Незважаючи на те, що вийшло вже друге покоління nvidia rtx і amd випустила свою першу лінійку з підтримкою рейтрейсингу rx 6000, популярність майнінг не дає більшій частині користувачів придбати карти з підтримкою даної технології через ціни на них, а значить і ігророби, які впровадили часткову трасування у великих проектах, не можуть перейти на повсюдне її використання і показати масовому гравцеві реальні відмінності від тих же проектів на directx 11, випущеного в далекому 2009 році. Тому реальну графіку нового покоління ми побачимо лише тоді, коли карти з підтримкою трасування променів стануть доступними за ціною і переважаючими в кількості у простих гравців. І коли молодші моделі карт з підтримкою трасування не будуть такими слабкими в рейтрейсингу, як зараз – адже навіть в поточних проектах з рейтрейсингом їх продуктивності вже замало в дозволі fullhd, не кажучи вже про проекти майбутніх років і дозволі 4k. На той час, швидше за все, вийде вже наступний directx, і саме він стане наступним масовим api, а directx 12 залишиться в нашій пам’яті як першопроходець низькорівневих api і трасування променів, як directx 10 згадується зараз першим api з підтримкою універсальних шейдерів і розрахунків на гп.

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