3D-графика в играх. Часть 1: Краткая история
Часть 1. Часть 2 доступна по ссылке.
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, но всё так же остаётся доступен лишь в нескольких проектах, которые можно пересчитать по пальцам.
![](https://overclockers.ru/st/legacy/blog/405787/261894_O.jpg)
реклама
Развитие шло быстро, ранние версии DirectX с 1 по 5 сменяли друг друга каждые полгода, но их функции могли выполняться на центральном процессоре, без участия видеокарты. Появление массовых графических процессоров можно отнести к 1998 году, одновременно с выходом DirectX 6, который принёс первое большое обновление API, влияющее на визуальный вид проектов, мультитекстурирование – одновременное наложение за раз нескольких текстур.
![](https://overclockers.ru/st/legacy/blog/405787/261895_O.jpg)
В 1999 DirectX 7 принёс аппаратную трансформацию и освещение, позволив графическим движкам показывать картинку в играх уже не такой плоской, как ранее.
![](https://overclockers.ru/st/legacy/blog/405787/261896_O.jpg)
В 2000 году следующий DirectX 8 добавил одну из главных инноваций в истории DirectX - шейдеры, без которых и сейчас не может обходиться ни одна игра. Именно благодаря им стало возможно имитировать поверхности разных материалов, воду, отражения и многое другое, а не затягивать разные поверхности однообразными текстурами. Через год, с выходом Windows XP, DirectX был обновлён до версии 8.1, как и шейдерная модель (Shader Model – далее по тексту просто SM) с версии 1.1 до 1.4. Модифицированная версия DirectX 8.1 стала основой для первой приставки Xbox, сравнимую графику, хоть и на другом API, показывала и знаменитая PlayStation 2.
![](https://overclockers.ru/st/legacy/blog/405787/261897_O.jpg)
![](https://overclockers.ru/st/legacy/blog/405787/261898_O.jpg)
реклама
Далее шейдеры совершенствовались и становились всё сложнее, что давало возможность использовать всё больше эффектов для поверхностей и их освещения. В 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.
![](https://overclockers.ru/st/legacy/blog/405787/261899_O.jpg)
![](https://overclockers.ru/st/legacy/blog/405787/261900_O.jpg)
Далее вторая шейдерная модель дорабатывалась, и выходили промежуточные решения в виде 2.0a, которая продвигалась NVIDIA, и 2.0b, которая продвигалась ATI. Но из-за использования разными лагерями немного разных спецификаций SM, разработчики игр не спешили интегрировать их возможности в свои творения, предпочитая сделать так, чтобы на картах обоих конкурентов игры работали одинаково. К тому же, невооружённым глазом в играх изменения от новых шейдеров заметить было трудно, поэтому 2.0a и 2.0b в чистом виде использовались лишь в единицах проектов. Но совместные наработки NVIDIA и AMD не пропали даром, и следующая SM 3.0 объединила преимущества предыдущих версий в себе, став стандартом на долгие годы.
![](https://overclockers.ru/st/legacy/blog/405787/261901_O.jpg)
Самое главное событие, благодаря которому игры сильнее всего приблизились к реализму по сравнению с прошлыми и следующими релизами API – это выход DirectX 9.0c и SM 3.0 в 2004 году. Естественно, графика во всех новых играх в тот же момент не стала намного лучше и реалистичнее, так как для новой версии API нужно поддерживающее её оборудование у хотя бы какой-то части игроков. Но для первопроходца Far Cry 2004 года, хоть и разрабатывавшегося изначально для SM 2.0, уже в начале 2005 года был выпущен патч с поддержкой SM 3.0, и самая красивая игра того времени стала ещё великолепнее в своём графическом исполнении.
![](https://overclockers.ru/st/legacy/blog/405787/261902_O.jpg)
![](https://overclockers.ru/st/legacy/blog/405787/261903_O.jpg)
реклама
Именно этот момент можно считать отправной точкой появления графики действительно нового поколения. В 2005 году вышла первая игровая консоль шестого поколения - Xbox 360, в основу работы которой лёг тот же самый, слегка модифицированный, DirectX 9.0c. Через год и Sony выпустили PlayStation 3, сравнимую по графическим возможностям. Хотя консоль Sony использовала не DirectX 9.0с, а собственную модификацию OpenGL, она поддерживала всё те же самые функции рендеринга благодаря использованию в качестве ГП модифицированной версии графики NVIDIA GeForce 7000 серии, которая изначально проектировалась именно с учётом функций DirectX 9.0c.
К 2005 году все крупные игровые движки и игры на них уже поддерживали SM 3.0, а с 2006 она стала применяться практически поголовно во всех проектах. Именно с тех годов игры стали выглядеть гораздо лучше, и более приближённо к тому, что мы видим и сейчас в 2021.![](https://overclockers.ru/st/legacy/blog/405787/261904_O.jpg)
Выход 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.
![](https://overclockers.ru/st/legacy/blog/405787/261905_O.png)
DirectX 9.0c (сверху) с разблокированными максимальными настройками против DirectX 10 (снизу) в Crysis. Кроме небольших отличий контрастности, разницу нужно искать с лупой.
![](https://overclockers.ru/st/legacy/blog/405787/261907_O.png)
реклама
Как следствие, хоть у многих игр и был режим DirectX 10, основным оставался режим DirectX 9.0c, а некоторые AAA-игры, такие, как Сall of Duty: Modern Warfare 3, даже в 2011 году работали исключительно под 9.0c, не имея каких-то альтернатив. И только в 2012 году следующая игра этой серии, Call of Duty: Black Ops 2, стала поддерживать дополнительно к DirectX 9.0c и DirectX 11, по сути, перепрыгнув версию, как и в случае прошлых переходов игр с DirectX 8.1 на 9.0c, минуя промежуточные 9.0/a/b. Выход DirectX 10.1 годом позже практически ничего не изменил, так как содержал лишь мелкие улучшения и поддерживался на момент выхода только видеокартами ATI. Позже его наработки были включены в состав DirectX 11, и тогда уже стали доступны обоим лагерям.
![](https://overclockers.ru/st/legacy/blog/405787/261908_O.jpg)
Выход DirectX 11 в конце 2009 года, по сути, добавил только тесселяцию и DirectCompute – универсальную систему вычисления на графических процессорах, которая должна была помочь переложить некоторые расчёты в играх с центрального процессора на видеокарту. Но популярности 11 версия API добилась намного большей, чем её предшественник, став вторым долгоиграющим DirectX после 9.0с (который, напомню, использовался всеми крупными проектами вплоть до 2012, то есть в течение 8 (!) лет). Windows 7, вместе с которой он появился, стала гораздо популярнее предшественницы Vista, да и на Vista был выпущен пакет обновлений SP2, приносящий поддержку нового API. Данные операционные системы уже не были тяжёлыми для основной массы компьютеров в 2010 году, поэтому многие игры 2010-2011 годов уже предлагали режим DirectX 11 в альтернативу DirectX 9.
![](https://overclockers.ru/st/legacy/blog/405787/261909_O.jpg)
Выход консолей восьмого поколения в конце 2013 года перевёл почти все крупные проекты на DirectX 11, в качестве альтернативы которому некоторое время оставался DirectX 10 – для совместимости со старыми видеокартами. Почему не 9.0c? Ответ прост – DirectX 11 – это тот же DirectX 10 + тесселяция и вычисления DirectCompute, поэтому даунгрейд до десятки выполнялся простым отключением ненужных функций непосредственно в движке игры, да и у пользователей на руках к тому времени практически не осталось карт с чистым 9.0c, поэтому так было легче. Для поддержки 9.0c у новых версий движков пришлось бы выполнять много ручной работы по оптимизации пиксельных и вершинных шейдеров, тогда как DirectX 10 и 11 поддерживают универсальные шейдеры, с которыми напрямую работать проще.
![](https://overclockers.ru/st/legacy/blog/405787/261910_O.jpg)
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. Однако, пара таких движков есть уже и сейчас, и они демонстрируют неплохую картинку уже сегодня.
![](https://overclockers.ru/st/legacy/blog/405787/261911_O.png)
Естественно, что помимо функциональности API, графика в играх тоже должна развиваться. А без новых графических возможностей API это невозможно. Поэтому в 2018 году был выпущен DirectX 12 с подзаголовком Ultimate. Основное отличие от старого DirectX 12 – поддержка трассировки лучей в реальном времени, первая графическая возможность, реально дающая видимые невооруженным глазом отличия в графике, аж со времен внедрения тесселяции в DirectX 11 в 2009 году. Именно такой уровень возможностей в графике имеют консоли последнего, девятого поколения, PlayStation 5 и Xbox Series X/S.
![](https://overclockers.ru/st/legacy/blog/405787/261912_O.png)
API Vulkan, являющийся продолжателем дела OpenGL, показывает схожую с DirectX 11/12 картинку (в том числе, в последних версиях – так же с трассировкой лучей), и стал чуть более распространён, чем его предок. Он не отличается по функциональности от DirectX12, так же является низкоуровневым, но при этом не требует обязательного наличия Windows 10, прекрасно работая и на более старых Windows 7/8.1. Зачастую его рендер больше оптимизирован, и показывает более высокую и более стабильную производительность, чем рендер DirectX. Однако, количество игр на нём не превышает одного-двух десятков за последние пять лет. Разработчики игр, движки которых поддерживают Vulkan, далеко не всегда стремятся тратить свои ресурсы на его версию рендера даже для альтернативы, чаще предпочитая оставить только более распространённый DirectX.
![](https://overclockers.ru/st/legacy/blog/405787/261914_O.png)
Но с трассировкой не обошлось без ложки дёгтя – для её использования на ПК необходимы новые видеокарты с её аппаратной поддержкой, а такие карты на момент выхода рейтрейсинга выпустила лишь NVIDIA в линейке RTX2000, причём, лишив линейку младших моделей. А благодаря популярности майнинга, даже самая младшая RTX2060 на момент выхода стоила практически как топы предыдущих поколений, не говоря уже о старших моделях, поэтому ни о какой популярности трассировки лучей среди массового пользователя речи не шло. К сожалению, хотя на дворе уже 2021 год, ситуация с картами, поддерживающими трассировку, практически не поменялась. Несмотря на то, что вышло уже второе поколение NVIDIA RTX и AMD выпустила свою первую линейку с поддержкой рейтрейсинга RX 6000, популярность майнинга не даёт большей части пользователей приобрести карты с поддержкой данной технологии из-за цен на них, а значит и игроделы, внедрившие частичную трассировку в крупных проектах, не могут перейти на повсеместное её использование и показать массовому игроку реальные отличия от тех же проектов на DirectX 11, выпущенного в далёком 2009 году. Поэтому реальную графику нового поколения мы увидим лишь тогда, когда карты с поддержкой трассировки лучей станут доступными по цене и преобладающими в количестве у простых игроков. И когда младшие модели карт с поддержкой трассировки не будут такими слабыми в рейтрейсинге, как сейчас – ведь даже в текущих проектах с рейтрейсингом их производительности уже маловато в разрешении FullHD, не говоря уже о проектах будущих лет и разрешении 4K. К тому времени, скорее всего, выйдет уже следующий DirectX, и именно он станет следующим массовым API, а DirectX 12 останется в нашей памяти как первопроходец низкоуровневых API и трассировки лучей, как DirectX 10 вспоминается сейчас первым API с поддержкой универсальных шейдеров и расчётов на ГП.
Хотя, для красивой графики не всегда обязательно иметь трассировку. Технологичные и оптимизированные игровые движки могут даже на массовых видеокартах показать очень красивую картинку с хорошей производительностью. Лучшие из них мы рассмотрим в следующей статье цикла.
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила